Quiero comprobar en un programa de Python si una palabra está en el diccionario de inglés.
Creo que la interfaz nltk wordnet podría ser el camino a seguir, pero no tengo idea de cómo usarla para una tarea tan simple.
def is_english_word(word):
pass # how to I implement is_english_word?
is_english_word(token.lower())
En el futuro, es posible que desee comprobar si la forma singular de una palabra está en el diccionario (por ejemplo, propiedades -> propiedad -> palabra en inglés). ¿Cómo lo lograría?
/usr/share/dict/
y/var/lib/dict
puede ser referenciado en configuraciones * nix.No funcionará bien con WordNet, porque WordNet no contiene todas las palabras en inglés. Otra posibilidad basada en NLTK sin encantar es el corpus de palabras de NLTK
fuente
set(words.words())
Usando NLTK :
Debe consultar este artículo si tiene problemas para instalar Wordnet o si desea probar otros enfoques.
fuente
Usar un conjunto para almacenar la lista de palabras porque buscarlas será más rápido:
Para responder a la segunda parte de la pregunta, los plurales ya estarían en una buena lista de palabras, pero si quisiera excluirlos específicamente de la lista por alguna razón, podría escribir una función para manejarla. Pero las reglas de pluralización en inglés son lo suficientemente complicadas como para incluir solo los plurales en la lista de palabras.
En cuanto a dónde encontrar listas de palabras en inglés, encontré varias buscando en Google "Lista de palabras en inglés". Aquí hay uno: http://www.sil.org/linguistics/wordlists/english/wordlist/wordsEn.txt Puede buscar en Google inglés británico o americano si desea específicamente uno de esos dialectos.
fuente
english_words
un enset
lugar de unlist
, entoncesis_english_word
correrá mucho más rápido..xreadlines()
y simplemente iterarword_file
.wamerican
ywbritish
proporcionan listas de palabras en inglés americano y británico como/usr/share/dict/*-english
. La información del paquete proporciona wordlist.sourceforge.net como referencia.Para una solución más rápida basada en NLTK, puede hacer un hash del conjunto de palabras para evitar una búsqueda lineal.
fuente
Encuentro que hay 3 soluciones basadas en paquetes para resolver el problema. Son pyenchant, wordnet y corpus (autodefinidos o de ntlk). Pyenchant no se pudo instalar fácilmente en win64 con py3 . Wordnet no funciona muy bien porque su corpus no está completo. Entonces, para mí, elijo la solución respondida por @Sadik , y uso 'set (words.words ())' para acelerar.
Primero:
Luego:
fuente
Con pyEnchant.checker SpellChecker:
fuente
Para un enfoque web semántico, puede ejecutar una consulta sparql contra WordNet en formato RDF . Básicamente, solo use el módulo urllib para emitir la solicitud GET y devolver los resultados en formato JSON, analizar usando el módulo 'json' de python. Si no es una palabra en inglés, no obtendrá resultados.
Como otra idea, puede consultar la API de Wiktionary .
fuente
Para todos los usuarios de Linux / Unix
Si su sistema operativo utiliza el kernel de Linux, hay una manera simple de obtener todas las palabras del diccionario inglés / americano. En el directorio
/usr/share/dict
tienes unwords
archivo. También hay un más específicoamerican-english
ybritish-english
archivos. Contienen todas las palabras en ese idioma específico. Puedes acceder a esto en todos los lenguajes de programación, por eso pensé que querrías saber sobre esto.Ahora, para usuarios específicos de Python, el siguiente código de Python debe asignar las palabras de la lista para que tengan el valor de cada palabra:
¡¡¡Espero que esto ayude!!!
fuente