Je veux vérifier dans un programme Python si un mot est dans le dictionnaire anglais.
Je pense que l'interface nltk wordnet pourrait être la solution, mais je n'ai aucune idée de comment l'utiliser pour une tâche aussi simple.
def is_english_word(word):
pass # how to I implement is_english_word?
is_english_word(token.lower())
À l'avenir, je pourrais vouloir vérifier si la forme singulière d'un mot est dans le dictionnaire (par exemple, propriétés -> propriété -> mot anglais). Comment pourrais-je y parvenir?
/usr/share/dict/
et/var/lib/dict
peut être référencé sur les configurations * nix.Cela ne fonctionnera pas bien avec WordNet, car WordNet ne contient pas tous les mots anglais. Une autre possibilité basée sur NLTK sans enchantement est le corpus de mots de NLTK
la source
set(words.words())
Utilisation de NLTK :
Vous devriez vous référer à cet article si vous rencontrez des difficultés pour installer wordnet ou si vous souhaitez essayer d'autres approches.
la source
Utiliser un ensemble pour stocker la liste de mots car leur recherche sera plus rapide:
Pour répondre à la deuxième partie de la question, les pluriels seraient déjà dans une bonne liste de mots, mais si vous vouliez spécifiquement les exclure de la liste pour une raison quelconque, vous pourriez en effet écrire une fonction pour le gérer. Mais les règles de pluralisation en anglais sont suffisamment délicates pour que je commence par inclure les pluriels dans la liste de mots.
Quant à savoir où trouver des listes de mots anglais, j'en ai trouvé plusieurs simplement en recherchant sur Google "liste de mots anglais". En voici un: http://www.sil.org/linguistics/wordlists/english/wordlist/wordsEn.txt Vous pouvez rechercher l'anglais britannique ou américain sur Google si vous voulez spécifiquement l'un de ces dialectes.
la source
english_words
unset
au lieu d'unlist
,is_english_word
cela fonctionnera beaucoup plus vite..xreadlines()
et simplement répéterword_file
.wamerican
etwbritish
fournissent des listes de mots anglais américain et britannique sous forme de/usr/share/dict/*-english
. L'information sur le package donne wordlist.sourceforge.net comme référence.Pour une solution plus rapide basée sur NLTK, vous pouvez hacher l'ensemble de mots pour éviter une recherche linéaire.
la source
Je trouve qu'il existe 3 solutions basées sur des packages pour résoudre le problème. Ce sont pyenchant, wordnet et corpus (auto-définis ou de ntlk). Pyenchant n'a pas pu s'installer facilement dans win64 avec py3 . Wordnet ne fonctionne pas très bien car son corpus n'est pas complet. Donc pour moi, je choisis la solution répondue par @Sadik , et j'utilise 'set (words.words ())' pour accélérer.
Première:
Ensuite:
la source
Avec pyEnchant.checker SpellChecker:
la source
Pour une approche web sémantique, vous pouvez exécuter une requête sparql sur WordNet au format RDF . En gros, utilisez simplement le module urllib pour émettre une requête GET et renvoyer les résultats au format JSON, analyser à l'aide du module python 'json'. Si ce n'est pas un mot anglais, vous n'obtiendrez aucun résultat.
Comme autre idée, vous pouvez interroger l'API de Wiktionary .
la source
Pour tous les utilisateurs Linux / Unix
Si votre système d'exploitation utilise le noyau Linux, il existe un moyen simple d'obtenir tous les mots du dictionnaire anglais / américain. Dans le répertoire,
/usr/share/dict
vous avez unwords
fichier. Il y a aussi un plus spécifiqueamerican-english
etbritish-english
fichier . Ceux-ci contiennent tous les mots de cette langue spécifique. Vous pouvez y accéder dans tous les langages de programmation, c'est pourquoi j'ai pensé que vous voudriez peut-être en savoir plus.Désormais, pour les utilisateurs spécifiques à python, le code python ci-dessous doit attribuer aux mots de la liste la valeur de chaque mot:
J'espère que cela t'aides!!!
la source