Comment obtenir des synonymes de NLTK WordNet Python
WordNet est grande, mais je vais avoir un moment difficile l'obtention de synonymes dans nltk. Si vous faites une recherche similaire au mot "small" comme ici, il affiche tous les synonymes.
Fondamentalement, j'ai juste besoin de savoir ce qui suit:
wn.synsets('word')[i].option()
où option peut être hypernyms et antonyms, mais quelle est l'option pour obtenir des synonymes?
5 réponses
si vous voulez les synonymes dans le synset( Alias les lemmes qui composent l'ensemble), vous pouvez les obtenir avec 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']
...
vous avez déjà les synonymes. C'est ce que l' Synset
est.
>>> 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')]
c'est la même Liste d'entrées de haut niveau que l'interface Web vous a donné.
si vous voulez aussi la liste "similaire à", ce n'est pas la même chose que les synonymes. Pour cela, vous appeler similar_tos()
sur chaque Synset
.
alors, pour afficher la même information que le site Web, commencez par quelque chose comme ceci:
for ss in wn.synsets('small'):
print(ss)
for sim in ss.similar_tos():
print(' {}'.format(sim))
bien sûr, le site est également l'impression de la partie de discours (sim.pos
), la liste de lemmes (sim.lemma_names
), définition (sim.definition
), et des exemples (sim.examples
) pour chaque synset aux deux niveaux. et il les regroupe par parties de la parole, et il est ajouté dans les liens à d'autres choses que vous pouvez suivre, et ainsi de suite. Mais cela devrait être suffisant pour vous aider à démarrer.
Vous pouvez utiliser wordnet.synset
et lemmes afin d'obtenir tous les synonymes:
exemple :
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]))
Démo:
>>> 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'])
Cela a fonctionné pour moi
wordnet.synsets('change')[0].hypernyms()[0].lemma_names()
programme le plus simple pour imprimer les synonymes d'un mot donné
from nltk.corpus import wordnet
for syn in wordnet.synsets("good"):
for name in syn.lemma_names():
print(name)