从NLTK for Python中的同义词列表中提取单词

fac*_*off 4 python nlp list-comprehension nltk wordnet

使用此功能,[x for x in wn.all_synsets('n')]我可以在allnounsNLTK的帮助下获取Wordnet中所有名词的列表.

列表allnouns看起来像这样Synset('pile.n.01'), Synset('compost_heap.n.01'), Synset('mass.n.03'),等等.现在我可以通过使用得到任何元素allnouns[2],这应该是Synset('mass.n.03').

我想只提取单词质量,但由于某种原因我不能把它当作一个字符串,我尝试的所有东西都显示AttributeError: 'Synset' object has no attributeTypeError: 'Synset' object is not subscriptable或者<bound method Synset.name of Synset('mass.n.03')>如果我尝试使用.name或.pos

kma*_*o23 5

尝试这个解决方案怎么样:

>>>> from nltk.corpus import wordnet as wn
>>>> wn.synset('mass.n.03').name().split(".")[0]
'mass'
Run Code Online (Sandbox Code Playgroud)

对于你的情况:

>>>> allnouns = [x for x in wn.all_synsets('n')]  
Run Code Online (Sandbox Code Playgroud)

第23个索引的项目是"Synset('substance.n.07')".现在,您可以提取其名称字段

>>>> allnouns[23].name().split(".")[0]
'substance'   #output
Run Code Online (Sandbox Code Playgroud)

如果您只想要列表中"名词"类别的同义词的"名称"字段,请使用:

>>>> [x.name().split(".")[0] for x in wn.all_synsets('n')]
Run Code Online (Sandbox Code Playgroud)

应该准确地给出你需要的结果.

注意:在wordnet中,name不是属性,而是一个函数!