Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python NLTK在WordNet语法集中打印单词本身?_Python_Regex_Nltk_Wordnet - Fatal编程技术网

如何使用Python NLTK在WordNet语法集中打印单词本身?

如何使用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

在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.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'对象不可下标
,第二个片段throws
TypeError:'instancemethod'对象不可与NLTK 3兼容
。0@duhaime以前的属性现在变成了方法。您需要执行
synset.lemmas()[0].name()
确保使用name()而不是name,NLTK稍微更改了此函数。