2013-03-11 13 views

Odpowiedz

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

To daje wszystkie unikalne słowa z każdym synset że jest hyponym rzeczownika „pojazd "(Pierwszy zmysł).

+0

Ale gdy próbuję go zawęzić dalej, ja dostać ten błąd Traceback (najnowsza rozmowę ostatnia): pliku "D: ... \ test.py", wiersz 10, w razie "samochód" w słowie: TypeError: argument typu "Synset" nie jest iterable – watisit

+0

Zobacz moją zaktualizowaną odpowiedź - Myślę, że to jest to, co chcesz. – Jared

+0

@Jared, bardzo elegancka odpowiedź, ale pojawia się 'gotcha', gdy' Synset.closure (lambda: s.hyponyms() 'przechodzi do nieskończonej pętli. Spróbuj' wn.synset ('restrain.v.01'). zamknięcie (lambda: 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

To działa świetnie z NLTK 3.0.3, w przeciwieństwie do jared 'odpowiedź (TypeError:' obiekt 'metoda nie jest iterable), dziękuję! –

Powiązane problemy