Ich muss einige WORD-Dateien (.docx) übersetzen, indem ich die Datei "document.xml" entpacke und sie mit YandexTranslate übersetze.
Mein 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")
Das funktioniert, aber seit ich gezwungen bin, "str" weiterzugehen"translate.translate ()" Damit die Übersetzung funktioniert, bekomme ich eine Ausgabe, die mit «{" lang ":" fr-de "," code ": 200," text ": [" »und ähnlichem gefüllt ist. Ich habe es versucht die Ersetzungsmethode wie in
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": ["", "")
Wenn ich die Ausgabe drucke, ist es sauber, aber wenn die Datei geschrieben wird, ist es nicht.
Hat jemand eine Lösung, um den Übersetzungstext nur in die neue XML-Datei zu schreiben?
Antworten:
0 für die Antwort № 1Es funktioniert, indem Sie "str" zu "elem.text" hinzufügen:
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": ["", ""))
Nicht wirklich sicher warum ...