Почему перевод абзаца останавливается на первой точке в конце первого предложения?
У меня есть этот код перевода Google. Со своей задачей справляется хорошо, но есть небольшой баг. Не знаю почему, но перевод останавливается на DOT (точка в конце первого предложения). Итак, каждое предложение переводится до первой точки, но дальше не идет.
import sys
import requests
url = "https://translate.google.com/translate_a/single"
headers = {
"Host": "translate.google.com",
"Accept": "*/*",
"Cookie": "",
"User-Agent": "GoogleTranslate/5.9.59004 (iPhone; iOS 10.2; ja; iPhone9,1)",
"Accept-Language": "en",
"Accept-Encoding": "gzip, deflate",
"Connection": "keep-alive",
}
sentence = "A glint of joy had appeared in my eyes, discreet but effective, just as the reddish sun lit up the horizon for the last time. After all, the most telling proof of understanding art, sensing fidelity to nature is to observe a phenomenon."
params = {
"client": "it",
"dt": ["t", "rmt", "bd", "rms", "qca", "ss", "md", "ld", "ex"],
"otf": "2",
"dj": "1",
"q": sentence,
"hl": "ja",
"ie": "UTF-8",
"oe": "UTF-8",
"sl": "en",
"tl": "ru",
}
res = requests.get(
url=url,
headers=headers,
params=params,
)
print(res.status_code)
res = res.json()
print(res["sentences"][0]["trans"])
Ответы (2 шт):
Просто переберите все предложения:
for sentence in res["sentences"]:
if 'trans' in sentence:
print(sentence["trans"])
Вывод:
200
В моих глазах появился огонек радости, сдержанный, но действенный, когда красноватое солнце в последний раз осветило горизонт.
Ведь самое красноречивое доказательство понимания искусства, ощущения верности природе — это наблюдение явления.
А вообще в таких случаях нужно просто красиво печатать данные и всё становится понятно:
import pprint
pprint.pprint(res)
Вывод:
{'confidence': 0.9784949,
'ld_result': {'extended_srclangs': ['en'],
'srclangs': ['en'],
'srclangs_confidences': [0.9784949]},
'sentences': [{'backend': 3,
'model_specification': [{}],
'orig': 'A glint of joy had appeared in my eyes, discreet but '
'effective, just as the reddish sun lit up the horizon '
'for the last time.',
'trans': 'В моих глазах появился огонек радости, сдержанный, '
'но действенный, когда красноватое солнце в последний '
'раз осветило горизонт. ',
'translation_engine_debug_info': [{'model_tracking': {'checkpoint_md5': 'c5f104380d2f4c4bf0c587f790a21817',
'launch_doc': 'en_ru_2021q4.md'}}]},
{'backend': 3,
'model_specification': [{}],
'orig': 'After all, the most telling proof of understanding '
'art, sensing fidelity to nature is to observe a '
'phenomenon.',
'trans': 'Ведь самое красноречивое доказательство понимания '
'искусства, ощущения верности природе — это '
'наблюдение явления.',
'translation_engine_debug_info': [{'model_tracking': {'checkpoint_md5': 'c5f104380d2f4c4bf0c587f790a21817',
'launch_doc': 'en_ru_2021q4.md'}}]},
{'translit': 'V moikh glazakh poyavilsya ogonek radosti, '
'sderzhannyy, no deystvennyy, kogda krasnovatoye '
"solntse v posledniy raz osvetilo gorizont. Ved' "
"samoye krasnorechivoye dokazatel'stvo ponimaniya "
'iskusstva, oshchushcheniya vernosti prirode — eto '
'nablyudeniye yavleniya.'}],
'spell': {},
'src': 'en'}
Тут сразу видно, что в словаре res есть список словарей 'sentences', из которого нам нужно взять элементы по ключам 'trans'. Причём, этот ключ присутствует не в каждом словаре списка, его присутствие нужно дополнительно проверять.
посмотри это. Я изменил код. Теперь он работает нормально, переводит все предложения, а не только некоторые из них.
import sys
import requests
def translate(contents, source_language, target_language):
url = "https://translate.google.com/translate_a/single"
headers = {
"Host": "translate.google.com",
"Accept": "*/*",
"Cookie": "",
"User-Agent": "GoogleTranslate/5.9.59004 (iPhone; iOS 10.2; ja; iPhone9,1)",
"Accept-Language": "fr",
"Accept-Encoding": "gzip, deflate",
"Connection": "keep-alive",
}
params = {
"client": "it",
"dt": ["t", "rmt", "bd", "rms", "qca", "ss", "md", "ld", "ex"],
"otf": "2",
"dj": "1",
"q": requests.utils.quote(contents),
"hl": "ja",
"ie": "UTF-8",
"oe": "UTF-8",
"sl": source_language,
"tl": target_language,
}
res = requests.get(
url=url,
headers=headers,
params=params,
)
if res.status_code != 200:
raise Exception('Could not translate phrase')
res = res.json()
for sentence in res["sentences"]:
if 'trans' in sentence:
return requests.utils.unquote(sentence["trans"])
raise Exception('Could not find translation')
if __name__ == "__main__":
print(translate("piersici & caise; mere | visine = rodii. struguri, pere", "ro", "en"))