web-dev-qa-db-fra.com

Python: Comment déterminer la langue?

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.

50
Rita

Avez-vous jeté un œil à langdetect ?

from langdetect import detect

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

print lang
#output: de
33
dheiberg
  1. TextBlob . Nécessite le package NLTK, utilise Google.

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

pip install textblob

  1. 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

  1. 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

  1. 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

  1. guess_language Peut détecter des échantillons très courts en utilisant this correcteur orthographique avec dictionnaires.

pip install guess_language-spirit

  1. 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

85
Rabash

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

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.

0
Kerbiter