Ответ 1
from langdetect import detect
lang = detect("Ein, zwei, drei, vier")
print lang
#output: de
Я хочу это сделать:
Input text: "ру́сский язы́к"
Output text: "Russian"
Input text: "中文"
Output text: "Chinese"
Input text: "にほんご"
Output text: "Japanese"
Input text: "العَرَبِيَّة"
Output text: "Arabic"
Как я могу сделать это в python? Благодарю.
from langdetect import detect
lang = detect("Ein, zwei, drei, vier")
print lang
#output: de
TextBlob. Требуется пакет NLTK, используется Google.
from textblob import TextBlob
b = TextBlob("bonjour")
b.detect_language()
pip install textblob
Полиглот. Требуются 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
В chardet также есть функция обнаружения языков, если в диапазоне есть символьные байты (127-255]:
>>> chardet.detect("Я люблю вкусные пампушки".encode('cp1251'))
{'encoding': 'windows-1251', 'confidence': 0.9637267119204621, 'language': 'Russian'}
pip install chardet
langdetect Требуется большая часть текста. Он использует недетерминированный подход под капотом. Это означает, что вы получите разные результаты для одного и того же образца текста. Документы говорят, что вы должны использовать следующий код, чтобы определить его:
from langdetect import detect, DetectorFactory
DetectorFactory.seed = 0
detect('今一はお前さん')
pip install langdetect
pip install guess_language-spirit
langid предоставляет оба модуля
import langid
langid.classify("This is a test")
# ('en', -54.41310358047485)
и инструмент командной строки:
$ langid < README.md
pip install langid
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
Существует проблема с 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)
Вы можете попробовать определить группу символов Unicode в строке ввода, чтобы указать тип языка (например, кириллицу для русских), а затем искать в тексте символы, специфичные для языка.