如何使用Python NLTK在WordNet同步集中打印出单词本身?

时间:2014-07-09 21:41:40

标签: python regex 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执行此操作,还是必须使用regular expressions?我可以在python脚本中使用regular expressions吗?

4 个答案:

答案 0 :(得分:3)

如果你想在没有正则表达式的情况下这样做,你可以使用列表推导。

[synset.name.split('.')[0] for synset in wn.synsets('dog') ]

你在这里做的是说,对于每个synset,在句点之前返回第一个单词。

答案 1 :(得分:3)

试试这个:

for synset in wn.synsets('dog'):
    print synset.lemmas[0].name

您希望迭代狗的每个synset,然后打印出synset的标题。请记住,多个单词可以附加到同一个synset,因此如果您想获得与狗的所有同义词相关联的所有单词,您可以这样做:

for synset in wn.synsets('dog'):
    for lemma in synset.lemmas:
        print lemma.name

答案 2 :(得分:1)

这很简单,只需创建一个列表,然后获取第一个值

from nltk.corpus import wordnet as wn
syn=[]
for s in wn.synsets('dog'):
   syn.appned(s)
return syn[0]

答案 3 :(得分:0)

使用引理名称可能有效,但Synset对象的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