Как применить функцию детектора Polyglot к кадру данных

Предполагая, что у меня есть столбец с именем df.Text который содержит текст (более 1 предложения), и я хочу использовать полиглот Detector определить язык и сохранить значение в новом столбце df['Text-Lang'] Как я могу убедиться, что я также захватить другие детали, такие как code а также confidence

testEng ="This is English"
lang = Detector(testEng)
print(lang.language)

возвращается

название: английский код: en достоверность: 94.0 прочитано байтов: 1920

но

df['Text-Lang','Text-LangConfidence']= df.Text.apply(Detector)

заканчивается

AttributeError: объект "float" не имеет атрибута "encode", и Detector не может надежно определять язык.

Я неправильно применяю функцию детектора или неправильно сохраняю вывод или что-то еще?

1 ответ

Решение

Во-первых, если вам нужно только polyglot для определения языка лучше использовать pycld2 непосредственно, это то, что используется за кадром. У него гораздо чище API.

Сказав это, ошибка, которую вы заявляете, происходит от одного из значений в вашем Text столбец, который является действительным числом. Таким образом, вам придется конвертировать такие значения в строки.

Следующая проблема, с которой вы столкнетесь, - это минимальная длина текста. polyglot выдаст исключение, если текст слишком короткий. Вы должны заставить замолчать исключение, передав quiet=True,

Теперь, применяя Detector вернет объект. Таким образом, вам придется проанализировать его, чтобы извлечь информацию, которую вы хотите. Чтобы извлечь названия языков, вам придется импортировать icu модуль (это зависимость polyglotтак что он у вас уже установлен)

import icu
df.Text = df.Text.astype(str)
df['poly_obj'] = df.Text.apply(lambda x: Detector(x, quiet=True))
df['Text-lang'] = df['poly_obj'].apply(lambda x: icu.Locale.getDisplayName(x.language.locale))
df['Text-LangConfidence'] = df['poly_obj'].apply( lambda x: x.language.confidence)

После этого вы можете бросить poly_obj колонка.

Вы можете попробовать это:

testEng ="This is English"
lang = Detector(testEng)
df['Text-Lang']=lang.language.code
df['Text-LangConfidence']=leng.language.confidence
Другие вопросы по тегам