web-dev-qa-db-ja.com

Python:言語を決定する方法は?

これを取得したい:

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

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

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

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

どうすればPythonでそれを行うことができますか?ありがとう。

50
Rita

langdetect を見たことがありますか?

from langdetect import detect

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

print lang
#output: de
33
dheiberg
  1. TextBlob 。 NLTKパッケージが必要、Googleを使用。

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

pip install textblob

  1. ポリグロット 。 numpyといくつかの難解なライブラリが必要です。 windowsで動作する可能性は低い。 (Windowsの場合、PyICUMorfessorおよびPyCLD2from here 、それからちょうど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

85
Rabash

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)
1
Habib Karbasian

入力文字列のUnicode文字グループを決定して言語の種類(ロシア語の場合はキリル文字など)を示し、テキスト内の言語固有の記号を検索できます。

0
Kerbiter