May 19, 2008

英辞郎第三版をLeopardの辞書で使う

Leopardの「辞書」アプリで「英辞郎」を使うというエントリを見つけた。すばらしい!

書籍版にはバイナリ形式の辞書しかない。
のでテキスト形式に変換しなければならない。
DiDi Dictionary Viewerの「英辞郎まとめて変換」がいいよ!ということだったが手に入れられない。(閉鎖中?)

そこでまず、こちらのスクリプトを利用させていただきPDICバイナリ形式をPDIC1行テキスト形式に変換した。

実はここでも引っかかった。 sortでエラーが出る。

 sort: string comparison failed: Illegal byte sequence
 sort: Set LC_ALL='C' to work around the problem.

うーん。で、convert-all.shの10行目

 perl ./pdic-dump.pl $f | sort -f | sed -f ./eview.sed > $name.txt



 perl ./pdic-dump.pl $f | LC_ALL=C sort -f | sed -f ./eview.sed > $name.txt

と変えた。xmlにするんだからほんとはソートはいらないのだろうけど^^;

準備ができたところでいよいよeiji_conv.rbを実行。エラー。

 >ruby eiji_conv.rb MyDictionary.xml
 undefined method `pre_match' for nil:NilClass (NoMethodError)

なんてこったい。
Rubyとか初めて見たからよくわからんけど、空のオブジェクトのpre_matchメソッドを実行しようとしているってこと?

ということでeiji_conv.rbを試行錯誤でちょこっといじらせていただき、どこでエラーが出てるかチェック。

Eijiro.txt、eiji_conv.rbについて以下の処理を施した。
それぞれをmiでエイヤと開いて編集しました。
  • よくわからんが「π」という文字が含まれているところで止まる。
    →テキストの文字コードを最初からUTF-8で保存する。ファイルでかくて時間かかる。
    →UTF-8に変換したからeiji_conv.rb中の文字コードの変換処理をしない。eiji_conv.rbの50行目で

     line1 = iconv.iconv(line) #Shift_JISからUTF-8へ変換



     line1 = line1 # 何も変えない

    に変えた。何たるやっつけ仕事。
  • 「 : 」が含まれていない「■・」から始まるエントリがある。
    →例文っぽいから行ごと消す。
エラーが出なくなったので、あとは手順通りMyDictionary.xmlを作って、makeして、make installできました。


(追記)

DiDi Dictionaryが復活してた!
ありがとうございました。