Python langdetect:只选择一种语言或另一种语言

van*_*ath 7 python nlp language-detection

langdetect用来确定一组字符串的语言,我知道这些字符串是英语或法语.

有时,langdetect告诉我语言是罗马尼亚语,因为我知道这是一个法语字符串.

我怎样才能langdetect选择英语或法语,而不是所有其他语言?

谢谢!

Aar*_*sen 5

我执行此操作的方法是使用detect_langs,它返回具有概率的对象列表,然后迭代此列表,如果选项之一是英语或法语,或者情况并非如此,则Language返回语言。None此函数非常适合此目的:

from langdetect import detect_langs

def englishOrFrench(string):
    res = detect_langs(string)
    for item in res:
        if item.lang == "fr" or item.lang == "en":
            return item.lang
    return None

print(englishOrFrench("Bonjour"))              # fr
print(englishOrFrench("The quick brown fox"))  # en
print(englishOrFrench("Hallo, mein Freund"))   # None
Run Code Online (Sandbox Code Playgroud)

  • lang 检测有点..糟糕。"38 HewcnonHe,!Me PlrIM HellaA.ne*aulee kicnon}le,wle npeAy(MOTpeHHbIX AorOBOpOM" 被检测为 en (2认同)
  • @thang 你期望完美工具的输出是什么?langDetect 尝试将每个字符串适合某种语言,因此如果您使用它来检测无意义的字符串,它当然会中断。 (2认同)

Phi*_*röm 5

选项1

一种选择是使用软件包langid。然后,您可以使用方法调用简单地限制语言:

import langid
langid.set_languages(['fr', 'en'])  # ISO 639-1 codes
lang, score = langid.classify('This is a french or english text')
print(lang) # en
Run Code Online (Sandbox Code Playgroud)

选项2

如果您确实要使用该langdetect软件包,则可以复制该软件包文件夹(如果不确定该文件夹在哪里,请使用python -m site --user-site)并从该文件夹中删除不需要的配置文件langdetect\profiles

但是,这不是一个非常动态的解决方案。