日本語WordNet(ワードネット)をPythonで処理する

日本語WordNet(ワードネット)をPythonで処理する プログラミング

「WordNetの日本語版が欲しい」
「Pythonで日本語WordNetを処理したい」

このような場合には、この記事が参考になります。

本記事の内容

  • 日本語WordNetとは?
  • 日本語WordNetのダウンロード
  • 日本語WordNetの動作確認

それでは、上記に沿って解説していきます。

日本語WordNetとは?

WordNetの日本語版です。
WordNet自体の説明は、ここでは行いません。

最新の日本語WordNetのバージョンは、1.1となります。
最新と言っても、2010年10月22日のリリースです。

また、日本語WordNetはPrinceton WordNet 3.0に準じています。
Princeton WordNetは、2011年6月に3.1をリリースしたのが最後です。

よって、WordNet自体がプロジェクトとして止まった状況です。
というより、完成したということかもしれません。

そうは言っても、日本語WordNetには以下のモノが登録されています。

  • 57,238 概念 (synset数)
  • 93,834 words 語
  • 158058 語義 (synsetと単語のペア)
  • 135,692 定義文
  • 48,276 例文

何もないよりは、全然ありがたいことです。

以上、日本語WordNetについての説明でした。
次は、日本語WordNetをダウンロードしていきます。

日本語WordNetのダウンロード

日本語 WordNet
http://compling.hss.ntu.edu.sg/wnja/

上記が公式ページです。
Webページの作りが、かなり古いです。

iframeを多用した昔ながらのページと言えます。
そのため、以下のURLから直接ダウンロードしましょう。

ダウンロードリンク
http://compling.hss.ntu.edu.sg/wnja/data/1.1/wnjpn.db.gz

ちなみに、上記ページはSSL未対応です。
その辺でブラウザから警告が出る場合は、wgetコマンドを使いましょう。

Windowsの場合なら、PowerShellでwgetコマンドが使えます。

wget -O wnjpn.db.gz http://compling.hss.ntu.edu.sg/wnja/data/1.1/wnjpn.db.gz

wnjpn.db.gzが保存できたら、解凍します。
解凍すると、wnjpn.dbが確認できます。

なお、Windowsの場合なら、gz対応のファイル解凍ツールを使いましょう。
ちなみに、私はCygwinを使って解凍しました。

Cygwin上で次のコマンドを実行。

$ gzip -d wnjpn.db.gz

Cygwinがあれば、余計なツールをインストールする必要がなくなります。
その点では、Cygwinは非常に価値があると言えます。

以上、日本語辞書のダウンロードを説明しました。
次は、日本語WordNetの動作確認を行います。

日本語WordNetの動作確認

wnjpn.dbは、SQLiteのデータベースです。
動作確認としては、次の二つを行います。

  • データの確認
  • Pythonからのデータ利用(類義語検索)

それぞれを下記で説明します。

データの確認

SQLiteがインストール済みなら、次のようにテーブル一覧を確認できます。

sqlite> .tables 
ancestor    pos_def     synlink     synset_def  variant     xlink 
link_def    sense       synset      synset_ex   word

WindowsへのSQLiteのインストールは、次の記事で解説しています。

ただ、次のようにGUI画面で確認したい人もいるでしょう。

上の画面は、HeidiSQLでwnjpn.dbに接続している状況です。
HeidiSQLのインストールについては、次の記事で説明しています。

HeidiSQLは、MySQLやMariaDBだけではなく、SQLiteにも対応しています。

Pythonからのデータ利用(類義語検索)

wnjpn.dbを用いて、類義語検索を行います。
そのためには、次のスクリプトをダウンロードします。

wordnet_jp.py
https://github.com/yoheiMune/python-playground/blob/master/09_wordnet/wordnet_jp.py

wordnet_jp.py

conn = sqlite3.connect("./wnjpn.db")

wordnet_jp.py上にデータベースのパスが、記載されています。
パスを変更するか、同じディレクトリにwnjpn.dbを設置するか、どちらでも構いません。

ここでは、wordnet_jp.pyと同じディレクトリ上に動作確認にスクリプトを作成しています。

test.py

import wordnet_jp 
import pprint 
word = '犬' 
synonym = wordnet_jp.getSynonym(word) 
pprint.pprint(synonym)

すべて同じ場所に設置しているということです。

この状況で上記コードを実行します。
結果は、以下となります。

{'canis_familiaris': ['飼い犬', 'ドッグ', '犬', '飼犬', '洋犬', 'イヌ'], 
 'spy': ['廻者', 
         '間諜', 
         '工作員', 
         '犬', 
         '間者', 
         '探', 
         '諜報員', 
         '諜者', 
         '密偵', 
         'スパイ', 
         '秘密捜査員', 
         'いぬ', 
         'まわし者', 
         '隠密', 
         '探り', 
         '廻し者', 
         '回し者', 
         '回者']}

上記は、「犬」の同義語になります。
確かに、スパイという意味でも「犬」は使われます。

これは、なかなか面白い考察を与えてくれますね。

以上、日本語WordNetの動作確認を説明しました。

タイトルとURLをコピーしました