Time-stamp: "Nov 14 2003"
Unix で使用されているテキストエディタ Emacs から電子辞書を引くことができます。
利点:
この電子辞書の使い方、設定方法を説明します。
ここで扱う電子辞書は CD-ROM の形態で販売されていたものです。
これを Red Hat Linux 7.3/Emacs21.2 の環境で使用します。 といっても実際には WindowsXP から putty というtelnet/sshソフトで Linux に接続して コンソールから使用しています。
辞書を HDD に入れます。 置き場所は /home/i/local/dict 以下にしました。
使用するソフトウェア 8 つを列挙します。
このうち、srd-fpw はインストールする必要がありません。 ほかの 7 つのファイルはすべてインストールする必要があります。
しかしパッケージを 7 つも個別にインストールするのは私には面倒でした。 そこでソフトウェアをすべて一括して自動的に ダウンロード・rpm 作成・インストールしてしまうスクリプトを作成しました。
edict-rpmbuild.sh.txt (2003-11-12)
RedHatLinux 7.1/7.2/7.3 で確認していますが、特に難しいことはしていないので RedHatLinux 9 でも動くんではないかと思います。
使用方法:
$ sh edict-rpmbuild.sh.txt 2>&1 | tee edict.log
スクリプトの実行が終わったらうまくインストールできなかったパッケージが表示されるはずです。 そのソフトに関しては、spec ファイルを修正して rpm 作り直しとか、rpm にせずにインストールとか いろいろ対策を講じてください。
rpm をインストールするとき /usr/bin とかにファイルをコピーするので root 権限が必要になります。 このスクリプトはその場合 sudo を使用して 一時的に root 権限を得ています。 そのため、スクリプトを動作させるユーザは sudo を使えるようにしておいてください。 設定方法は root になってから
# visudo
を実行して ユーザ名 ALL=NOPASSWD: ALL
と書き込めば OK です。
sudo の設定なんて面倒だという場合、別の方法として
このスクリプトを実行するとき root ユーザになってもうまく動作するはずです。
ユーザのホームディレクトリに .rpmmacros というファイルと rpmdir というディレクトリを自動的に作成します。これらは、rpm をインストールし終わった後そのまま残るので、気になる場合手動で削除してください。ちなみに作成した rpmパッケージは rpmdir/RPMS/i386/ の下に置かれています。
lookup パッケージを作成しているときに Select coding system (default euc-jp): と聞かれて とまります。単にエンターキーを押せば再び動きだします。 スクリプトの実行はとめたくなかったんですが、その方法がわかりませんでした。 ~/rpmdir/BUILD/lookup-1/texi/Makefile の中の emacs --batch のところで聞かれているとこまではわかったのですが。 Emacs20.7 (RedHatLinux7.2) だと止まらなかったので Emacs21 の問題のようです。
この CD-ROM の中身は元々 EPWING 形式なので、CD-ROM のファイルを HDD にコピーしてそのまま使用できます。ですがここではデータを削減してみようと思います。
squeeze コマンドを使用して ファイル容量を削減します。画像・音声データなどの項目が削除されます。 削除項目の指定もできますが、特に指定せずデフォルトで問題ありません。
squeeze コマンドのマニュアルはテキストファイルになっています。rpm でインストールした場合、 $ rpm -qf `which squeeze` として squeeze が何のパッケージに含まれているか調べ (epwutil とわかります)、次に $ rpm -ql epwutil としてどこにインストールされたか調べて、そのファイルを読めばよいです。
$ mkdir -p local/dict/dgx01/dgx01/data $ squeeze /mnt/cdrom/dgx01/data/honmon local/dict/dgx01/dgx01/data/honmon
catdump コマンドで catalogs ファイルを修正しました。これは外字の 16 ピクセル以外を削除しただけですのであまりファイルサイズ削減には役に立ちませんが。
$ cp -p /mnt/cdrom/catalogs local/dict/dgx01/ $ catdump catalogs > catalogs.txt $ vi catalogs.txt $ rm catalogs $ catdump -u catalogs.txt catalogs
これで OK です。 元のファイル容量は 330M バイトくらいでしたが、117M バイトに減りました。ebzip コマンドで圧縮すればさらに減らせますが、今回はおこないません。
工程は大辞林と同じです。元のファイル容量 550M バイトが 119M バイトになりました。
$ mkdir -p ~/local/dict/chujiten/chujiten/data $ squeeze /mnt/cdrom/chujiten/data/honmon ~/local/dict/chujiten/chujiten/data/honmon $ cp -pr /mnt/cdrom/chujiten/gaiji ~/local/dict/chujiten/ $ rm ~/local/dict/chujiten/gaiji/gai[234]* $ catdump catalogs >l; catalogs.txt $ vi catalogs.txt $ rm catalogs $ catdump -u catalogs.txt catalogs
catdump コマンドのところですが、今回の catalogs ファイルは少し複雑ですのでどこを修正したかわかる diff を載せときます。
--- catalogs.txt.org Sun Nov 9 22:34:10 2003 +++ catalogs.txt Sun Nov 9 22:38:22 2003 @@ -3,30 +3,15 @@ [Catalog] FileName = catalogs Type = EPWING2 -Books = 3 -BookSelect = 3 +Books = 1 +BookSelect = 1 [Book] BookType = 2002 (20:英和辞典, 02:EPWING2) Title = "研究社 新英和・和英中辞典" Directory = "CHUJITEN" InfoBlock = 0001 -ZenGaiji = "GAI16F00GAI24F00GAI30F00GAI48F00" -HanGaiji = "GAI16H00GAI24H00GAI30H00GAI48H00" +ZenGaiji = "GAI16F00" +HanGaiji = "GAI16H00" BookFile = "HONMON" Reserved1 = 000B0000 - -[Book] -BookType = F002 (F0:ストリーム, 02:EPWING2) -Title = "「新英和・和英中辞典」紹介" -Directory = "GUIDE" -StreamFile = "PLAY" -Reserved1 = 00100000 - -[Book] -BookType = F002 (F0:ストリーム, 02:EPWING2) -Title = "書籍選択" -Directory = "SCREEN" -StreamFile = "SELECT" -Reserved1 = 00100000 -
この CD-ROM は EPWING 形式ではなく独自形式なので、srd-fpw を使用して EPWING 形式に変換します。
EPWING 形式への変換は時間がかかるし失敗することもあるというので、CD-ROM からいったん iso イメージ形式にしておきます。
ランダムハウス英語辞典の CD-ROM をマウントする # mount /mnt/cdrom iso イメージ作成 # mkisofs -l -r -J -o randomhouse-eigo-jiten-1.5.iso /mnt/cdrom iso イメージをループバックマウントする # mount /home/cdr/randomhouse-eigo-jiten-1.5.iso /mnt/cdrom -t iso9660 -o loop 中身を見れるかチェック # ls /mnt/cdrom/ CD-ROM を取り出す # eject
上記の rpm スクリプトで唯一作成しなかった srd-fpw パッケージについて、 ここで取得します。
現在 srd-fpw 公式ページ で配付されている srd-fpw 1.1.5 は、以前出ていたランダムハウス英語辞典 (ver 1.1b) に対応しています。しかし私が 2003年11月に購入した同辞典 WindowsXP対応版 (ver1.50) では 不具合があるようです。
そこで CVS から最新版を取得します。
$ cvs -d :pserver:guest@openlab.ring.gr.jp:/circus/cvsroot login guest $ cvs -d :pserver:guest@openlab.ring.gr.jp:/circus/cvsroot co edict-devel/srd-fpw
まず srd-fpw.conf を書き換えます。私はここで画像と音声を含まないように 設定しました。具体的には $multimedia_flag と $img_flag と $snd_flag の行をコメントにしました。
$ cd edict-devel/src-fpw $ vi srd-fpw.conf
ディレクトリを作成して、そこに CD-ROM のファイルをコピーします。
$ mkdir -p source/DATA $ cd source/DATA/ $ cabextract /mnt/cdrom/Data1.cab $ mv Readme.txt ../ $ cd ../..
データを変換します。ここは CPU が VIA C3, 533MHz で 2時間10分ほど かかったようです。エラーもなく完了していました。
$ fpwmake 2>&1 | tee srd.log
カタログファイルも作成してインストールします。
$ fpwmake catalogs 2>&1 | tee -a srd.log $ fpwmake install INSTALLDIR=/home/i/local/dict 2>&1 | tee -a srd.log
lookup のマニュアル (info 形式) を読んで書いてあるとおり設定すると、 Emacs で表示できます。具体的には私の設定は以下のとおりです。 使い方は、C-xC-f で出てくる検索語句欄に入力するだけ。
;;;; lookup ;;;; (autoload 'lookup "lookup" nil t) (autoload 'lookup-region "lookup" nil t) (autoload 'lookup-pattern "lookup" nil t) (define-key ctl-x-map "l" 'lookup) (define-key ctl-x-map "y" 'lookup-region) (define-key ctl-x-map "\C-y" 'lookup-pattern) (setq lookup-search-agents '( (ndeb "~/local/dict/srd-fpw") (ndeb "~/local/dict/chujiten") (ndeb "~/local/dict/dgx01") )) (setq lookup-default-dictionary-options '((:stemmer . stem-english))) (setq lookup-use-kakasi nil)
Emacs21 + X Window System だと上記の設定だけで外字も表示されます。
画像の中の、発音記号の一部などが外字です。
しかしコンソールで検索すると外字が表示されず以下のようになります。
UNIX [j<gaiji=ha343><gaiji=ha452>niks] ━n. <gaiji=za260>コンピュータ<gaiji=za261>ユニックス:標準 OS の一つ;ワークス テーションを中心にパーソナルコンピュータからメーンフレームにわたる広い範 囲の機種で使用されている. [Uniplexed Information and Computing System]
コンソールで外字を表示するために appendix という仕組みが用意されています。 外字の代わりに表示される 代替文字列 を指定できるというものです。
いくつかの辞書については appendix データ が用意されています。
私の場合、大辞林は既にあるものがそのまま使えました。
英和・和英中辞典もそのまま使用できるものがありましたが、もっと読みやすくできるのではないかと思って、このデータを元に少し改変したものを使用しています。
ランダムハウス英語辞典のものはないので私が作成しました。
作成方法は、EBライブラリのページにある ebfont と ebappendix のドキュメントを参考にしてください。
いずれのデータも全然検証していないので完成度が低いですが、置いておきます。
あとは上記で示した Emacs の設定ファイルに appendix ファイルの場所も指定すれば動作します。
(setq lookup-search-agents '( ;(ndeb "~/local/dict/EDICT") (ndeb "~/local/dict/srd-fpw" :appendix "~/local/dict/appendix/srd-fpw") (ndeb "~/local/dict/chujiten" :appendix "~/local/dict/appendix/chujiten") (ndeb "~/local/dict/dgx01" :appendix "~/local/dict/appendix/daijirin-2.0") (ndeb "~/local/dict/mypaedia") ))
まず、辞書の catalogs というファイルのあるディレクトリで ebinfo コマンドを実行します。 こんなふうに表示されます。
disc type: EPWING character code: JIS X 0208 the number of subbooks: 1 subbook 1: title: ランダムハウス英語辞典 directory: srd-fpw search methods: word endword menu copyright font sizes: 16 narrow font characters: 0xa121 -- 0xa565 wide font characters: 0xa121 -- 0xa271
表示された「directory:」の名前のみを catalogs.app というファイルをどこか作業用の ディレクトリに作成して書きます。私の場合「srd-fpw」だけ。
次に副本の app ファイルを同じディレクトリに作成します。 先ほどの名前をファイル名にするので srd-fpw.app というファイルになります。 その中身はマニュアル で書かれているように手書きする必要があります。
まず文字コードを指定します。
次に、先ほどの ebinfo の出力のうち、(narrow|wide) font characters の部分を書く。
begin narraw range-start 0xa121 range-end 0xa565 0xa121 'Λ end begin wide range-start 0xa121 range-end 0xa271 end
あとは 0xa121 の行のように、外字一文字ごとに代替文字列を指定します。
外字の字形を確認するため、まず外字を画像として取り出し、それを web ブラウザで表示します。 (xbm 画像は mozilla firebird 0.7, InternetExploror6.0 では表示できました)
$ ebfont ~/local/dict/srd-fpw
とすると、srd-fpw/16/ の下に narrow と wide というディレクトリが作成され、その下に外字一文字につき一つの画像ファイルが作成されます。
それを webブラウザで見るために ebfonthtml.pl という自作のスクリプトを使用して 以下のように HTML を生成します。
$ perl ebfonthtml.pl srd-fpw/16/narrow/* > narrow.html $ perl ebfonthtml.pl srd-fpw/16/wide/* > wide.html
あとは、画像ページを webブラウザで表示させ、文字コード表 (私が使ったのは 自分のページ) と見比べて似ている文字を探して指定。
catalogs.app と 副本.app (ここでは srd-fpw.app) のあるディレクトリで
$ ebappendixと実行すると appendix 関連ファイルが生成されます。