如何将 Polyglot Detector 功能应用于数据框
How to apply Polyglot Detector function to dataframe
假设我有一个名为 df.Text
的列,其中包含文本(超过 1 个句子)并且我想使用多语言 Detector
来检测语言并将值存储在新列中 df['Text-Lang']
如何确保我还捕获了其他详细信息,例如 code
和 confidence
testEng ="This is English"
lang = Detector(testEng)
print(lang.language)
returns
name: English code: en confidence: 94.0 read bytes: 1920
但是
df['Text-Lang','Text-LangConfidence']= df.Text.apply(Detector)
以
结尾
AttributeError: 'float' object has no attribute 'encode' and Detector
is not able to detect the language reliably.
我是否错误地应用了 Detector 函数或错误地存储了输出或其他原因?
首先,如果你只需要polyglot
来进行语言检测,你最好直接使用pycld2
,那是在后台使用的。它多更清洁API。
也就是说,您陈述的错误来自 Text
列中的一个值,它是一个实数。所以你必须将这样的值转换成字符串。
您会遇到的下一个问题是最小文本长度。 polyglot
如果文本太短会抛出异常。您必须通过传递 quiet=True
来使异常静音。
现在,应用 Detector
将 return 一个对象。所以你必须解析它来提取你想要的信息。要提取语言名称,您必须导入 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
假设我有一个名为 df.Text
的列,其中包含文本(超过 1 个句子)并且我想使用多语言 Detector
来检测语言并将值存储在新列中 df['Text-Lang']
如何确保我还捕获了其他详细信息,例如 code
和 confidence
testEng ="This is English"
lang = Detector(testEng)
print(lang.language)
returns
name: English code: en confidence: 94.0 read bytes: 1920
但是
df['Text-Lang','Text-LangConfidence']= df.Text.apply(Detector)
以
结尾AttributeError: 'float' object has no attribute 'encode' and Detector is not able to detect the language reliably.
我是否错误地应用了 Detector 函数或错误地存储了输出或其他原因?
首先,如果你只需要polyglot
来进行语言检测,你最好直接使用pycld2
,那是在后台使用的。它多更清洁API。
也就是说,您陈述的错误来自 Text
列中的一个值,它是一个实数。所以你必须将这样的值转换成字符串。
您会遇到的下一个问题是最小文本长度。 polyglot
如果文本太短会抛出异常。您必须通过传递 quiet=True
来使异常静音。
现在,应用 Detector
将 return 一个对象。所以你必须解析它来提取你想要的信息。要提取语言名称,您必须导入 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