8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonで日本語の類義語を取得する

Posted at

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を選ぶ必要がありそうです。

以上

参考

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?