2017-02-12 57 views
0

我需要翻譯一些WORD文件(.docx),並通過提取'document.xml'文件並使用YandexTranslate翻譯它。在xml文件翻譯後清理翻譯輸出

我的代碼:

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') 

這工作,但因爲我不得不對翻譯「translate.translate()」傳「海峽」工作,我得到填充«{'郎輸出':'fr-en','code':200,'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\': [\'', '') 

如果我打印輸出,它是乾淨的,但是當文件寫入它不是。

有人有解決方案只將翻譯文本寫入新的XML文件?

回答

0

製造它通過增加 '海峽' 到「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\': [\'', '')) 

真的不知道爲什麼......