web-dev-qa-db-ja.com

nltk WordNetから同義語を取得する方法Python

WordNetは優れていますが、nltkで同義語を取得するのに苦労しています。 here のように「small」という単語を検索すると、すべての同義語が表示されます。

基本的には、次のことを知る必要があります。wn.synsets('Word')[i].option()オプションには、上位語と反意語を使用できますが、同義語を取得するためのオプションは何ですか?

25
user2758113

シンセット内の同義語(セットを構成する補題)が必要な場合は、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']    
...
38
Francis Bond

すべての同義語を取得するには、wordnet.synsetおよび lemmas を使用できます。

例:

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'])
9
Kasramvd

あなたはすでに同義語を持っています。それが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')]
_

これは、Webインターフェースが提供したトップレベルエントリのリストと同じです。

「類似」リストも必要な場合、それは同義語と同じではありません。そのためには、各Synsetsimilar_tos()を呼び出します。

したがって、ウェブサイトと同じ情報を表示するには、次のようなものから始めます。

_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_)も印刷しています両方のレベルのシンセット。そして、それらを品詞ごとにグループ化し、フォローできる他のものへのリンクなどに追加されます。ただし、これで十分です。

8
abarnert

特定のWordの同義語を出力する最も簡単なプログラム

from nltk.corpus import wordnet

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

これは私のために働いた

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

0
Oliver Nina