Поиск слов из Wordnet, отделенных фиксированным расстоянием редактирования от заданного слова

Я пишу средство проверки правописания с помощью nltk и wordnet, у меня есть несколько неправильно написанных слов, например "Belive". Что я хочу сделать, так это найти все слова из wordnet, которые отделены расстоянием редактирования leveshtein 1 или 2 от данного слова. Предоставляет ли nltk какие-либо методы для этого? Как это сделать?


Может быть, я неправильно выразился. метод edit_distance принимает 2 аргумента, например edit_distance(word1,word2) возвращает расстояние Левенштейна между словом word1 и word2. Я хочу найти расстояние редактирования между словом, которое я даю, с каждым другим словом в wordnet.


person Nihar Sarangi    schedule 20.09.2011    source источник
comment
Вы уверены, что Wordnet - это то, что вам нужно здесь? Похоже на перебор. Enchant может быть лучше: packages.python.org/pyenchant   -  person Jesse Aldridge    schedule 22.09.2011


Ответы (2)


Фактически он предоставляет edit_distance метод. См. Документы здесь

person brc    schedule 21.09.2011

Хорошо, наконец-то пришло решение:

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 
person Nihar Sarangi    schedule 21.09.2011
comment
не знаю, эффективный ли это способ сделать это. но это сработало для меня - person Nihar Sarangi; 22.09.2011