[an error occurred while processing this directive]
Title
電子辞書 - 変換時の詳細

1.DDwinでの出力
そもそも、DDwinで閲覧できない辞書は出力できません。
確認はhttp://www.vector.co.jp/soft/win95/writing/se094709.htmlでお願いします。
これに載ってないからといって必ずしもできないとは言い切れませんが、私が聞いている範囲では広辞苑 第5版(EPWING版)はダメだそうです。電子ブック版は存じません。
さて、DDwinでの出力時に問題になるのは「外字」です。
各辞典での出力時の外字を一般的なパソコンで使える形式へ変換する外字テーブルをhenkan.txtに書いてあります。
広辞苑の外字テーブルは完成しておりませんので付属のものを改善された方は御一報下さい。

2.外字変換テーブル作成の方法
外字テーブル無しで出力した結果を正規表現「\[(z|h)....\]」で検索し、DDwinの表示(外字が表示できるように設定しておく。生物学辞典と広辞苑は何もしなくても表示できるようになっている筈。)と照合すればどういう字にどういうコードが割り当てられているか分かります。
これを一々見ながら外字テーブルを作成しました。
途中まで作成しかけの外字テーブルが既にある場合はそれを辞書個別設定で指定しておいて出力すればまだ外字テーブルに登録されていない外字だけ正規表現「\[(z|h)....\]」でひっかかる形式で出力されますので、それとDDwinの表示を上記と同様に照合すればいいでしょう。
漢字の読みは漢和辞典で調べました。
しかし、最新版のPDICにはEPWING外字変換テーブル編集機能があるので、これを利用なさるのが良いでしょう。
何故か私のところでは異常終了になるので私は使えません。(T_T)
これが使えるとかなり楽になるのに....。
どなたかこれで広辞苑外字テーブル作って下さい。m(_ _)m
もしもっと良い方法があればお教え下さい。
追伸:異常終了を報告したらすぐに作者さんが修正して下さいましたので現在は利用できます。

外字テーブルを作成していただける方は御連絡いただけると私の作業と重なることが無くなるので何という辞書のどこからどこまでの外字のテーブルを作成するのか事前に御一報下さい。

また、私が採用した変換ルールをここに記述しておきます。
外字テーブルを作成/公開される方はこのルールを採用していただけると嬉しいです。(こういうルールが既にあるからこれを採用しろってのも言っていただければ検討いたします。)

ルール
一般的なパソコンで表示できない文字・記号はもし複数の文字・記号の組み合わせで表現できる場合、
文字は
zA63E=(郷[中は白+ヒ|]+虫|)
zAB30=(虫+[八+一+八+皿|]―)
zA73D=(骨+[氏+一|]―)
zB36B=(くさがんむり+夷)
zA53A=(歹+[|田|田|(90度回転)]―)
などとします。
基本的に左辺が割り当てられているコードで右辺が出力時に置き換えられた後の文字です。
漢字の場合、読みを全角カタカナで記述(訓読みなら平仮名)し、(使用されている場所によって読みが違う場合があるのでデータ縮小の意味でもこれは無くしました)その後ろに半角かっこ()で囲んだ文字の組み合わせを記述します。
「+」がその前後の文字を結合して一文字を作れという意味です。
最後の方の「―」(シフトJIS 815C、JIS 213D)や「|」(シフトJIS 8162、JIS 2143)はそれぞれ「+」の前後の文字を横に並べる、縦に並べるという意味です。それぞれ「+」の左側の文字が 上/左 で右側の文字が 下/右 です。
(私はPDIC一行テキストまで変換した時点で「―」および「|」をテキストエディタの全角/半角変換機能を使って半角文字にしています。これで少しはデータ縮小できます。PDIC一行テキストになるまでは処理の都合上半角にはしない方が良いでしょう。)
縦や横に並べる文字がまたしても組み合わせでしか表現できない場合は半角かぎかっこ[]で囲んで文字を記述します。
[]の中に更に組み合わせを使う必要がある場合は{}更にその中は()以下[]{}()と続けていくようにします。
文字の組み合わせでなく部首の組み合わせでも構いませんし、部首と文字の組み合わせも可とします。
部首の場合はどこに位置するのか大体決まってくるので「―」や「|」を省略可とします。
この記述式を使用するものは記号なども()を付けます。
zB82D=( ̄+μ|)
zB828=(一+M|)
zB82B=(ー+M|)
zB77B=(v+♀|)
zB77A=(↑+♀|)
hA326=( ̄+k|)
hA27B=( ̄+g|)
hA325=(a+e―)
などと、文字と大差ありません。
また、ローマ数字は
zB823="XI"
zB67C="VIII"
zB821="XIII"
のようにアルファベットの組み合わせと半角かっこ()で囲んだ通常の数字を併記します。
データ縮小の一環でローマ数字部をダブルクォーテーションマークで囲うようにしました。
機種依存文字を使わないのは文字コード的に使いたくないのと、11以降には対応できないからです。
また、特殊な例として
zB777=(○+P◎)
zB77D=(○++◎)
zB82A=(◎[中黒])
zB77E=(→+↓+←+↑[円])
などがあり、一行目と二行目の◎は直前の文字が「+」の前の文字の中に入る、もしくは重なるという意味です。
三行目は◎の中の○は黒く塗りつぶされた●であることを意味します。
「○+●◎」としたほうが良いかもしれませんのでhenkan.txtではそのようにしておきます。
この例のように、これまでのルールに当てはまらない場合は半角かっこ()で囲んで説明を簡潔に記述します。
四行目は円状に並べます。
同様に三角形状なども定義できます。
また、これらに無いルールを作成した場合は御連絡いただければこちらに採用させていただく場合があります。
ここで注意点としては、コードの先頭で「h」なら半角で「z」なら全角であることです。
できるだけこれらの設定に従うようにお願いいたします。
データ縮小のため半角化を進めていきます。
コードの先頭がhでも「 ̄」の場合のように半角文字が無い場合はできるだけ主体になる文字(「hA27B= ̄+g|」なら「g」)は半角になるようにして下さい。
最後に、どうしても代わりになる文字が無い場合は「??」にでもしておきましょう。

3.Perlスクリプトによる変換
中を見て「なんでこんなことするの?」とお思いになる方が世界中に腐るほどいらっしゃるでしょうが、何故か私の環境では普通にコードを書いても結果が思い通りにならないので、頭をひねった結果こういうアルゴリズムになりました。
解説は何も必要無いでしょう。
コメントがスクリプト内にありますのでそちらを御覧下さい。
それと、何故スクリプトを複数に分けたかというと、何故か一つになってるときと結果が違ってしまい、これまた思い通りの結果が得られないから。 [an error occurred while processing this directive]
sign