Je veux avoir ceci:
Input text: "ру́сский язы́к"
Output text: "Russian"
Input text: "中文"
Output text: "Chinese"
Input text: "にほんご"
Output text: "Japanese"
Input text: "العَرَبِيَّة"
Output text: "Arabic"
Comment puis-je le faire en python? Merci.
Avez-vous jeté un œil à langdetect ?
from langdetect import detect
lang = detect("Ein, zwei, drei, vier")
print lang
#output: de
TextBlob . Nécessite le package NLTK, utilise Google.
from textblob import TextBlob
b = TextBlob("bonjour")
b.detect_language()
pip install textblob
Polyglot . Nécessite numpy et des bibliothèques arcaniques, peu probable que cela fonctionne pour Windows. (Pour Windows, obtenez les versions appropriées de PyICU , Morfessor et PyCLD2 de ici , alors seulement pip install downloaded_wheel.whl
.) Capable de détecter les textes en plusieurs langues.
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
Pour installer les dépendances, lancez: Sudo apt-get install python-numpy libicu-dev
chardet a aussi pour fonction de détecter les langues s'il y a des octets de caractères dans la plage (127-255):
>>> chardet.detect("Я люблю вкусные пампушки".encode('cp1251'))
{'encoding': 'windows-1251', 'confidence': 0.9637267119204621, 'language': 'Russian'}
pip install chardet
langdetect Requiert de grandes portions de texte. Il utilise une approche non déterministe sous le capot. Cela signifie que vous obtenez des résultats différents pour le même échantillon de texte. Docs dit que vous devez utiliser le code suivant pour le déterminer:
from langdetect import detect, DetectorFactory
DetectorFactory.seed = 0
detect('今一はお前さん')
pip install langdetect
pip install guess_language-spirit
langid fournit les deux modules
import langid
langid.classify("This is a test")
# ('en', -54.41310358047485)
et un outil de ligne de commande:
$ langid < README.md
pip install langid
Il y a un problème avec langdetect
quand il est utilisé pour la parallélisation et qu'il échoue. Mais spacy_langdetect
est un wrapper pour cela et vous pouvez l'utiliser à cette fin. Vous pouvez également utiliser l'extrait suivant:
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)
Vous pouvez essayer de déterminer le groupe de caractères Unicode dans la chaîne d'entrée pour indiquer le type de langue (cyrillique pour le russe, par exemple), puis rechercher des symboles spécifiques à une langue dans le texte.