如何在数据帧中应用多路检测功能

2024-06-16 11:56:44 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个名为df.Text的列,其中包含文本(多于一个句子),我想使用polyglot Detector来检测语言并将值存储在新列df['Text-Lang']中,我如何确保还捕获其他细节,如code和{}

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

退货

name: English code: en confidence: 94.0 read bytes: 1920

但是

^{pr2}$

以结束

AttributeError: 'float' object has no attribute 'encode' and Detector is not able to detect the language reliably.

我是不是错误地应用了检测器功能,或者存储了错误的输出还是其他什么?在


Tags: text文本语言dflangenglishis错误
2条回答

首先,如果您只需要polyglot进行语言检测,那么最好直接使用pycld2,这是幕后使用的。它有很多更干净的API。在

也就是说,您声明的错误来自于Text列中的一个值,它是一个实数。所以你必须把这些值转换成字符串。在

下一个问题是最小文本长度。^如果文本太短,{}将引发异常。您必须通过传递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

相关问题 更多 >