単語を抽象化する
こういうことがしたい。
変換前: ヨーグルト を 食べる。
変換後: 乳製品 を 食べる。
こんな感じに言葉を抽象的にしたい。
WordNetを使えば簡単にできる。hypernym(上位語)をたどればそれだけでOK。
そして、日本語WordNetを使うのは以下のコードを使うとすごく楽。すごい。
http://subtech.g.hatena.ne.jp/y_yanbe/20090314/p2
やってることは、
lemma(見出し語) => word(単語) => sense(意味?) => synset(同義語)とたどって、
synsetのリンクから hype(上位語) => word(単語) と順番にたどっています。
このあたりのモデルは以下のページの図が分かりやすい。
http://w-it.jp/shima/2009/03/wordnet_java_api.html
import wn def abstract_word(lemma): result = [] for word in wn.getWords(lemma): for sense in wn.getSenses(word): if sense.src != 'hand': continue for synlink in wn.getSynLinks(sense, 'hype'): abst_sense = wn.getSense(synlink.synset2) if abst_sense and word.wordid != abst_sense.wordid: result.append(wn.getWord(abst_sense.wordid).lemma) return result lemma = u"ヨーグルト" print lemma for abst_word in abstract_word(lemma=lemma): print '-', abst_word
実行例
ヨーグルト
- 乳製品
- 食べ物
本棚
- 棚
- 調度品
犬
- 密偵
- イヌ科動物
- 家畜
あんまり確認していないけど、それなりにいけそう。