Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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
从NLTK for Python中的语法集列表中提取单词_Python_Nlp_Nltk_List Comprehension_Wordnet - Fatal编程技术网

从NLTK for Python中的语法集列表中提取单词

从NLTK for Python中的语法集列表中提取单词,python,nlp,nltk,list-comprehension,wordnet,Python,Nlp,Nltk,List Comprehension,Wordnet,使用这个[x代表wn.all_synset('n')]在NLTK的帮助下,我能够从Wordnet获得一个包含所有名词的列表 列表allnomes看起来像这样Synset('pile.n.01')、Synset('compost\u heap.n.01')、Synset('mass.n.03')等等。现在我可以使用allnomes[2]获得任何元素,这应该是Synset('mass.n.03') 我只想提取单词mass,但由于某些原因,我无法将其视为字符串,我尝试的所有操作都显示一个属性错误:“S

使用这个
[x代表wn.all_synset('n')]
在NLTK的帮助下,我能够从Wordnet获得一个包含所有名词的列表

列表
allnomes
看起来像这样
Synset('pile.n.01')、Synset('compost\u heap.n.01')、Synset('mass.n.03')
等等。现在我可以使用
allnomes[2]
获得任何元素,这应该是
Synset('mass.n.03')


我只想提取单词mass,但由于某些原因,我无法将其视为字符串,我尝试的所有操作都显示一个
属性错误:“Synset”对象没有属性
TypeError:“Synset”对象不可下标
,如果我尝试使用.name或.pos

如何尝试此解决方案:

>>>> from nltk.corpus import wordnet as wn
>>>> wn.synset('mass.n.03').name().split(".")[0]
'mass'
对于您的情况:

>>>> allnouns = [x for x in wn.all_synsets('n')]  
第23个索引项为“Synset('substance.n.07')”。现在,您可以提取其名称字段,如

>>>> allnouns[23].name().split(".")[0]
'substance'   #output
如果只需要列表中“名词”类别的语法集的“名称”字段,请使用:

>>>> [x.name().split(".")[0] for x in wn.all_synsets('n')]
应该准确地给出你需要的结果

注意:在wordnet中,
name
不是一个属性,而是一个函数

使用
Synset.names()
获取Synset的规范引理名称:

>>> from nltk.corpus import wordnet as wn
>>> wn.synsets('mass', 'n')
[Synset('mass.n.01'), Synset('batch.n.02'), Synset('mass.n.03'), Synset('mass.n.04'), Synset('mass.n.05'), Synset('multitude.n.03'), Synset('bulk.n.02'), Synset('mass.n.08'), Synset('mass.n.09')]
>>> wn.synsets('mass', 'n')[0]
Synset('mass.n.01')
>>> wn.synsets('mass', 'n')[0].name()
u'mass.n.01'
>>> wn.synsets('mass', 'n')[0].name().split('.')[0]
u'mass'
但请注意,有时一个语法集是由几个引理组成的,因此如果使用语法集的表面词形式,则应使用
synset.lemma_names()
访问所有引理:

>>> wn.synsets('mass', 'n')[0].lemmas()
[Lemma('mass.n.01.mass')]
>>> wn.synsets('mass', 'n')[0].lemma_names()
[u'mass']
>>> wn.synsets('mass', 'n')[0].definition()
u'the property of a body that causes it to have weight in a gravitational field'
wn.synset('mass','n')[0]
的情况下,只有1个引理连接到synset。但有时不止一个,例如

>>> wn.synsets('mass', 'n')[1].lemma_names()
[u'batch', u'deal', u'flock', u'good_deal', u'great_deal', u'hatful', u'heap', u'lot', u'mass', u'mess', u'mickle', u'mint', u'mountain', u'muckle', u'passel', u'peck', u'pile', u'plenty', u'pot', u'quite_a_little', u'raft', u'sight', u'slew', u'spate', u'stack', u'tidy_sum', u'wad']
>>> wn.synsets('mass', 'n')[1].definition()
u"(often followed by `of') a large number or amount or extent"
要准确列出wordnet中的所有单词,您可以尝试:

>>> from itertools import chain
>>> set(chain(*[i.lemma_names() for i in wn.all_synsets('n')]))
>>> len(set(chain(*[i.lemma_names() for i in wn.all_synsets('n')])))
119034

请看

好吧,我不想得到一个单词,就像我说的那样,我将用[x代表wn.all_Synset('n')]中的x]收集列表中的所有名词,然后从该列表中选择一个元素,假设所有名词[2]都是Synset('mass.n.03'),现在我想提取字符串“mass”。我以前在某个地方看到过你的代码,但它会搜索某个特定的单词——不是我的情况——我们中的一个人做得不对,因为我认为我们彼此都不理解:)我确信你的代码运行得很好,但你没有抓住要点,或者我无法解释它。“mass.n.03”是从哪里来的?我有一个元素列表,其中包含了使用上述代码生成的所有名词-现在我的列表如下:allnomes=Synset('pile.n.01')、Synset('compost_heap.n.01')、Synset('mass.n.03')、Synset('dunghill.n.02')、Synset('logjam.n.02')、Synset('shock.n.08')-我怎么才能只得到“compost”或“mass”这样的词呢还是那张名单上的“震惊”?我已经完成了x=allnomes[2],并且打印它会显示“Synset('mass.n.03')”——这太好了,现在我想要字符串“mass”可以工作了!我的错,你是对的-只需运行该死的代码!:)这起作用了:[x代表wn.all_synset('n')][2].name().split(“.”[0]让我们来看看。