2013-03-11 5 views
7

मेरे पास वर्डनेट में सभी संज्ञाओं की एक सूची है, अब मैं केवल उन शब्दों को छोड़ना चाहता हूं जो वाहन हैं और बाकी को हटा दें। मैं यह कैसे करुं? नीचे छद्म कोड मैं बनाना चाहते है, लेकिन मैं यह कामpython nltk और wordnet में किसी शब्द/synset के सभी hyponyms कैसे प्राप्त करें?

for word in wordlist: 
    if not "vehicle" in wn.synsets(word): 
    wordlist.remove(word) 

उत्तर

9
from nltk.corpus import wordnet as wn 
vehicle = wn.synset('vehicle.n.01') 
typesOfVehicles = list(set([w for s in vehicle.closure(lambda s:s.hyponyms()) for w in s.lemma_names])) 

यह आपको हर synset कि संज्ञा का एक hyponym है से सभी अद्वितीय शब्द दे देंगे बनाने के लिए पता नहीं कैसे "वाहन "(पहली समझ)।

+0

लेकिन जब मैं इसे आगे सीमित करने का प्रयास, मैं इस त्रुटि Traceback (सबसे हाल कॉल पिछले) मिलती है: अगर में: "... \ test.py डी ', रेखा 10, फ़ाइल शब्द में "कार": टाइप एरर: प्रकार 'सिंसेट' का तर्क पुनरावृत्त नहीं है – watisit

+0

मेरा अद्यतन उत्तर देखें - मुझे लगता है कि आप यही चाहते हैं। – Jared

+0

@ जेरेड, बहुत ही सुरुचिपूर्ण उत्तर है लेकिन 'गॉचाचा' है जब 'Synset.closure (lambda s: s.hyponyms()' एक अनंत लूप पर जाता है। 'Wn.synset (' restrain.v.01 ') आज़माएं। बंद करें (लैम्ब्डा एस: s.hyponyms() ' – alvas

5
def get_hyponyms(synset): 
    hyponyms = set() 
    for hyponym in synset.hyponyms(): 
     hyponyms |= set(get_hyponyms(hyponym)) 
    return hyponyms | set(synset.hyponyms()) 
+1

यह एनएलटीके 3.0.3 के साथ बढ़िया काम करता है, जेरेड के उत्तर के विपरीत (TypeError: 'method' ऑब्जेक्ट इज़ेबल नहीं है), धन्यवाद! –

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