Как получить синонимы из nltk WordNet Python
5 ответов
Если вы хотите синонимы в synset (он же леммы, которые составляют набор), Вы можете получить их с 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']
...
у вас уже есть синонимы. Вот что такое 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')]
это тот же список записей верхнего уровня, который дал вам веб-интерфейс.
если вы также хотите, чтобы список "похож на", это не то же самое, что синонимы. Для этого вы звоните similar_tos()
в каждом Synset
.
Итак, чтобы показать ту же информацию, что и веб-сайт, начните с чего-то вроде этого:
for ss in wn.synsets('small'):
print(ss)
for sim in ss.similar_tos():
print(' {}'.format(sim))
конечно, веб-сайт также печатает часть речь (sim.pos
), список лемм (sim.lemma_names
), определением (sim.definition
), и примеры (sim.examples
) для каждого synset на обоих уровнях. и он группирует их по частям речи, и он добавляется в ссылки на другие вещи, за которыми вы можете следить, и так далее. Но этого должно быть достаточно, чтобы начать.
можно использовать wordnet.synset
и лемм для того, чтобы получить все синонимы:
пример :
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'])
простейшая программа для печати синонимов данного слова
from nltk.corpus import wordnet
for syn in wordnet.synsets("good"):
for name in syn.lemma_names():
print(name)