Wordnetって何?
つWordNet - Wikipedia
つ日本語 Wordnet
簡単に言うと同義語などの情報が載った辞書.
中身をのぞいてみよう
データベースの構造の説明が見つからなかったので,まずはwnjpn.db.gzを解凍してsqlite3.exeでwnjpn.dbの中身を覗いてみます.
ファイルを開く
>sqlite3 wnjpn.db
データベースの構造を確認
sqlite>.schema
CREATE TABLE ancestor (synset1 text, synset2 text, hops int); CREATE TABLE link_def (link text, lang text, def text); CREATE TABLE pos_def (pos text, lang text, def text); CREATE TABLE sense (synset text, wordid integer, lang text, rank text, lexid integer, freq integer, src text); CREATE TABLE synlink (synset1 text, synset2 text, link text, src text); CREATE TABLE synset (synset text, pos text, name text, src text); CREATE TABLE synset_def (synset text, lang text, def text, sid text); CREATE TABLE synset_ex (synset text, lang text, def text, sid text); CREATE TABLE variant (varid integer primary key, wordid integer, lang text, lemma text, vartype text); CREATE TABLE word (wordid integer primary key, lang text, lemma text, pron text, pos text); CREATE TABLE xlink (synset text, resource text, xref text, misc text, confidence text); CREATE INDEX ancestor_synset1_idx ON ancestor (synset1); CREATE INDEX ancestor_synset2_idx ON ancestor (synset2); CREATE INDEX sense_synset_idx ON sense (synset); CREATE INDEX sense_wordid_idx ON sense (wordid); CREATE INDEX synlink_idx ON synlink (synset1, link); CREATE INDEX synset_def_id_idx ON synset_def (synset); CREATE INDEX synset_ex_id_idx ON synset_def (synset); CREATE INDEX synset_id_idx ON synset (synset); CREATE INDEX word_id_idx ON word (wordid); CREATE INDEX word_lemma_idx ON word (lemma); CREATE INDEX xlink_synset_resource_idx ON xlink (synset,resource);
単語を探す
単語はwordテーブルに含まれています.
文字列"dog"を探してみます
sqlite>select * from word where lemma = "dog";
85237|eng|dog||n 152987|eng|dog||v
動詞と名詞の"dog"があるので,二つの項目が出てきました.
同義語を探す
Wordnetでは同義語はsynsetという単語の集まりでまとめられています.
注意点は,ひとつの単語が複数のsynsetに属することです.
senseテーブルから名詞の"dog"が属するsynsetを取り出します.
sqlite>select * from sense where wordid = 85237;
02084071-n|85237|eng|0|1|42|eng-30 10114209-n|85237|eng|0|2|0|eng-30 10023039-n|85237|eng|0|3|0|eng-30 09886220-n|85237|eng|0|4|0|eng-30 07676602-n|85237|eng|0|5|0|eng-30 03901548-n|85237|eng|0|6|0|eng-30 02710044-n|85237|eng|0|7|0|eng-30
synset"02084071-n"内の単語をwordテーブルから探す.
sqlite>select lemma from sense, word where synset = "02084071-n" and word.lang = "eng" and sense.wordid = word.wordid;
canis_familiaris domestic_dog dog
以上のように同義語が得られます.
上位語,下位語を探す
synlinkテーブルにsynset同士の関係(リンク)が書かれています.
リンクの種類はlink_defを参照.
例えばsynset"02084071-n"の下位(hypo)のグループに含まれるsynsetは以下のようになります.
sqlite>select lemma from synlink, sense, word where link ="hypo" and synset1 = "02084071-n" and synset2 = synset and sense.wordid = word.wordid and word.lang="eng";
puppy pooch doggy doggie barker bow-wow mutt mongrel cur lapdog toy_dog toy hunting_dog working_dog carriage_dog coach_dog dalmatian basenji pug pug-dog leonberg newfoundland newfoundland_dog great_pyrenees spitz belgian_griffon brussels_griffon griffon welsh_corgi corgi poodle_dog poodle mexican_hairless
スピッツやプードル,コーギーなどの犬の下位語が得られました.