我有一個在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