情報工学科の大学生が学ぶこと

今学んでいることが何に結びつくのかを理解し、効率的に実践的な知識を身につける術を提供します。

【Python nltk】英WordNetの使い方

用語

用語 意味
Synset 同義語集合
lemmas 見出し語。synsetがもつ特定の意味を表す語の集合
synonyms 類義語
hypernym 上位語 「犬」の上位語は「動物」
hyponym 下位語 「動物」の下位語は「犬」
meronyms 全体-部分の関係 「木」のメロニムは「枝」
holonyms 部分-全体の関係 「木」のホロニムは「森」

インポート

from nltk.corpus import wordnet as wn

単語の意味をSynsetをブジェクトで取得

wn.synsets('dog') 
# => [Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n.01'),Synset('frank.n.02'), Synset('pawl.n.01'), Synset('andiron.n.01'), Synset('chase.v.01')]

# 品詞(pos)を限定させることも可能
wn.synsets('dog', pos=wn.VERB)
# => [Synset('chase.v.01')]
# その他の品詞:ADJ, ADJ_SAT, ADV, NOUN, VERB = 'a', 's', 'r', 'n', 'v'

「word.pos.nn」形式でSynsetを取得

wn.synset('dog.n.01')
#=> Synset('dog.n.01')

Sysnsetから詳細情報を取得

# 定義
print(wn.synset('dog.n.01').definition())
#=> a member of the genus Canis (probably descended from the common wolf) that has been domesticated by man since prehistoric times; occurs in many breeds

# 用例
print(wn.synset('dog.n.01').examples()[0])
#=>the dog barked all night

# lemmas
wn.synset('dog.n.01').lemmas()
#=> [Lemma('dog.n.01.dog'), Lemma('dog.n.01.domestic_dog'), Lemma('dog.n.01.Canis_familiaris')]

# lemmasの中から名前だけ
[str(lemma.name()) for lemma in wn.synset('dog.n.01').lemmas()]
#=> ['dog', 'domestic_dog', 'Canis_familiaris']

# lemmaをSynsetに変換
wn.lemma('dog.n.01.dog').synset()
#=> Synset('dog.n.01')

上位・下位語を取得

dog = wn.synset('dog.n.01')

# 最上位語
dog.root_hypernyms()
#=> [Synset('entity.n.01')]

# 上位語(一つ上の階層)
dog.hypernyms()
#=> [Synset('canine.n.02'), Synset('domestic_animal.n.01')]

# 下位語
dog.hyponyms()
#=> [Synset('basenji.n.01'), Synset('corgi.n.01'), Synset('cur.n.01'), Synset('dalmatian.n.02'), ...]

# 全体語
dog.member_holonyms()
#=> [Synset('canis.n.01'), Synset('pack.n.06')]
# 「犬」は「狩猟動物」と「群れ」の構成要素

# 2語に共通するもっとも階層の低い上位語
wn.synset('dog.n.01').lowest_common_hypernyms(wn.synset('cat.n.01'))
#=> [Synset('carnivore.n.01')]
#「猫」と「犬」の共通上位語は「肉食動物」

参考