Comment détecter dans quelle langue un texte est écrit à l'aide de NLTK?
Les exemples que j'ai vus utilisent nltk.detect
, mais quand je l'ai installé sur mon mac, je ne trouve pas ce package.
Avez-vous rencontré l'extrait de code suivant?
english_vocab = set(w.lower() for w in nltk.corpus.words.words())
text_vocab = set(w.lower() for w in text if w.lower().isalpha())
unusual = text_vocab.difference(english_vocab)
de http://groups.google.com/group/nltk-users/browse_thread/thread/a5f52af2cbc4cfeb?pli=1&safe=active
Ou le fichier de démonstration suivant?
Cette bibliothèque n'est pas non plus de NLTK mais aide certainement.
$ Sudo pip install langdetect
Pris en charge Python versions 2.6, 2.7, 3.x.
>>> from langdetect import detect
>>> detect("War doesn't show who's right, just who's left.")
'en'
>>> detect("Ein, zwei, drei, vier")
'de'
https://pypi.python.org/pypi/langdetect?
P.S .: Ne vous attendez pas toujours à ce que cela fonctionne correctement:
>>> detect("today is a good day")
'so'
>>> detect("today is a good day.")
'so'
>>> detect("la vita e bella!")
'it'
>>> detect("khoobi? khoshi?")
'so'
>>> detect("wow")
'pl'
>>> detect("what a day")
'en'
>>> detect("yay!")
'so'
Bien que ce ne soit pas dans le NLTK, j'ai eu d'excellents résultats avec une autre bibliothèque basée sur Python:
https://github.com/saffsd/langid.py
C'est très simple à importer et inclut un grand nombre de langues dans son modèle.
Super tard mais, vous pouvez utiliser le classificateur textcat
dans nltk
, ici . Ce papier traite de l'algorithme.
Il renvoie un code de pays dans ISO 639-3, donc j'utiliserais pycountry
pour obtenir le nom complet.
Par exemple, chargez les bibliothèques
import nltk
import pycountry
from nltk.stem import SnowballStemmer
Voyons maintenant deux phrases et guess
leur langue:
phrase_one = "good morning"
phrase_two = "goeie more"
tc = nltk.classify.textcat.TextCat()
guess_one = tc.guess_language(phrase_one)
guess_two = tc.guess_language(phrase_two)
guess_one_name = pycountry.languages.get(alpha_3=guess_one).name
guess_two_name = pycountry.languages.get(alpha_3=guess_two).name
print(guess_one_name)
print(guess_two_name)
English
Afrikaans
Vous pouvez ensuite les passer dans d'autres fonctions nltk
, par exemple:
stemmer = SnowballStemmer(guess_one_name.lower())
s1 = "walking"
print(stemmer.stem(s1))
walk
Clause de non-responsabilité, cela ne fonctionnera pas toujours, en particulier pour les données rares
Exemple extrême
guess_example = tc.guess_language("hello")
print(pycountry.languages.get(alpha_3=guess_example).name)
Konkani (individual language)