Leopardの「辞書」アプリでEPWING辞書を使う


これまでに、Leopardの「辞書」アプリケーション(Dictionary.app)で英辞郎郵便番号辞書を使う方法を紹介してきたが、EPWING形式の辞書を使いたいという要望が結構あるようなのでチャレンジしてみた。 ありがたいことに、hishida氏がEPWING構造解析ツール「EBDump」を、太田純氏がEBDumpの出力をHTMLに変換する「ebd2html」を発表されているのでこれらを利用させていただいた。なお、両ソフトともWindows用なので、以下で述べる作業を行うにはWindowsが必要になる(Parallels Desktop for Macなどの仮想環境でもOK)。

**○EPWINGのデータをHTMLに変換する** 変換に使ったEPWING辞書は、[COLLINS COBUILD Resource Pack on CD-ROM](http://www.amazon.co.jp/exec/obidos/ASIN/B00016LYI0/binword0f-22/ref=nosim/)を[EBStudio](http://www31.ocn.ne.jp/~h_ishida/EBStudio.html)でEPWING化したもの。 まず、このEPWING辞書を[ebd2htmlのページ](http://hp.vector.co.jp/authors/VA000022/ebd2html/ebd2html.html)で紹介されている方法でHTMLファイル(COBUILD.htmlとする)に変換する(Windows上での作業になる)。 (ここでEPWING化したCOBUILDを用いているのは、外字の数が少なくて検証が楽だったため。COBUILD→辞書アプリの変換が目的なら、[COBUILD変換スクリプト](http://hp.vector.co.jp/authors/VA005784/cobuild/index.html)が生成したHTMLをそのまま使えばいいだろう。)

○Xcodeをインストールする ここからはMac上での作業になる。 ・英辞郎の場合と同じく、Mac OS X用の開発ツール「Xcode」をインストールする(Leopardのインストールディスクの「Optional Installs」→「Xcode Tools」→「XcodeTools.mpkg」を実行) ・「/Developer/Exmaples/Dictionary Development Kit/project_templates」フォルダを適当な場所にコピーする

○変換用のスクリプトを準備・実行ここから、変換用のスクリプトをダウンロードして、(コピーした)「project_templates」フォルダに解凍する(同じファイル名は上書き) ・EPWINGから取り出したHTMLファイル(COBUILD.html)も、同じく「project_templates」フォルダにコピーする ・「ユーティリティ」フォルダの「ターミナル」アプリケーション(Terminal.app)を起動して、「cd」コマンドで(コピーした)「project_templates」フォルダに移動する ・ターミナルで「ruby epwing_conv.rb < COBUILD.html | ruby gaiji_rep.rb cobuild.lst > MyDictionary.xml ; make ; make install」と入力 ・「辞書」アプリケーション(Dictionary.app)を立ち上げると、COBUILDが使えるようになっているはず

○他のEPWING辞書を変換する際のポイント ・日本語の辞書を変換する際は、「epwing_conv.rb」内の「iconv = Iconv.new(‘UTF-8’, ‘Shift_JIS’)」という箇所を変更する(‘Shift_JIS’を’ISO-2022-JP’にする) ・EPWINGの辞書で使われている外字を、Unicodeキャラクタに変換するためのテーブルを用意する。COBUILDの場合は、「cobuild.lst」がそれに当たる(広辞苑などでこれを作るのは大変だと思う……) ・ebd2htmlが生成するHTMLでは、最後の近くの項目のタグが閉じられていないことがあるようだ。変換されたHTMLファイルを開いて確認した方がいいだろう ・MakefileやMyInfo.plistの辞書名を変更すること

COBUILDの辞書はうまく変換できたようだが、きっと辞書ごとにうまくいったりいかなかったりするんじゃなかろうか……。

(2008年5月5日追記) COBUILDにスタイルシートを適用してみた。多少は見やすくなったかも。変換用のスクリプトはここから。使い方は上記説明の通りだが、「ruby cobuild_conv.rb < COBUILD.html | ruby gaiji_rep.rb cobuild.lst > MyDictionary.xml ; make ; make install」と入力する。

コメント

さし
このページのスクリーンショットを見せていただいたのですが、 発音記号は表示されないんですね。 あと、たとえば、love と Leopard の辞書で引くと、英辞郎だと [名]と[他動]が黒枠になっていたりして見やすいですよね。 これって HTML の段階とか、XML の段階で、何かの値を 一括変換とかすることで実現できないんでしょうか。 凝ったものはなくても、間に一行改行があったり、箇条書き番号が あったりでずいぶん見た目が違うので、そういうのもできたら うれしいなと思って質問してみました。
Tats_y
>発音記号は表示されないんですね。 ebd2htmlの出力結果に発音記号が入ってないので、これは私の方ではいかんともしがたいです。 >英辞郎だと[名]と[他動]が黒枠になっていたりして見やすいですよね。 これは私がスタイルシートを作って指定しています。 >これって HTML の段階とか、XML の段階で、何かの値を一括変換とかすることで実現できないんでしょうか。 できると思いますよ。ただ、どの要素をどう指定するのか判断するのはけっこう面倒だったりします(例えば、COBUILDだと品詞は[]で囲まれているが、[]で囲まれている箇所はすべて品詞としてあつかって大丈夫かとか)。どういう表記を、どう変換したらよいか、案を出してもらえると作業しやすいですね。
さし
さっそくお返事ありがとうございます。 英辞郎の黒枠とかは Tats_y さんが付けていたんですね。 これだけで読みやすさがずいぶん違いので助かってます! COBUILD の件ですが、辞書を見ながら検討してみました。 こんな感じはどうでしょうか。 ・[]で囲まれている部分を修飾 ・()で囲まれている部分を修飾 ・Example をイタリックとかで修飾  (Jamming が例を判別していたので。   判定できる材料があって可能ならば) ・=とその後を修飾(可能ならば) ・⇔とその後を修飾(可能ならば) ・see also とその後を修飾?(可能ならば) ・箇条書き記号、数字を少し目立たせる  または、項目の切り替わりの行間に少しスペースを入れる 標準の Dictionary (Oxford) を超えたいですね (^_^)p 発音記号はとても残念ですが、データがないなら仕方ないですね。 EPWING の方から直接ひっぱってくる方法とかが 何かあったらいいんですけどね。。
Tats_y
COBUILDの辞書にスタイルシートを適用してみました。
ひろし
DTONIC辞書の**旺文社国語辞典第9版を(ずいぶん前に普通の本屋で購入した旺文社国語辞典第九版CD-ROM付き) DTONIC Toolkit1.11→EBStudio1.70bフリーでEPWING化したものを EBDump1.28→ebd2html0.05経由で OUBUNSYA.html**** 本文HTMLファイル21.3MB (???は7BOOKDIR***と同じ) OUBUNSYA.ebs**** EBStudio定義ファイル 4KB (???は7BOOKDIR***と同じ) GaijiMap.xml**** 外字マップファイル 4KB Gaiji.xml**** 外字フォントファイル 4KB を書き出しました。 1ターミナルで実行してみたところ、次のような文字が表示され変換されませんでした。  (AUTOKANAを0にしても数字が少し違うだけで、このようなかんじでした。) user-no-iMac:project_templates user$ ruby epwing_conv.rb MyDictionary.xml epwing_conv.rb:25:in `iconv': "\202\261\202?\253\223T\202?\253\202?\350"... (Iconv::IllegalSequence) from epwing_conv.rb:25   2それとOUBUNSYA.htmlをサファリで開いてみたところ、単語の内容の先頭部分だけが文字化けしているようです。 は【破】 は ??ハ・やぶる・やぶれる (字義) ?やぶる。やぶれる。こわす。こわれる。さく。だめにする。形をくずす。そこなう。きずつける。「破壊・破棄・破裂・破滅・大破・打破・難破」 ?つぶす。物事がうまく行かなくなる。「破産・破綻(はたん)」 ?敵をうち負かす。敵に負ける。「撃破・論破(ろんぱ)」 3GaijiMap.xml****とGaiji.xml****は3行くらいで終わっています。 4他のEPWING辞書を変換する際のポイントのところの、 **EPWINGの辞書で使われている外字を、Unicodeキャラクタに変換するためのテーブルを用意する。の部分は、   どのようにすればよいのか、わかりませんでした。 **旺文社国語辞典第9版はとても気に入っていて、マックの**辞書アプリに入れて 辞書パネル(ポップアップ辞書**)が使えるようになれば、最高にうれしいです。 (ちなみに設定ファイルを編集して command+control+D のところをcontrol+Aにして使っている。) 自分ではとうてい解決できませんのでコメントを書きました。 なにか解決方法がわかれば教えてください。
Tats_y
おお、それはすばらしい! 情報ありがとうございます。みんな、もっとOS X標準の辞書に注目してもらいたいものですね。
cielavenir
どういうわけか<1F42>が入れ子になっていて while(!strncmp(p, “<1F42>”, 6)) p+=6; sed -e 's/<sub>//' -e 's/<\/sub>//' コメント欄の都合上全角で書き直します。実際には半角に直して下さい。
cielavenir
EDICT2 http://maximilk.web.fc2.com/index_ml.html#edict2 を変換しようとしたところ、どういうわけかが入れ子になっていて、ebd2htmlがうまく動きませんでした。 if (!strncmp(p, "→", 2)) p+=2; を、 while(!strncmp(p, "", 6)) p+=6; while(!strncmp(p, "→", 2))p+=2; としたところ、一応動くようにはなりました。ソースの文法自体は移植性があるのでgccでもコンパイルできるようです。 ただ、見出し一覧に癖があるため、Dictionary.appとは親和性が悪そうです。 また、d:title内にが入るためextract_index.plがエラーになります、 sed -e 's///' -e 's///' が必要でした。
cielavenir
Webster辞書の変換について、OSX上で完結させることが出来ましたので、 https://github.com/cielavenir/ebd2html-osx にまとめておきました。
dodosuke
初めまして。ここに記載されている情報を参考にして、研究社の英和活用大辞典の変換スクリプトを作ってみました。だいぶラフな作りですけれど。情報共有いただき、感謝です! https://github.com/dodosuke/EpwingToDict
Tats_y
>dodosukeさん コメントの承認遅れてすみません。 こういうマニアックな情報、ありがたいですね〜。お役に立てて、光栄です!