如何在Python NLTK中仅打印WordNet同义词集中单词本身?

7 投票
5 回答
6674 浏览
提问于 2025-04-18 12:42

在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') ]

你在这里做的事情是,对于每个同义词集合,返回句号前的第一个单词。

撰写回答