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
吗?
答案 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