代码之家  ›  专栏  ›  技术社区  ›  mobcdi

如何将polyglot检测器功能应用于数据帧

  •  5
  • mobcdi  · 技术社区  · 6 年前

    假设我有一个专栏叫 df.Text 它包含文本(不止一个句子),我想使用polyglot 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”和检测器 无法可靠地检测语言。

    我是否应用了错误的探测器功能,或者存储输出错误,或者其他什么?

    1 回复  |  直到 6 年前
        1
  •  5
  •   igrinis    6 年前

    首先,如果你只需要 polyglot 对于语言检测,最好使用 pycld2 直接说来,这就是幕后所用的。它有 许多的 更清洁的API。

    这么说,您所陈述的错误来自 Text 列,它是实数。所以你必须把这样的值转换成字符串。

    您将遇到的下一个问题是最小文本长度。 多种语言 如果文本太短,将引发异常。你必须通过让例外保持沉默 quiet=True .

    现在,应用 Detector 将返回一个对象。因此,您必须对它进行解析以提取所需的信息。要提取语言名称,必须导入 icu 模块(它依赖于 多种语言 ,因此您已经安装了它):

    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 列。

    推荐文章