Перевод текста с помощью py_translate на python: ValueError: («Ни один объект JSON не может быть декодирован») - PullRequest
0 голосов
/ 14 января 2019

У меня есть информационный фрейм pandas, в котором есть куча текста на английском или французском языке. Я хочу перевести французский текст на английский. Я использую лямбду, как это:

from py_translator import Translator
import pandas as pd

translator = Translator()
// read data into dataframe df

df.apply(lambda x:pre_process(x, translator), axis=1)

Перевод происходит в функции pre_process:

def pre_process(data, translator):
    text = data['text']

    # Detect french or english: if French, translate to English
    language = detect(text)
    if(language == 'fr'):
        text = translator.translate(text, src='fr', dest='en')

    data['text'] = text

Я запускаю тестовую версию с несколькими французскими документами, и все, кажется, в порядке. Однако, когда я запускаю полную версию, я получаю сообщение об ошибке слишком долго:

Traceback (most recent call last):
  File "myscript.py", line 120, in <module>
    df.apply(lambda x:pre_process(x, translator), axis=1)
  File "/usr/lib64/python2.7/site-packages/pandas/core/frame.py", line 6014, in apply
    return op.get_result()
  File "/usr/lib64/python2.7/site-packages/pandas/core/apply.py", line 142, in get_result
    return self.apply_standard()
  File "/usr/lib64/python2.7/site-packages/pandas/core/apply.py", line 248, in apply_standard
    self.apply_series_generator()
  File "/usr/lib64/python2.7/site-packages/pandas/core/apply.py", line 277, in apply_series_generator
    results[i] = self.f(v)
  File "tfidf_keyword_extraction_w_scikit.py", line 120, in <lambda>
    df.apply(lambda x:pre_process(x, translator), axis=1)
  File "tfidf_keyword_extraction_w_scikit.py", line 36, in pre_process
    text = translator.translate(str(text), src='fr', dest='en').text
  File "/usr/lib/python2.7/site-packages/py_translator/client.py", line 172, in translate
    data = self._translate(text, dest, src)
  File "/usr/lib/python2.7/site-packages/py_translator/client.py", line 81, in _translate
    data = utils.format_json(r.text)
  File "/usr/lib/python2.7/site-packages/py_translator/utils.py", line 62, in format_json
    converted = legacy_format_json(original)
  File "/usr/lib/python2.7/site-packages/py_translator/utils.py", line 54, in legacy_format_json
    converted = json.loads(text)
  File "/usr/lib64/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/usr/lib64/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib64/python2.7/json/decoder.py", line 384, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: ('No JSON object could be decoded', u'occurred at index 17')

Кажется, я не могу это исправить. Есть предложения?

1 Ответ

0 голосов
/ 14 января 2019

С небольшими изменениями в вашем коде (return, language.lang и translator.translate(text, src='fr', dest='en'). текст , все заработало.

from py_translator import Translator
import pandas as pd

translator = Translator()

df = pd.DataFrame({'vals': [1, 2],
                   'text': [u'«Il a neigé !» cria Jean tout excité lorsqu’il regarda par la fenêtre ce matin-là.',
                            u'Il était allé à la montagne avec ses amis Sophie, Charles et Félix pour les vacances d’hiver.'
                           ]})


def pre_process(data, translator):
    text = data['text']

    # Detect french or english: if French, translate to English
    language = translator.detect(text)
    if(language.lang == 'fr'):
        text = translator.translate(text, src='fr', dest='en').text

    return text

df['en'] = df.apply(lambda x:pre_process(x, translator), axis=1)
print (df)
...