2010-12-21 19 views
10

Estoy buscando una manera fácil de verificar si una determinada cadena es una palabra en inglés correctamente deletreada. Por ejemplo, 'miró' devolvería True mientras 'hurrr' devolvería False. No necesito sugerencias de ortografía ni ninguna función de corrección ortográfica. Solo una función simple que toma una cadena y devuelve un valor booleano.Python: verifique si una palabra se deletrea correctamente

Respuesta

24

dos maneras posibles de hacerlo:

  1. tener su propio archivo, que tiene todas las palabras válidas. Cargar el archivo en un conjunto y comparar cada palabra para ver si existe en él (palabra en conjunto)
  2. (La mejor manera) Utilice PyEnchant, una biblioteca de corrección ortográfica para Python
+0

Gracias, esto es exactamente lo que hice mientras esperaba una respuesta;) – Nikolai

+2

Use un conjunto en lugar de una lista, y pregunte 'if word in my_set' para un mejor rendimiento. –

+0

@Karl: un punto muy válido, de hecho, los conjuntos son significativamente más rápidos que las listas cuando se trata de determinar si un objeto está presente en el conjunto o no. Actualizado. – user225312

0

Yahoo proporciona hechizo comprobando API a través de YQL.

Es bastante simples y se obtiene 5.000 consultas/dirección IP/día para uso no comercial (gratis)

1

que estaba buscando la misma funcionalidad y costó encontrar una biblioteca existente que funciona en Windows, 64 bits . PyEnchant, aunque es una gran biblioteca, no está actualmente activo y no funciona en 64 bits. Otras bibliotecas que encontré no funcionaban en Windows.

Finalmente encontré una solución que espero que otros encuentren valiosa.

La solución ...

  • Uso NLTK
  • Extracto de la lista de palabras de nltk.corpus.brown
  • convierten la lista de palabras para un conjunto (para una búsqueda eficiente)
  • uso del in palabra clave para determinar si la cadena está en el conjunto

from nltk.corpus import brown 
word_list = brown.words() 
word_set = set(word_list) 

# Check if word is in set 
"looked" in word_set # Returns True 
"hurrr" in word_set # Returns False 

Utilice un control de temporizador y verá que esto no demora prácticamente ningún tiempo en buscar el conjunto. Una prueba en 1,000 palabras tomó 0.004 segundos.

0

que yo personalmente utilizado: http://textblob.readthedocs.io/en/dev/ Es un proyecto activo y de acuerdo con el sitio web:

corrección de ortografía se basa en Peter Norvig de “Cómo escribir un corrector de ortografía” [1] tal como se aplica en la biblioteca de patrones. Es aproximadamente 70% preciso

Cuestiones relacionadas