проблема с использованием функции перевода текстовых блоков для фрейма данных Pandas

#python-3.x #pandas #dataframe #textblob

#python-3.x #панды #фрейм данных #текстовый блок

Вопрос:

Я пытаюсь преобразовать неанглийские языки в английский, используя функцию перевода TextBlob. Мой набор данных основан на фрейме данных Pandas.

Я понял, что это работает в контексте фрейма данных, отличного от Pandas. Например,

 what=TextBlob("El apartamento de Evan esta muy bien situado, con fcil acceso al cualquier punto de Manhattan gracias al metro.")
whatt=what.translate(to= 'en')
print (whatt)
 

Но, основываясь на фрейме данных Pandas, TextBlob translate не будет работать должным образом.

Я искал способ решить эту проблему и нашел код, но выдал мне другое сообщение об ошибке. Может ли кто-нибудь помочь мне с этим?

 data["comments"] = data["comments"].str.encode('ISO 8859-1', 'ignore').apply(lambda x: TextBlob(x.strip()).translate(to='en'))

TypeError: cannot use a string pattern on a bytes-like object
 

Ответ №1:

Интересная проблема

 import pandas as pd
data = { 'number' : [1,2], 'comments' : ['El apartamento de Evan','Manhattan gracias al metro' ] }
df = pd.DataFrame(data)
 

а затем давайте сделаем перевод в новую строку

 df["commentst"] = df["comments"].apply(lambda x: str(TextBlob(x).translate(to='en')))
 

и это дает

     number  comments                    commentst
0   1       El apartamento de Evan      Evan's Apartment
1   2       Manhattan gracias al metro  Manhattan thanks to the subway
 

И вот минимальная пробная версия

 def get_english(message):
    analysis = TextBlob(message)
    language = analysis.detect_language()
    if language == 'en':
        return message
    return str(analysis.translate(to='en'))

df["commentst"] = df["comments"].apply(lambda x: get_english(x))
df
 

Это дает то же самое с моим, но я не уверен в ваших данных

Комментарии:

1. Привет, спасибо за ваш ответ! У меня есть дополнительный вопрос. Если некоторые английские слова смешиваются в комментариях с другими языками, я заметил, что это также выдает ошибку (не переведено: Translation API вернул входную строку без изменений). Я попытался использовать tryamp;except, но Python ничего не сделал. У вас есть какие-либо идеи, как я могу решить эту проблему?

2. Знаете ли вы, с каких языков вы пришли? Это очень помогает с переводом.

3. Я проверил это, и в основном это на испанском, но, похоже, некоторые другие языки тоже (отзывы клиентов). Не удается проверить все строки, поскольку их слишком много.

4. Спасибо за обновление. Я запустил его на подвыборке моих данных, и он работает нормально. Он оставляет только английский как есть. Но у меня было около 27000 отзывов, и я столкнулся с ошибкой -> HTTPError: слишком много запросов. Похоже, это не ошибка вашего кода, а какие-то ограничения или ограничения на объем данных, которые Python может обрабатывать при использовании Google Translation API?

5. Вы неявно вызываете Google translate, и у них могут быть ограничения. Я не знаю об этом.