如何使用Python NLTK在WordNet语法集中打印单词本身?
在Python2.7中,是否有一种方法使用如何使用Python NLTK在WordNet语法集中打印单词本身?,python,regex,nltk,wordnet,Python,Regex,Nltk,Wordnet,在Python2.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
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脚本中使用正则表达式吗 如果希望在没有正则表达式的情况下执行此操作,可以使用列表理解
[synset.name.split('.')[0] for synset in wn.synsets('dog') ]
这里要做的是,对于每个语法集,返回句点前的第一个单词。尝试以下操作:
for synset in wn.synsets('dog'):
print synset.lemmas[0].name
您希望迭代dog的每个语法集,然后打印出该语法集的首字。请记住,多个单词可能会附加到同一个语法集,因此,如果要获取与dog的所有语法集关联的所有单词,可以执行以下操作:
for synset in wn.synsets('dog'):
for lemma in synset.lemmas:
print lemma.name
使用引理名称可能有效,但是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
非常简单,只需创建一个列表,然后获取第一个值
from nltk.corpus import wordnet as wn
syn=[]
for s in wn.synsets('dog'):
syn.appned(s)
return syn[0]
根据规则,包括“synset”和括号以及“n.01”
frank
和chase
不应成为所需输出的一部分?与问题无关,但frank
是法兰克福
的同义词/速记,它是热狗
或热狗
的同义词。类似地,dog
作为动词的意思是chase
。我看到了一个轻微的反讽失败,没有遇到微妙的反讽色彩……你知道NLTK 3.0中是否有类似的方法可用吗?运行分区行'function'对象没有属性'partition'
@duhaime时出错,请使用wn.synset('dog.n.1').name()
,因为NLTK更改了synset属性以获取函数。很遗憾,第一个被剪断的throws'instancemethod'对象不可下标
,第二个片段throwsTypeError:'instancemethod'对象不可与NLTK 3兼容
。0@duhaime以前的属性现在变成了方法。您需要执行synset.lemmas()[0].name()
确保使用name()而不是name,NLTK稍微更改了此函数。