如何将Polyglot Detector功能应用于数据帧

mob*_*cdi 5 python polyglot pandas

假设我有一个名为列df.Text包含文本(多于1句),我想使用多种语言的Detector检测语言和值存储在一个新的列df['Text-Lang']我如何确保我还捕捉到其他细节,如codeconfidence

testEng ="This is English"
lang = Detector(testEng)
print(lang.language)
Run Code Online (Sandbox Code Playgroud)

回报

名称:英文代码:en confidence:94.0读取字节:1920

df['Text-Lang','Text-LangConfidence']= df.Text.apply(Detector)
Run Code Online (Sandbox Code Playgroud)

以..结束

AttributeError:'float'对象没有属性'encode',并且Detector无法可靠地检测语言.

我是否正确应用检测器功能或错误地存储输出?

igr*_*nis 6

首先,如果只需要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)
Run Code Online (Sandbox Code Playgroud)

之后,您可以删除该poly_obj列。

  • 我如何处理这个错误:输入在字节 191(248 个)附近包含无效的 UTF-8。我想这是因为我有中文/日文字符?我认为 Polyglot 需要它来确定语言。 (2认同)