Pythonから利用するWordnet
Wordnetとは...プリンストン大学が開発している語データーベースっていう説明でいいのかなあ, 一応,wikipediaの記事を載せておくWordNet
日本語版wordnet(NICTが開発している)だと,日本語で解説されているページがけっこうある.例えばこんなの
けど,英語版wordnetの使い方を日本語で解説した記事.というのはほとんど見つからない.ましてや,Python言語から英語版wordnetの使い方を解説した記事なんて見つからなかった.
仕方がないので,英語で探して,英語で読む. すると,こんな解説スライドがあった.どこかの大学の授業スライド?なのかな?
どうも,Pythonからwordnetを利用する時には,nltkライブラリで簡単に扱えるらしい.
スライドと同じ内容を,ちょっとだけ覚書を残しておく.
クエリ語の同義語を得る
>>> from nltk.corpus import wordnet >>> honeySynsets = wordnet.synsets("honey", pos="n")
wordnet.synsetsメソッドから同義語を得ることができる.第一引数にクエリ語を,第二引数にその品詞を与える.で戻り値は同義語集合(型はリスト).
同義語集合を確認したいときは
>>> print honeySynsets [Synset('honey.n.01'), Synset('beloved.n.01')]
大体の場合,同義語集合の要素数は1より多い.
ちなみに,要素である同義語に型はnltk.corpus.reader.wordnetクラスのインスタンスである.
>>> for s in honeySynsets: ... type(s) ... <class 'nltk.corpus.reader.wordnet.Synset'> <class 'nltk.corpus.reader.wordnet.Synset'>
クエリ語の上位概念を得る
語の上位概念を得たい時は,同義語インスタンスの,hypernymsメソッドを利用する.引数は空.
>>> for s in honeySynsets: ... s.hypernyms() ... [Synset('sweetening.n.01')] [Synset('lover.n.01')]
語honey(はちみつ)の上位語は「甘いもの」,で,語beloved(愛する人)の上位語は「恋人」になっている.
インスタンスオブジェクトでなく,文字を得る
基本的に,同義語や上位概念語はnltk.corpus.reader.wordnetクラスのインスタンスで返される.けど,インスタンスでなく,文字型で結果が欲しい時もあるはずだ.
lemma_names
メソッドを利用すればいいらしい.ここを参考にしてみた.
lemma_names
ということで,lemma語が余計に増えてしまっている気がするが...まあ,当初の目的は達成できているからよしとするか...
下のサンプルコードで,lemma_names
を利用すると文字型のオブジェクトが返されているのがわかる.
In [14]: for s in honeySynsets: hy=s.hypernyms(); for h in hy: for tmp in h.lemma_names: ....: print tmp ....: print type(tmp) ....: sweetening <type 'str'> sweetener <type 'str'> lover <type 'str'>