2011-09-20 24 views
5

से एक निश्चित संपादन दूरी से अलग वर्डनेट से शब्दों को ढूंढना मैं nltk और wordnet का उपयोग करके एक वर्तनी परीक्षक लिख रहा हूं, मेरे पास कुछ गलत वर्तनी वाले शब्द "बेलीव" कहते हैं। मैं जो करना चाहता हूं वह शब्दनेट से सभी शब्द ढूंढता है जो इस दिए गए शब्द से 1 या 2 की लेवेशेटिन की संपादन दूरी से अलग होते हैं। क्या nltk इसे पूरा करने के लिए कोई तरीका प्रदान करता है? यह कैसे करना है?किसी दिए गए शब्द


हो सकता है, मैंने इसे गलत तरीके से रखा है। edit_distance विधि 2 तर्क लेता है जैसे edit_distance(word1,word2) शब्द 1 और शब्द 2 के बीच लेवेनशेटिन की दूरी देता है। मैं जो चाहता हूं वह शब्द शब्द के बीच संपादित दूरी को खोजने के लिए है जो शब्दनेट में हर दूसरे शब्द के साथ देता है।

+1

क्या आपको यकीन है का उपयोग करते हुए वर्डनेट वह है जो आप यहां चाहते हैं? ओवरकिल की तरह लगता है। जादूगर बेहतर हो सकता है: 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

यह नहीं पता कि यह करने का यह प्रभावी तरीका है या नहीं। लेकिन यह मेरे लिए काम किया –

संबंधित मुद्दे