WordNet很棒,但我很难在nltk中获取同义词。如果您搜索类似于here这样的单词'small',它会显示所有同义词。
基本上我只需要知道以下内容:wn.synsets('word')[i].option()
哪里的选项可以是上位词和反义词,但获取同义词的选项是什么?
如果你想要synset中的同义词(也就是构成集合的lemmas),你可以使用lemma_names()
获取它们:
>>> for ss in wn.synsets('small'):
>>> print(ss.name(), ss.lemma_names())
small.n.01 ['small']
small.n.02 ['small']
small.a.01 ['small', 'little']
minor.s.10 ['minor', 'modest', 'small', 'small-scale', 'pocket-size', 'pocket-sized']
little.s.03 ['little', 'small']
small.s.04 ['small']
humble.s.01 ['humble', 'low', 'lowly', 'modest', 'small']
...
您可以使用wordnet.synset
和lemmas来获取所有同义词:
例如:
from itertools import chain
from nltk.corpus import wordnet
synonyms = wordnet.synsets(text)
lemmas = set(chain.from_iterable([word.lemma_names() for word in synonyms]))
演示:
>>> synonyms = wordnet.synsets('change')
>>> set(chain.from_iterable([word.lemma_names() for word in synonyms]))
set([u'interchange', u'convert', u'variety', u'vary', u'exchange', u'modify', u'alteration', u'switch', u'commute', u'shift', u'modification', u'deepen', u'transfer', u'alter', u'change'])
你已经有了同义词。这就是Synset
。
>>> wn.synsets('small')
[Synset('small.n.01'),
Synset('small.n.02'),
Synset('small.a.01'),
Synset('minor.s.10'),
Synset('little.s.03'),
Synset('small.s.04'),
Synset('humble.s.01'),
Synset('little.s.07'),
Synset('little.s.05'),
Synset('small.s.08'),
Synset('modest.s.02'),
Synset('belittled.s.01'),
Synset('small.r.01')]
这是Web界面为您提供的顶级条目列表。
如果你也想要“类似于”列表,那就和同义词不同。为此,你在每个similar_tos()
上调用Synset
。
因此,要显示与网站相同的信息,请从以下内容开始:
for ss in wn.synsets('small'):
print(ss)
for sim in ss.similar_tos():
print(' {}'.format(sim))
当然,该网站还为两个级别的每个synset打印词性(sim.pos
),列表(sim.lemma_names
),定义(sim.definition
)和示例(sim.examples
)。它通过词性对它们进行分组,并添加到您可以遵循的其他内容的链接中,等等。但这应该足以让你开始。
打印给定单词同义词的最简单程序
from nltk.corpus import wordnet
for syn in wordnet.synsets("good"):
for name in syn.lemma_names():
print(name)
这对我有用
wordnet.synsets('change')[0].hypernyms()[0].lemma_names()