如何打印出WordNet同义词集的主要引理?Python NLTK

模棱两可的

我有大量的WordNet同义词集。这个集合的一小部分是:

syns = {"Synset('brutal.s.04')", "Synset('benignant.s.02')"}

我想为集合中的每个同义集打印同义集术语(同义集的主要引理)。例如,以上集合的输出应为:

brutal, benignant

这是我使用的代码:

    from nltk.corpus import wordnet as wn
    for s in syns:
        print(wn.s.lemmas[0])

但这不起作用,因为s被认为是字符串,而不是对象。我收到以下错误:

AttributeError: 'WordNetCorpusReader' object has no attribute 's'

这是因为s被视为字符串,而不是对象。我试图将s更改为字节形式,如下所示:

    s = bytes(s)

但这是行不通的。如何以最简单的方式仅打印上述引理?

在这里检查了,这是一个很好的方法,但是我的一组同义词集是字符串形式的,而不是对象。

提前致谢..

睡觉

TL; DR

>>> syns = {"Synset('brutal.s.04')", "Synset('benignant.s.02')"}
>>> [wn.synset(i[8:-2]) for i in syns]
[Synset('benignant.s.02'), Synset('brutal.s.04')]
>>> syns = [wn.synset(i[8:-2]) for i in syns]
>>> syns[0].lemma_names()
[u'benignant', u'gracious']

首先,要获得一个以字符串形式打印出的输入类型是很奇怪的。因此,第一种直观的方法是执行类似ast.literal_eval()eval()使用Synset类型的操作,即https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py#L305(但在此之前参阅http: //nedbatchelder.com/blog/201206/eval_really_is_dangerous.html):

>>> from nltk.corpus.reader.wordnet import Synset
>>> from nltk.corpus import wordnet as wn
>>> syns = {"Synset('brutal.s.04')", "Synset('benignant.s.02')"}
>>> [eval(i) for i in syns]
[Synset('None'), Synset('None')]

显然,Synset课程不能独立于进行nltk.corpus.wordnet因此,我们wordnet.synset()改为看一下函数(https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py#L1217)。似乎它只采用对象的预先分配的名称Synset,因此:

>>> wn.synset('brutal.s.04')
Synset('brutal.s.04')
>>> type(wn.synset('brutal.s.04'))
<class 'nltk.corpus.reader.wordnet.Synset'>

然后,当您输入中的伪字符串同义词集成为syns一个同义词集时,您可以轻松地控制所显示的同义词集,如图所示。如何使用Python NLTK在WordNet同义词集中仅打印单词本身?

回到您的怪异输入中syns,执行以下操作将为我提供同义词集的名称:

>>> syns = {"Synset('brutal.s.04')", "Synset('benignant.s.02')"}
>>> list(syns)[0]
"Synset('benignant.s.02')"
>>> list(syns)[0][8:-2]
'benignant.s.02'

回到将其转换为同义词集:

>>> syns = {"Synset('brutal.s.04')", "Synset('benignant.s.02')"}
>>> [wn.synset(i[8:-2]) for i in syns]
[Synset('benignant.s.02'), Synset('brutal.s.04')]
>>> syns = [wn.synset(i[8:-2]) for i in syns]
>>> syns[0].lemma_names()
[u'benignant', u'gracious']

但是让我们完全回滚,您会得到一个奇怪的输入,syns因为有人通过简单地将a强制转换str()为Synset对象保存了输出

>>> syns[0]
Synset('benignant.s.02')
>>> str(syns[0])
"Synset('benignant.s.02')"

该人可以简单地完成以下操作:

>>> syns[0].name()
u'benignant.s.02'

那么您的输入syns对象将如下所示:

syns = {u'brutal.s.04', u'benignant.s.02'}

并阅读它,您可以简单地执行以下操作:

>>> from nltk.corpus import wordnet as wn
>>> syns = {u'brutal.s.04', u'benignant.s.02'}
>>> syns = [wn.synset(i) for i in syns]
>>> syns[0]
Synset('brutal.s.04')
>>> syns[0].lemma_names()
[u'brutal']

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章