web-dev-qa-db-de.com

So erhalten Sie Synonyme aus nltk WordNet Python

WordNet ist großartig, aber es fällt mir schwer, in nltk Synonyme zu finden. Wenn Sie ähnlich wie nach dem Wort "klein" wie hier suchen, werden alle Synonyme angezeigt. 

Grundsätzlich muss ich nur Folgendes wissen: wn.synsets('Word')[i].option() Wo kann Hypernym und Antonym sein, aber wie können Sie Synonyme bekommen?

24
user2758113

Wenn Sie die Synonyme im Synset haben möchten (alias die Lemmen, aus denen sich der Satz zusammensetzt), können Sie sie mit lemma_names() erhalten:

>>> 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

Du hast bereits die Synonyme. Das ist eine 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')]

Dies ist die gleiche Liste von Einträgen auf oberster Ebene, die Ihnen die Weboberfläche gegeben hat.

Wenn Sie auch die Liste "ähnlich" möchten, ist dies nicht dasselbe wie die Synonyme. Dazu rufen Sie similar_tos() für jedes Synset auf.

Um die gleichen Informationen wie die Website anzuzeigen, beginnen Sie mit etwas wie folgt:

for ss in wn.synsets('small'):
    print(ss)
    for sim in ss.similar_tos():
        print('    {}'.format(sim))

Natürlich druckt die Website auch den Sprachteil (sim.pos), die Liste der Lemmata (sim.lemma_names), die Definition (sim.definition) und Beispiele (sim.examples) für jeden Synset auf beiden Ebenen. und es gruppiert sie nach Teilen der Sprache und fügt Links zu anderen Dingen hinzu, denen Sie folgen können, und so weiter. Aber das sollte ausreichen, um loszulegen.

8
abarnert

Sie können wordnet.synset und lemmas verwenden, um alle Synonyme zu erhalten:

beispiel:

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]))

Demo:

>>> 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

Einfachstes Programm zum Drucken der Synonyme eines bestimmten Wortes

from nltk.corpus import wordnet

for syn in wordnet.synsets("good"):
    for name in syn.lemma_names():
        print(name)
0
Siraj

Das hat bei mir funktioniert

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

0
Oliver Nina