2011-09-20 77 views
5

我正在使用nltk和wordnet编写拼写检查程序,我有一些拼写错误的单词说“相信”。我想要做的是找到来自wordnet的所有单词,这些单词之间由1或2的编辑距离分隔。 nltk是否提供了任何方法来完成此任务?这个怎么做?查找Wordnet中由固定编辑隔开的单词编辑与给定单词的距离


可能是,我说错了。 edit_distance方法需要2个参数,如edit_distance(word1,word2)返回word1和word2之间的levenshtein距离。 我想要的是找到与wordnet中所有其他单词相关的单词之间的编辑距离。

+1

确定Wordnet是你想要的吗?似乎过度杀伤。附魔可能会更好:http://packages.python.org/pyenchant/ –

回答

1

它确实提供了一个edit_distance方法。请参阅该文档here

0

好了,终于想出了一个解决方案:

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() 

现在从最终wordlist_final文件读取和使用nltk.edit_distance名单可以发现

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

不知道这是否是有效的方式。但它为我做了这份工作 –