「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の動作確認を説明しました。