web-dev-qa-db-fra.com

Comment obtenir des synonymes de nltk WordNet Python

WordNet est génial, mais j'ai du mal à trouver des synonymes dans nltk. Si vous recherchez un mot similaire à «petit» comme ici , il affiche tous les synonymes. 

Fondamentalement, j'ai juste besoin de savoir ce qui suit: wn.synsets('Word')[i].option() Où l'option peut être hypernymes et antonymes, mais quelle est l'option pour obtenir des synonymes?

24
user2758113

Si vous voulez les synonymes dans le synset (c'est-à-dire 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
Francis Bond

Vous avez déjà les synonymes. C'est ce qu'est une 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')]

C'est la même liste d'entrées de niveau supérieur que l'interface Web vous a fournie.

Si vous souhaitez également la liste "similaire à", ce n'est pas la même chose que les synonymes. Pour cela, vous appelez similar_tos() sur chaque Synset.

Donc, pour afficher les mêmes informations 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 Web imprime également la partie parole (sim.pos), la liste des lemmes (sim.lemma_names), la définition (sim.definition) et des exemples (sim.examples) pour chaque synset aux deux niveaux. et cela les regroupe par parties du discours, et cela est ajouté dans des liens vers d'autres choses que vous pouvez suivre, et ainsi de suite. Mais cela devrait suffire à vous aider à démarrer.

8
abarnert

Vous pouvez utiliser wordnet.synset et lemmas pour 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
Kasrâmvd

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
Siraj