pythonで自然言語処理をする際に日本語で類義語を取得する手軽な方法があまり見つからなかったのでまとめておきます
事前準備
今回はNLTKのwordnetと日本語を扱うためのOpen Multilingual Wordnetの機能を利用します。
pip install nltk
python -c "import nltk;nltk.download('wordnet')"
python -c "import nltk;nltk.download('omw)"
Synsetの取得
SynsetはWordnetで定義されている概念の単位です。試しに「米」という単語についてSynsetを取得して定義を見てみます。
from nltk.corpus import wordnet
synsets = wordnet.synsets("米",lang='jpn')
for syn in synsets:
print(syn,":",syn.definition())
# Synset('rice.n.01') : grains used as food either unpolished or more often polished
# Synset('united_states.n.01') : North American republic containing 50 states - 48 conterminous states in North America plus Alaska in northwest North America and the Hawaiian Islands in the Pacific Ocean; achieved independence in 1776
# Synset('meter.n.01') : the basic unit of length adopted under the Systeme International d'Unites (approximately 1.094 yards)
「米」に対する概念として”食べ物”、”アメリカ”、”メートル”の三つが登録されていることが確認できます。
類義語の取得
Synsetにはその概念に属する単語が登録されているため類義語として取得することができます。”食べ物”としての「米」の類義語を取得してみます
rice_synset=synsets[0]
synonyms=rice_synset.lemma_names("jpn")
print(synonyms)
# ['イネ', 'ライス', 'おまんま', '上米', '上げ米', '供米', '八木', '御飯', '枕米', '産米', '田の実', '白米', '神米', '禾穀', '稲', '稲孫', '穀', '米', '米穀', '米飯', '粮米', '糧米', '舎利', '褻稲', '銀飯', 'ご飯', '飯', '飯米']
「イネ」や「ご飯」などよさげな類義語が取得できました。
まとめ
NLTKのOpen Multilingual Wordnetを使ってpythonから簡単に類義語を検索することができました。
注意点として単語によっては複数の概念が登録されているため、意図したものと違う類義語を取得しないように適切なSynsetを選ぶ必要がありそうです。
以上