J'utilise à la fois Nltk et Scikit Learn pour effectuer du traitement de texte. Cependant, ma liste de documents contient des documents qui ne sont pas en anglais. Par exemple, ceci pourrait être vrai:
[ "this is some text written in English",
"this is some more text written in English",
"Ce n'est pas en anglais" ]
Pour les besoins de mon analyse, je souhaite que toutes les phrases qui ne sont pas en anglais soient supprimées dans le cadre du prétraitement. Cependant, y a-t-il un bon moyen de le faire? Je suis allé sur Google, mais je ne trouve rien de précis qui me permette de savoir si les chaînes sont en anglais ou non. Est-ce quelque chose qui n'est pas offert comme fonctionnalité dans Nltk
ou Scikit learn
? MODIFIER J'ai vu des questions à la fois comme ceci et ceci mais les deux sont pour des mots individuels ... Pas un "document". Devrais-je parcourir chaque mot d'une phrase pour vérifier si toute la phrase est en anglais?
J'utilise Python, donc les bibliothèques qui sont en Python seraient préférables, mais je peux changer de langue si nécessaire, pensant juste que Python serait le meilleur pour cela.
Il existe une bibliothèque appelée langdetect. Il est porté à partir de la détection de langue de Google disponible ici:
https://pypi.python.org/pypi/langdetect
Il prend en charge 55 langues par défaut.
Vous pourriez être intéressé par mon article Le jeu de données de référence WiLI pour l’identification écrite Language. . J'ai également comparé quelques outils.
TL; DR:
Vous pouvez installer lidtk
et classer les langues:
$ lidtk cld2 predict --text "this is some text written in English"
eng
$ lidtk cld2 predict --text "this is some more text written in English"
eng
$ lidtk cld2 predict --text "Ce n'est pas en anglais"
fra
Utilisez la bibliothèque enchant
import enchant
dictionary = enchant.Dict("en_US") #also available are en_GB, fr_FR, etc
dictionary.check("Hello") # prints True
dictionary.check("Helo") #prints False
Cet exemple est tiré directement de leur website
Si vous voulez quelque chose de léger, les trigrammes de lettre sont une approche populaire. Chaque langue a un "profil" différent de trigrammes communs et peu communs. Vous pouvez faire une recherche sur Google ou coder le vôtre. Voici un exemple de mise en œuvre que j'ai rencontré et qui utilise la "similarité en cosinus" comme mesure de la distance entre le texte de l'échantillon et les données de référence:
http://code.activestate.com/recipes/326576-language-detection-using-character-trigrams/
Si vous connaissez les langues courantes non anglaises de votre corpus, il est assez facile de transformer cela en un test oui/non. Sinon, vous devez anticiper les phrases de langues pour lesquelles vous ne disposez pas de statistiques de trigrammes. Je voudrais faire quelques tests pour voir la plage normale de scores de similarité pour les textes à phrase unique dans vos documents, et choisir un seuil approprié pour le score en cosinus anglais.