如何确定语言?

2024-04-18 12:28:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我想得到这个:

Input text: "ру́сский язы́к"
Output text: "Russian" 

Input text: "中文"
Output text: "Chinese" 

Input text: "にほんご"
Output text: "Japanese" 

Input text: "العَرَبِيَّة"
Output text: "Arabic" 

我怎么用python呢?谢谢。


Tags: textinputoutputchinesejapaneserussianarabic
3条回答
  1. TextBlob。需要NLTK包,使用Google。

    from textblob import TextBlob
    b = TextBlob("bonjour")
    b.detect_language()
    

pip install textblob

  1. Polyglot。需要numpy和一些神秘的库,不太可能在Windows下工作。(对于Windows,从here获取适当版本的PyICUMorfessorPyCLD2,然后只需pip install downloaded_wheel.whl)即可检测混合语言文本。

    from polyglot.detect import Detector
    
    mixed_text = u"""
    China (simplified Chinese: 中国; traditional Chinese: 中國),
    officially the People's Republic of China (PRC), is a sovereign state
    located in East Asia.
    """
    for language in Detector(mixed_text).languages:
            print(language)
    
    # name: English     code: en       confidence:  87.0 read bytes:  1154
    # name: Chinese     code: zh_Hant  confidence:   5.0 read bytes:  1755
    # name: un          code: un       confidence:   0.0 read bytes:     0
    

pip install polyglot

要安装依赖项,请运行: sudo apt-get install python-numpy libicu-dev

  1. chardet还有一个特性,即如果在范围(127-255)内有字符字节,则可以检测语言:

    >>> chardet.detect("Я люблю вкусные пампушки".encode('cp1251'))
    {'encoding': 'windows-1251', 'confidence': 0.9637267119204621, 'language': 'Russian'}
    

pip install chardet

  1. langdetect需要大量文本。它在幕后使用了非确定性的方法。这意味着对于同一个文本样本可以得到不同的结果。文档中说,必须使用以下代码来确定:

    from langdetect import detect, DetectorFactory
    DetectorFactory.seed = 0
    detect('今一はお前さん')
    

pip install langdetect

  1. guess_language可以使用带词典的this拼写检查器检测非常短的样本。

pip install guess_language-spirit

  1. langid同时提供两个模块

    import langid
    langid.classify("This is a test")
    # ('en', -54.41310358047485)
    

以及一个命令行工具:

    $ langid < README.md

pip install langid

  1. FastText是一个文本分类器,可以用来识别176种具有适当models for language classification的语言。下载this model,然后:

    import fasttext
    model = fasttext.load_model('lid.176.ftz')
    print(model.predict('الشمس تشرق', k=2))  # top 2 matching languages
    
    (('__label__ar', '__label__fa'), array([0.98124713, 0.01265871]))
    

pip install fasttext

当用于并行化时,langdetect出现问题,并且失败。但是spacy_langdetect是一个包装器,您可以使用它来实现这个目的。您还可以使用以下代码段:

import spacy
from spacy_langdetect import LanguageDetector

nlp = spacy.load("en")
nlp.add_pipe(LanguageDetector(), name="language_detector", last=True)
text = "This is English text Er lebt mit seinen Eltern und seiner Schwester in Berlin. Yo me divierto todos los días en el parque. Je m'appelle Angélica Summer, j'ai 12 ans et je suis canadienne."
doc = nlp(text)
# document level language detection. Think of it like average language of document!
print(doc._.language['language'])
# sentence level language detection
for i, sent in enumerate(doc.sents):
    print(sent, sent._.language)

你看过langdetect吗?

from langdetect import detect

lang = detect("Ein, zwei, drei, vier")

print lang
#output: de

相关问题 更多 >