2011-09-20 14 views
5

Estoy escribiendo un corrector ortográfico usando nltk y wordnet, tengo algunas palabras mal escritas que dicen "creer". Lo que quiero hacer es encontrar todas las palabras de wordnet que están separadas por una distancia de edición de leveshtein de 1 o 2 de esta palabra dada. ¿Nltk proporciona algún método para lograr esto? ¿Como hacer esto?Encontrar palabras de Wordnet separadas por una distancia de edición fija de una palabra dada


Puede ser, lo puse mal. el método edit_distance toma 2 argumentos como edit_distance(word1,word2) devuelve la distancia de levenshtein entre word1 y word2. Lo que quiero es encontrar la distancia de edición entre la palabra que doy con cada otra palabra en wordnet.

+1

¿Seguro Wordnet es lo que quieres aquí? Parece un exceso. Enchant puede ser mejor: http://packages.python.org/pyenchant/ –

Respuesta

1

De hecho, proporciona un método edit_distance. Consulte la documentación here

0

bien, finalmente, se le ocurrió una solución:

from nltk.corpus import wordnet 
f=open("wordnet_wordlist.txt","w") 
for syn in list(wordnet.all_synsets()): 
    f.write(syn.name[:-5]) 
    f.write("\n") 

f.close() 

f = open("wordnet_wordlist.txt") 
f2 = open("wordnet_wordlist_final.txt", "w") 
uniquelines = set(f.read().split("\n")) 
f2.write("".join([line + "\n" for line in uniquelines])) 
f2.close() 

Ahora la lectura del archivo wordlist_final final y utilizando nltk.edit_distance la lista se puede encontrar

wordnetobj=open("wordnet_wordlist_final.txt","r") 
wordnet=wordnetobj.readlines() 
def edit(word,distance): 
    validlist=[] 
    for valid in wordnet: 
     valids=valid[:-1] 
     if(abs(len(valids)-len(word))<=2): 
      if(nltk.edit_distance(word,valids)==distance): 
       validlist.append(valids) 

    return validlist 
+0

no sé si es la forma más eficiente de hacerlo. pero hizo el trabajo por mí –

Cuestiones relacionadas