从给定的单词中,按照固定的编辑距离从Wordnet中找出相应的单词。

5
我正在使用nltk和wordnet编写拼写检查器。 我有一些错误拼写的单词,比如“belive”。我想做的是找到所有与给定单词的leveshtein编辑距离为1或2个字的wordnet中的单词。 nltk提供了完成此操作的方法吗?如何做到这一点?
也许我表述不清楚了。edit_distance方法接受两个参数,例如edit_distance(word1, word2),返回word1和word2之间的Levenshtein距离。 我想做的是找到给定的单词与wordnet中每个其他单词之间的编辑距离。

1
你确定 Wordnet 是你想要的吗?看起来有点过头了。Enchant 可能更好:http://packages.python.org/pyenchant/ - Jesse Aldridge
2个回答

1

实际上,它提供了一个edit_distance方法。请参阅此处的文档。


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 

不知道这是否是最有效的方法,但对我来说已经完成了工作。 - Nihar Sarangi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接