2011-09-20 22 views
5

Tôi đang viết trình kiểm tra chính tả bằng cách sử dụng nltk và wordnet, tôi có một vài từ được đánh vần sai nói "belive". Những gì tôi muốn làm là tìm tất cả các từ trong wordnet được phân tách bởi khoảng cách chỉnh sửa của leveshtein là 1 hoặc 2 từ từ đã cho. Nltk có cung cấp bất kỳ phương pháp nào để thực hiện việc này không? làm như thế nào?Tìm các từ trong Wordnet cách nhau bằng Khoảng cách Chỉnh sửa cố định từ một từ đã cho


Có thể, tôi đặt sai. phương thức edit_distance lấy 2 đối số như edit_distance(word1,word2) trả về khoảng cách của levenshtein giữa word1 và word2. Điều tôi muốn là tìm khoảng cách chỉnh sửa giữa từ mà tôi đưa ra với mọi từ khác trong wordnet.

+1

Bạn có chắc chắn Wordnet là những gì bạn muốn ở đây? Có vẻ như quá mức cần thiết. Enchant có thể tốt hơn: http://packages.python.org/pyenchant/ –

Trả lời

1

Thực tế nó cung cấp phương thức edit_distance. Xem các tài liệu here

0

Được rồi, cuối cùng đã đưa ra một giải pháp:

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

Bây giờ đọc từ tập tin wordlist_final thức và sử dụng nltk.edit_distance danh sách này có thể được tìm thấy

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

không biết đó có phải là cách hiệu quả để làm điều đó hay không. nhưng nó đã làm công việc cho tôi –

Các vấn đề liên quan