Как применить функцию детектора 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