2020年8月23日日曜日

いまさらの電子辞書 #2

前回からの続き。
catdumpでCATALOGSファイルを作成するには、まず、テキストファイル形式のカタログファイルを作成する必要がある。
テキストファイルのカタログファイルは、このページに参考例がある
とはいえ、ただの例なので、自分の辞書CDがどのような構成になっているのかを知る必要がある。

普通にCDを見てみると、ファイルの構成はこのようになっている。
$ tree xxx
xxx
├── README.FreeBSD
├── README.LINUX
├── TRANS.TBL
└── chujiten
    ├── TRANS.TBL
    ├── data
    │   ├── TRANS.TBL
    │   └── honmon
    └── gaiji
        ├── TRANS.TBL
        ├── gai16f00
        ├── gai16h00
        ├── gai24f00
        ├── gai24h00
        ├── gai30f00
        ├── gai30h00
        ├── gai48f00
        └── gai48h00

3 directories, 15 files
(xxxはCDのマウントポイント)

"chujiten/data/honmon"が辞書データそのものだろう。
前回ビルドしたepwutil内にあるbookinfoで見てみると以下のように表示された。
$ bookinfo dict/chujiten/data/honmon 
; 電子ブック/EPWING 書籍管理情報 (generated by bookinfo v1.0)

対象書籍ファイル = dict/chujiten/data/honmon
情報所在ブロック = 1
書籍構成要素数 = 13
予備領域1(書籍種別/保護情報) = 2000H
  書籍種別: 英和辞典
  保護情報: 表示許可, 印刷許可, テキスト引用許可, 図版引用許可,
            カラー図版引用禁止, 動画引用禁止, 大量引用禁止
INDEX情報の取扱法 = 02H (INDEX情報は有効)

 ID 名称                                 先頭 サイズ INDEX情報 予備3/4
*00 本文                              34398  44941           00/0000
*91 前方一致表記形インデックス         4244   4236 .a....... 00/0000
*71 後方一致表記形インデックス            8   4236 .a....... 00/0000
*02 著作権表示                         7      1           00/0000
*01 メニュー                        26941      1           00/0000
 FF 複合検索                          ***   1969           00/0000
 FF 複合検索                          ***  33305           00/0000
 FF 複合検索                          ***  16261           00/0000
 FF 複合検索                          ***      5           00/0000
 FF 複合検索                          ***     23           00/0000
*05 前方一致表記形見出し        26946   3726           00/0000
*07 後方一致表記形見出し        30672   3726           00/0000
 D8 PCM音声                           79339  83391           00/0000

表示方法の初期値情報:
  有効無効フラグ = 01H (初期値情報は有効)
  一覧表表示 = 00H (直接本文表示)
  本文表示法 = 00H (検索結果を項目単位に連続して表示)

書籍ファイルサイズ = 318MB
マーク部分のサイズ = 119MB
文字のサイズと文字のバイト数が合わないので、ズレズレ表示になっているが、読めなくはない。
CDが壊れているかもと思っていたが、辞書データは使えるようだ。

このページの例を参考に、上記情報とディレクトリ構成を元に、catalogs.txtという名前で、以下のようなテキストファイルを作成した。
[Catalog]
FileName   = catalogs
Type       = EPWING1
Books      = 1

[Book]
BookType   = 2000
Title      = "新英和・和英中辞典"
Directory  = "chujiten"
InfoBlock  = 0001
ZenGaiji   = "gai16f00gai24f00gai30f00gai48f00"
HanGaiji   = "gai16h00gai24h00gai30h00gai48h00"
このテキストファイルは、UTF-8で書いている。
ソースコードやMakefileを読めば解るが、Unix系でのcatdumpは、EUC-JPを期待した作りになっている(WindowsではShift_JIS)。
そのためEUC−JPに変換しなければならない。
以下のようにして、変換する。
$ nkf -e catalogs.txt > catalogs.euc
一応、確認。
$ nkf -g catalogs.euc
EUC-JP
よしよし。

これを使ってバイナリのCATALOGSを作成する。
$ catdump -u catalogs.euc CATALOGS

これでカタログファイルはできたけど、相手はCDROMだ。書き込むことはできない。
壊れているとはいえ勝手にコピーしてしまうのも問題だ。
こういうときは、overlayマウント(unionマウントとも言う)してしまおう。

いくつか方法はあるが、以前からoverlayfsを使っているので、それを使う。
デフォルトではoverlayfs用のカーネルモジュールが読み込まれていないので、モジュールを読み込む。
$ sudo modprobe overlay 
つぎに、読み書きディレクトリ、作業ディレクトリ、マウントポイントを用意する。
$ mkdir rw wk dict
そして、overlayマウントする(xxxにCDがマウントされているものとする)。
$ sudo mount -t overlay overlay dict/ -o lowerdir=xxx,upperdir=rw,workdir=wk
これで、dict/を通してxxx/をアクセスでき、書き込みもできるようになる。
dict/へ作成したCATALOGSファイルをコピーする。
$ cp CATALOGS dict/
これで、多くの辞書アプリでアクセス可能になる。
試しに、eblookで見てみよう。以下のようにしてインストールする。
$ sudo apt install eblook
インストール後、overlayマウントしたマウントポイントを指定して起動する。
以下は、英単語"english"をひいたときの様子。
$ eblook dict/
eblook> list
 1. chujiten	新英和・和英中辞典
eblook> select 1
eblook> search english
 1. 37402:692	English
eblook> content english
Invalid entry number: english
eblook> content 1
<gaiji=ha123>En・glish /<gaiji=ha137><gaiji=ha22f>gl<gaiji=ha228><gaiji=ha22d>/→<gaiji=za339>
<gaiji=za34e><gaiji=za323>
1 イングランドの; 《俗に》 イギリスの,英国の.
2 イングランド人の; 《俗に》 イギリス人の,英国人の.
3 英語の.<reference>→<gaiji=za33a></reference=53513:1184>
<gaiji=za34e><gaiji=za321>
1 <gaiji=za32f> 英語.<reference>→<gaiji=za33a></reference=53513:1284>
2 [the 〜; 複数扱い]
a イングランド人; 《俗に》 イギリス人,英国人 (cf. the Scots,the Welsh,the Irish).
b 英軍.
<gaiji=ha126>古期英語 ‘of the race of Angles' の意; ⇒ENGLAND<gaiji=ha127>
<prev><reference><gaiji=ha123>En・gland /<gaiji=ha137><gaiji=ha22f>gl<gaiji=ha226>nd/→<gaiji=za339></reference=37401:1782></prev>
<next><reference><gaiji=ha155>nglish br<gaiji=ha168>akfast</reference=37402:1602></next>
eblook> quit
外字が<gaiji=xxxxx>のように表示されて読みにくいが、動作しているのはわかる。
GUIアプリのebviewで表示すると、発音記号その他外字も表示される。

外字の大きさが、文字と合っていないのが少し気になる…。
メニューから、ツール->オプションで、「設定項目」から「外部プログラム」を選んで、「音声再生プログラム」を"aplay %f"にすると、音声も再生できるようになる。

これでネットにつながらなくても、電子辞書が使える。

0 件のコメント:

コメントを投稿