Mouseover Dictionaryを使ってみる

MouseoverDictionary
http://maru.bonyari.jp/mouseoverdictionary/
カーソルを載せるとその部分の単語を翻訳してくれる拡張。

辞書として10年ぐらい前に購入した英辞朗を使ってみる
まずは一行テキスト形式に変換
一行テキスト形式のフォーマットは

見出し語 /// 説明 / 例文

デリミタは「 /// 」「 / 」。空白含む。

nkf -Sw eijiro41.txt > eijiro41.utf8.txt

conv.plとして

#!/usr/bin/perl

while(<>){
 chop($_);
 ($a,$b,$c,$d) = ($_ =~ m|■([^:{]+)\s*({[^}]*})?\s*:\s*([^/]*)\s*(/.*)?|);
 $d=~s|/||g;
 $a=~m/\s*(.*\w+)\s*/;
 $a= $1;
 print "$a /// $b $c / $d\n";
}

変換実行

perl ./conv.pl eijiro41.utf8.txt > eijiro41.utf8.2.txt
nkf -Ws eijiro41.utf8.2.txt > eijiro41.sjis.txt

あとはこれを登録すればいいのだけど、ここで問題が。
Mouseover DictionaryのDBテーブルは見出し語をプライマリキーとしてる。いっぽう辞書データには

■a  {形-1} : (たくさんあるもののうちの)一つの
■a  {形-2} : 〜の一片{いっぺん}、1回分、一種{いっしゅ}、一人前{いちにんまえ}、一例{いちれい}
...

と言った形で同じ見出し語に複数の説明があるのだ。
PDIC使うとこの辺もきちんと変換してくれるのかな?使ったことないからわからないけど)

解決方法として

  • プライマリキーを外す
  • 「a {形-2}」まで登録して検索時にLIKEをつける
  • 無視

ここではプライマリキーを外すことにした。
どうせ複数の項目があるものなんて少数or良く知ってる単語だろうから無視というのも選択肢としてはありだと思う。
content/options.js,content/overlay.jsに計三ヶ所CREATE文があるのでそこのprimary key指定を外しておく。
ついでにoverlay.jsのlookup_db(key)で

while (lookup_statement.executeStep()) {
  dat = dat +"<br />"+ lookup_statement.getString(1);
}

としとく。

雑感

P3 1.2GHzだけどカーソル置いて検索結果がでるまでに1-3sかかる感じ。プライマリキー外した分時間がかかるようになったかな。

辞書の読み込みがSJIS固定なのでこの辺をUTFでできるようにすると英語以外の辞書も使えるかも。