我一直在学习基本的python,但我是NLTK的新手。我想使用nltk为给定的单词列表提取下位词。当我手动输入每个术语时它工作正常,但是当我尝试迭代列表中的项目时它似乎不起作用。
这有效:
from nltk.corpus import wordnet as wn
syn_sets = wn.synsets("car")
for syn_set in syn_sets:
print(syn_set, syn_set.lemma_names())
print(syn_set.hyponyms())
但是如何让Wordnet方法处理像
这样的项目列表token = ["cat", "dog", "car"]
syn_sets = wn.synsets((*get each item from the list*))
在循环中?
谢谢!
答案 0 :(得分:6)
列出对救援的理解!
完全可能,甚至使用与之前相同的语法。 Python有一个名为[list comprehension][1]
的结构,专为此应用程序而制作。基本上,它是内联循环的函数式语法,但往往是更清晰,更强大的实现,开销略低。
示例:
tokens = ["cat", "dog", "car"]
syn_sets = [wn.synsets(token) for token in tokens]
这甚至可以很容易地扩展到稍微复杂的数据结构,例如:
split_syn_sets = [(syn_set.lemma_names(), syn_set.hyponyms()) for syn_set in syn_sets]
不确定这是否正是您正在寻找的内容,但它应该推广到您想要做的与此类似的内容。
如果它有用,我前一段时间问了一个关于抓取所有相关同义词here的问题。
答案 1 :(得分:1)
我相信你别无选择,只能循环说出你的话。我修改了你的代码以获得一个外部循环,它似乎工作:
from nltk.corpus import wordnet as wn
tokens = ["cat", "dog", "car"]
for token in tokens:
syn_sets = wn.synsets(token)
for syn_set in syn_sets:
print(syn_set, syn_set.lemma_names())
print(syn_set.hyponyms())
这是输出:
(Synset('cat.n.01'), [u'cat', u'true_cat'])
[Synset('domestic_cat.n.01'), Synset('wildcat.n.03')]
(Synset('guy.n.01'), [u'guy', u'cat', u'hombre', u'bozo'])
[Synset('sod.n.04')]
...
(Synset('cable_car.n.01'), [u'cable_car', u'car'])
[]