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

时间:2018-07-24 16:08:19

标签: python pandas polyglot

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

confidence

返回

  

名称:英文代码:en可信度:94.0读取字节:1920

但是

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

结尾
  

AttributeError:“ float”对象没有属性“ encode”和检测器   无法可靠地检测语言。

我是否错误地应用了Detector函数或存储了错误的输出结果?

2 个答案:

答案 0 :(得分:5)

首先,如果仅需要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列。

答案 1 :(得分:0)

您可以尝试以下方法:

testEng ="This is English"
lang = Detector(testEng)
df['Text-Lang']=lang.language.code
df['Text-LangConfidence']=leng.language.confidence