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?

23
demandé sur Peter Mortensen 2013-10-09 01:20:26

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']    
...
36
répondu Francis Bond 2016-12-06 06:29:19

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.

8
répondu abarnert 2013-10-08 21:40:48

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'])
8
répondu Kasrâmvd 2017-04-17 05:19:41

Cela a fonctionné pour moi

wordnet.synsets('change')[0].hypernyms()[0].lemma_names()

0
répondu Oliver Nina 2017-09-28 16:37:45

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)
0
répondu Siraj 2018-09-09 13:09:45