synonyms spanish online español python nltk wordnet

python - spanish - wordnet online



¿Cómo verificar si una palabra es una palabra en inglés con Python? (7)

Con pyEnchant.checker SpellChecker:

from enchant.checker import SpellChecker def is_in_english(quote): d = SpellChecker("en_US") d.set_text(quote) errors = [err.word for err in d] return False if ((len(errors) > 4) or len(quote.split()) < 3) else True print(is_in_english(''“办理美国加州州立大学圣贝纳迪诺分校高仿成绩单Q/V2166384296加州州立大学圣贝纳迪诺分校学历学位认证'')) print(is_in_english(''“Two things are infinite: the universe and human stupidity; and I/'m not sure about the universe.”'')) > False > True

Quiero verificar en un programa de Python si una palabra está en el diccionario de inglés.

Creo que la interfaz de nltk wordnet podría ser el camino a seguir, pero no tengo ni idea de cómo usarlo 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, me gustaría 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?


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

>>> from nltk.corpus import words >>> "would" in words.words() True >>> "could" in words.words() True >>> "should" in words.words() True >>> "I" in words.words() True >>> "you" in words.words() True


Para (mucho) más poder y flexibilidad, use una biblioteca dedicada de corrección ortográfica como PyEnchant . Hay un tutorial , o simplemente puedes bucear directamente:

>>> import enchant >>> d = enchant.Dict("en_US") >>> d.check("Hello") True >>> d.check("Helo") False >>> d.suggest("Helo") [''He lo'', ''He-lo'', ''Hello'', ''Helot'', ''Help'', ''Halo'', ''Hell'', ''Held'', ''Helm'', ''Hero'', "He''ll"] >>>

PyEnchant viene con algunos diccionarios (en_GB, en_US, de_DE, fr_FR), pero puede usar cualquiera de los de OpenOffice si quiere más idiomas.

Parece que hay una biblioteca de pluralización llamada inflect , pero no tengo idea si es buena.


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, parse usando el módulo python ''json''. Si no es una palabra en inglés, no obtendrá ningún resultado.

Como otra idea, puedes consultar la API de Wiktionary .


Para una solución más rápida basada en NLTK, puede hash el conjunto de palabras para evitar una búsqueda lineal.

from nltk.corpus import words as nltk_words def is_english_word(word): # creation of this dictionary would be done outside of # the function because you only need to do it once. dictionary = dict.fromkeys(nltk_words.words(), None) try: x = dictionary[word] return True except KeyError: return False


Usar un conjunto para almacenar la lista de palabras porque buscarlas será más rápido:

with open("english_words.txt") as word_file: english_words = set(word.strip().lower() for word in word_file) def is_english_word(word): return word.lower() in english_words print is_english_word("ham") # should be true if you have a good english_words.txt

Para responder a la segunda parte de la pregunta, los plurales ya estarían en una buena lista de palabras, pero si quisieras excluirlos específicamente de la lista por alguna razón, podrías escribir una función para manejarla. Pero las reglas de pluralización en inglés son lo suficientemente complicadas como para incluir los plurales en la lista de palabras para empezar.

En cuanto a dónde encontrar las listas de palabras en inglés, encontré varias simplemente buscando en Google "lista de palabras en inglés". Aquí hay uno: http://www.sil.org/linguistics/wordlists/english/wordlist/wordsEn.txt Puede buscar inglés británico o estadounidense si quiere específicamente uno de esos dialectos.


Usando NLTK :

from nltk.corpus import wordnet if not wordnet.synsets(word_to_test): #Not an English Word else: #English Word

Debe consultar este artículo si tiene problemas para instalar WordNet o quiere probar otros enfoques.