2017-02-12 2 views
0

J'ai besoin de traduire des fichiers WORD (.docx) et je le fais en extrayant le fichier 'document.xml' et en le traduisant avec YandexTranslate.Nettoyer la sortie de traduction après la traduction du fichier xml

Mon code:

import xml.etree.ElementTree as Et 
from yandex_translate import YandexTranslate 
import zipfile 

with zipfile.ZipFile('myfrenchfile.docx') as zf: 
    zf.extract(r'word/document.xml') 

with open('word/document.xml', encoding='utf-8') as f: 
    tree = Et.parse(f) 
    root = tree.getroot() 

    for elem in root.getiterator(): 
     translate = YandexTranslate(
      'myyandexkey') 
     try: 
      if elem.text: 
       elem.text = elem.text.replace(elem.text, str(translate.translate(elem.text, 'en'))) 
     except AttributeError: 
      pass 

tree.write('document.xml', encoding='utf-8') 

Cela fonctionne, mais depuis que je suis obligé de passer « str » sur « translate.translate() » pour la traduction au travail, je reçois une sortie peuplée avec «{ 'lang ':' fr-en ',' code ': 200,' texte ': [' »et similaire. J'ai essayé la méthode replace comme dans

str(translate.translate(elem.text, 'en')).\ 
        replace('{\'lang\': \'fr-en\', \'code\': 200, \'text\': [\'', '').\ 
        replace('\']}', '').replace('{\'lang\': \'en-en\', \'code\': 200, \'text\': [\'', '').\ 
        replace('{\'lang\': \'en-en\', \'text\': [\'', '').\ 
        replace('\'], \'code\': 200}', '').replace('{\'code\': 200, \'lang\': \'en-en\', \'text\': [\'', '')\ 
        .replace('{\'code\': 200, \'lang\': \'fr-en\', \'text\': [\'', '').\ 
        replace('{\'code\': 200, \'lang\': \'de-en\', \'text\': [\'', '').\ 
        replace('{\'lang\': \'de-en\', \'code\': 200, \'text\': [\'', '') 

Si j'imprime la sortie, il est propre, mais quand le fichier est écrit ce n'est pas.

Est-ce que quelqu'un a une solution pour écrire le texte de traduction uniquement dans le nouveau fichier XML?

Répondre

0

fait le travail en ajoutant 'str' à 'elem.text':

try: 
     if elem.text: 
      elem.text = elem.text.replace(str(elem.text), str(translate.translate(elem.text, 'en')). 
              replace('{\'lang\': \'fr-en\', \'code\': 200, \'text\': [\'', ''). 
              replace('\']}', '').replace('{\'lang\': \'en-en\', \'code\': 200, ' 
                     '\'text\': [\'', ''). 
              replace('{\'lang\': \'en-en\', \'text\': [\'', ''). 
              replace('\'], \'code\': 200}', ''). 
              replace('{\'code\': 200, \'lang\': \'en-en\', \'text\': [\'', ''). 
              replace('{\'code\': 200, \'lang\': \'fr-en\', \'text\': [\'', ''). 
              replace('{\'code\': 200, \'lang\': \'de-en\', \'text\': [\'', ''). 
              replace('{\'lang\': \'de-en\', \'code\': 200, \'text\': [\'', ''). 
              replace('{\'lang\': \'pl-en\', \'code\': 200, \'text\': [\'', '')) 

Pas vraiment sûr pourquoi ...