我有一个在wordnet中所有名词的列表,现在我只想留下那些是车辆的单词,并删除其余的单词。我该怎么做?下面是伪代码,我想打,但我不知道如何使它工作如何获取python nltk和wordnet中的单词/ synset的所有下位词?
for word in wordlist:
if not "vehicle" in wn.synsets(word):
wordlist.remove(word)
我有一个在wordnet中所有名词的列表,现在我只想留下那些是车辆的单词,并删除其余的单词。我该怎么做?下面是伪代码,我想打,但我不知道如何使它工作如何获取python nltk和wordnet中的单词/ synset的所有下位词?
for word in wordlist:
if not "vehicle" in wn.synsets(word):
wordlist.remove(word)
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]))
这会给你从每一个同义词集是名词的hyponym所有独特的词“车辆“(第一感)。
def get_hyponyms(synset):
hyponyms = set()
for hyponym in synset.hyponyms():
hyponyms |= set(get_hyponyms(hyponym))
return hyponyms | set(synset.hyponyms())
这与NLTK 3.0.3非常相称,不像jared的答案(TypeError:'method'object is not iterable),谢谢! – 2015-12-02 05:03:05
但是,当我试图进一步缩小它,我得到这个错误 回溯(最近通话最后一个): 文件“d:\ test.py”,10号线,在 如果“汽车”中的字: TypeError:类型'Synset'的参数不可迭代 –
watisit
2013-03-11 05:46:18
查看我更新的答案 - 我认为这就是你想要的。 – Jared 2013-03-11 07:17:19
@Jared,非常优雅的回答,但是当'Synset.closure(lambda:s.hyponyms()')进入无限循环时会出现'gotcha',请尝试'wn.synset('restrain.v.01')。 ()lambda s:s.hyponyms()' – alvas 2013-04-07 22:00:12