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?