読者です 読者をやめる 読者になる 読者になる

WordNet利用メモ

Perl

WordNet、ずっと知ってはいたけど、ちゃんと触ったことなかった。最近WordNetを少し触る機会があったので、メモ。

インストール

WordNetのサイトからダウンロードしてきてインストール

ダウンロードして解凍して、インストールすると /usr/local/WordNet-3.0 にインストールされる

tar -xzf WordNet-3.0.tar.gz
cd WordNet-3.0
./configure
make
sudo make install

これでパスを通せば、wn(/usr/loca/WordNet-3.0/bin/wn)コマンドが使えるようになる。

wn コマンド

使い方は http://wordnet.princeton.edu/man/wn.1WN.html
例えば、blogという単語を調べるときは wn blog とかしてみる

$ wn blog

Information available for noun blog
	-hypen		Hypernyms
	-synsn		Synonyms (ordered by estimated frequency)
	-famln		Familiarity & Polysemy Count
	-coorn		Coordinate Terms (sisters)
	-grepn		List of Compound Words
	-over		Overview of Senses

Information available for verb blog
	-hypev		Hypernyms
	-synsv		Synonyms (ordered by estimated frequency)
	-famlv		Familiarity & Polysemy Count
	-framv		Verb Frames
	-coorv		Coordinate Terms (sisters)
	-simsv		Synonyms (grouped by similarity of meaning)
	-grepv		List of Compound Words
	-over		Overview of Senses

No information available for adj blog

No information available for adv blog

それで、wn blog -synsn とすると類義語(web log)と下位語(diary, journal)が調べられる

$ wn blog -synsn

Synonyms/Hypernyms (Ordered by Estimated Frequency) of noun blog

1 sense of blog                                                         

Sense 1
web log, blog
       => diary, journal

調べられるけど、機械が可読な感じではないのが少しつらい(なにかオプションがあるのかもしれないけど、見つからなかった)

WordNet::QueryData

wnコマンドはプログラムで扱うのはちょっと大変そうなので、別のを探したらWordNet::QueryDataというcpanモジュールがあった。
https://metacpan.org/pod/WordNet::QueryData

WordNet::QueryDataの場合、blog#n#1のように、単語とその品詞、意味(WordNet上で何番目の意味か)が必要になるので、品詞と意味などを調べる。

blogには名詞と動詞があって、名詞のblogは1種類

my $wn = WordNet::QueryData->new;
[ $wn->queryWord('blog') ];   # -> blog#n, blog#v
[ $wn->queryWord('blog#n') ]; # -> blog#n#1

類義語や下位語はquerySenseメソッドを利用すると取れる

my $wn = WordNet::QueryData->new;
[ $wn->querySense('blog#n#1', 'syns') ];  # -> web_blog#n#1, blog#n#1
[ $wn->querySense('blog#n#1', 'hype') ];  # -> diary#n#1
[ $wn->querySense('diary#n#1', 'syns') ]; # -> diary#n#1, journal#n#1

他にも上位語(hypo),定義(glos)などwnコマンド同様に取れる

日本語WordNet

WordNetの日本語版。sqlite版があるので、それを使ってみる。英語版も含まれてる(全部かどうかはわからない)。

synset, sense, word テーブルあたりを使うと類義語が取れる。
synlinkテーブルを使えば、上位下位語が取れる。

$ sqlite3 wnjpn.db
sqlite> select * from synset where name = 'web_log';
06402202-n|n|web_log|eng30
sqlite> select * from sense where synset = '06402202-n';
06402202-n|27320|eng|0|1|0|eng-30
06402202-n|96297|eng|0|1|0|eng-30
06402202-n|222321|jpn||||mono
sqlite> select * from word where wordid in (27320,96297,222321);
27320|eng|web_log||n
96297|eng|blog||n
222321|jpn|ブログ||n


昔軽く触ったときはwnコマンドなんてなかった気がするから、だいぶ使いやすくなってる気がする。
あと、WordNetのバージョンによってsynsetが違うのは知らなかった。