Python: Как определить язык?

Я хочу это сделать:

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

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

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

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

Как я могу сделать это в python? Благодарю.

Ответ 1

Вы видели langdetect?

from langdetect import detect

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

print lang
#output: de

Ответ 2

  1. TextBlob. Требуется пакет NLTK, используется Google.

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

pip install textblob

  1. Полиглот. Требуются numpy и несколько непонятных библиотек, вряд ли он заработает для Windows. (Для Windows получите подходящие версии PyICU, Morfрассеру и PyCLD2 из здесь, затем просто pip install downloaded_wheel.whl.) обнаруживать тексты на разных языках.

    from polyglot.detect import Detector
    
    mixed_text = u"""
    China (simplified Chinese: 中国; traditional Chinese: 中國),
    officially the People 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 Может обнаруживать очень короткие образцы, используя эту программу проверки орфографии со словарями.

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 языков с соответствующими моделями для классификации языков. Загрузите эту модель, затем:

    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

Ответ 3

Существует проблема с 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)

Ответ 4

Вы можете попробовать определить группу символов Unicode в строке ввода, чтобы указать тип языка (например, кириллицу для русских), а затем искать в тексте символы, специфичные для языка.