如何在Python NLTK中仅打印WordNet同义词集中单词本身?
在Python 2.7中,有没有办法使用NLTK
只获取单词,而不包括像"synset"
、括号和"n.01"
这些额外的格式呢?
比如说,如果我这样做:
wn.synsets('dog')
我的结果看起来是这样的:
[Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n.01'), Synset('frank.n.02'), Synset('pawl.n.01'), Synset('andiron.n.01'), Synset('chase.v.01')]
我想要的结果是这样的列表:
dog
frump
cad
frank
pawl
andiron
chase
有没有办法用NLTK
做到这一点,还是说我必须使用正则表达式
?我可以在Python脚本中使用正则表达式
吗?
5 个回答
0
这很简单,只需要创建一个列表,然后获取第一个值。
from nltk.corpus import wordnet as wn
syn=[]
for s in wn.synsets('dog'):
syn.appned(s)
return syn[0]
0
使用词元名称可能有效,但对于Synset
对象来说,有一个标准的变量可以用来表示同义词集的名称,试试这个:
>>> from nltk.corpus import wordnet as wn
>>> wn.synset('dog.n.1')
Synset('dog.n.01')
>>> wn.synset('dog.n.1').name
'dog.n.01'
>>> wn.synset('dog.n.1').name.partition('.')[0]
'dog'
>>> for ss in wn.synsets('dog'):
... print ss.name.partition('.')[0]
...
dog
frump
dog
cad
frank
pawl
andiron
chase
3
aelfric5578,你已经很接近了:属性名称是一个函数,不是字符串。
[synset.name().split('.')[0] for synset in wn.synsets('dog') ]
4
试试这个:
for synset in wn.synsets('dog'):
print synset.lemmas[0].name
你想要遍历“狗”这个词的每一个同义词集合(synset),然后打印出每个同义词集合的主词(headword)。要记住,多个词可能会和同一个同义词集合关联在一起,所以如果你想获取与“狗”相关的所有同义词集合中的所有词,你可以这样做:
for synset in wn.synsets('dog'):
for lemma in synset.lemmas:
print lemma.name
4
如果你想不使用正则表达式来完成这个,可以用列表推导式。
[synset.name.split('.')[0] for synset in wn.synsets('dog') ]
你在这里做的事情是,对于每个同义词集合,返回句号前的第一个单词。