Ошибка API перевода текстовых BLOB-объектов Python

Я использую textblob в Python 2.7.10 в Windows уже довольно давно, и неожиданно он перестал работать. Тестирование с двумя независимыми виртуальными машинами, а также на OS X дает ту же ошибку.

Тестирование простого фрагмента из документов:

    from textblob import TextBlob
    en_blob = TextBlob(u'Simple is better than complex.')
    print(en_blob.translate(to='es'))

выдает ошибку:

File "test.py", line 3, in <module> print(en_blob.translate(to='es'))

File "C:\Python27\lib\site-packages\textblob\blob.py", line 509, in translate
from_lang=from_lang, to_lang=to))

File "C:\Python27\lib\site-packages\textblob\translate.py", line 45, in translate
raise NotTranslated('Translation API returned the input string unchanged.')

textblob.exceptions.NotTranslated: Translation API returned the input string 
unchanged.

Как я могу отладить эту ошибку?


person user145078    schedule 15.02.2016    source источник


Ответы (4)


Как упоминалось в документации, Textblob использует API Google Translate для своих переводов.

Судя по всему, этот (недокументированный) API изменил формат вывода. Я могу выполнить успешный запрос с помощью этого фрагмента:

import requests
url = 'http://translate.google.com/translate_a/t'
params = {
    "text": "Simple is better than complex", 
    "sl": "en", 
    "tl": "es", 
    "client": "p"
}
print(requests.get(url, params=params).content)

>> '"Simple es mejor que complejo"'

В исходном коде textblob код указывает на подход с кодировкой json, но, видимо, Google решил, что простота действительно лучше, чем сложность.

Эта проблема уже упоминалась в https://github.com/sloria/TextBlob/issues/117.

person Gijs    schedule 15.02.2016
comment
Я столкнулся с той же проблемой, но с определением языка, а не с переводом. Не могли бы вы помочь мне понять, как я могу сделать то же самое с вышеуказанным форматом. - person Harsh Patni; 16.02.2016

Как упоминал @Gijs, API Google Translate изменился. Это привело к тому, что функции перевода и определения языка TextBlob перестали работать.

Я отправил PR для устранения проблемы.

person jschnurr    schedule 16.02.2016

Вам просто нужно установить параметр from_lang, сообщающий, с какого языка вы переводите:

en_blob = TextBlob(u'Simple is better than complex.')
print(en_blob.translate(from_lang='en', to='es'))
person Thoms Shmims    schedule 08.10.2018

По моему опыту, введение параметра from_lang не решает проблему. Я исправил вызов API перевода Google с другого фронта, а не через текстовые блобы. https://github.com/ssut/py-googletrans

person RiGonz    schedule 11.10.2020