大漢和の変換表

大漢和の変換表も、まだ1割には達していませんが、5%は超えたようです。

当初の予定から色々と必要事項が増えてしまったため、まだまだ時間が掛かりそうですが、多くの皆様の協力を求めております。



さて、現在のTSVを、どのようにC++の処理に組み込めば効率的か、を考えています。

必要になるのは、次の変換表。
・大漢和 検字番号 第一候補 → Unicode
・大漢和 検字番号 第二候補 → Unicode
・Unicode → 大漢和 検字番号

第一候補は原則として全ての文字にあるはずなので、一次元の配列とする。
第二候補は数が少ないから、{ 検字番号, Unicode } という形の構造体配列とする。
Unicode→検字番号の処理をどうするかは、かなり頭が痛い。


第一候補


まず表を作るにあたり、Unicodeは 0x10FFFF まであるので、21ビットが必要。
そこで、DWORD (unsigned long) を使うことになりますが、5万字×4バイトだと、単純計算で20キロバイトになる。
このサイズは仕方がないとしても、これ以上は増やしたくない。
その上で、異体字セレクタの情報を保存する必要がある。

簡単に思いつく方法は、32ビットを二つに分けて、一部を異体字セレクタの情報とするもので、この方法で考えてみた。

例えば、次のような感じで表を出力する。

DWORD tblMORO1_UNI[] =
{
/* +0/+5 +1/+6 +2/+7 +3/+8 +4/+9 */
0x4E00+V10, 0x4E01+V10, 0x4E02+V10, 0x20000+V10, // 00000
0x311C+V10, 0x4E03+V10, 0x4E04+V10, 0x4E05+V10, 0x20001 // 00005


};

異体字セレクタの情報は、あらかじめ、こんな感じで定義しておく。

const DWORD V10 = 0x10000000ul;
const DWORD V11 = 0x11000000ul;
const DWORD V12 = 0x12000000ul;


異体字セレクタ17から256まで、この方法なら余裕で管理可能。
漢字では異体字セレクタ1から16は使わないようなので、この範囲は想定せず、上位8ビットが0なら異体字セレクタが無いものとして扱う。


構造体にするとビットフィールドとか必要になりそうですが、単純に 0x00ffffff で AND すれば文字コード、0xff000000 で AND したあと >>24 とビットシフトすれば異体字セレクタの番号が簡単に得られるでしょう。


第二候補


第二候補は、構造体の配列にします。

例えば、こんな感じ。

MORO_LIST tblMORO2_UNI[] =
{
{ 3, 0x310E }, // 00003-0
{ 4, 0x311B }, // 00004-0
{ 8, 0x3112 }, // 00008-0




{ 0, 0 },
};


異体字セレクタが必要な場合は、同様に 0x????+V10 などとする。

構造体の定義は、こんな感じ

/*
1 - 49964 Morohashi
50001 - 50804 Appendix 1-804
60001 - 60514 Dashed 1-514
*/


typedef struct
{
WORD wMORO;
DWORD dwUCS;
} MORO_LIST;



Unicode→大漢和


Unicode→大漢和の変換表をどのようなスタイルにするかは、まだ決まっていませんが、かなり難しそうですね。

TSV中に異体字セレクタが無いか、またはU+E0100が付いたものを基本字として、Unicode番号→検字番号に変換する一次元の表を作ることになるのかもしれません。

異体字セレクタは後置なので、まずそのようにして出力し、異体字セレクタを受信した時点で前の出力をキャンセルして、違う変換表を使って再度出力し直す、ということになるでしょう。

異体字セレクタで違う字にする例も実際は少ないでしょうから、これも上にあるような構造体の配列にしたほうが良いかも知れません。

また、基本字の表を作るにあたり、複数ある中からどの字を優先させるか、も考える必要があります。
今のTSVでは、大漢和の中での重複について記載可能に設計してあるので、この情報を使えば、概ね問題なく変換表が作れるだろうと考えています。

2009/02/17(火)15:42 |Comments(0) |Trackback(0)

製造開発 | プログラミング | コンピュータ | [編集]

▲ページトップ

コメント

コメントの投稿

大漢和辭典 変換表 2月17日 報告 ホーム 大漢和辭典 変換表 2月16日 報告
トラックバック

この記事にトラックバックする(FC2ブログユーザー)
▲ページトップ

カレンダー

09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

プロフィール

miraicorp

Author:miraicorp
未来情報産業(株) 社長

主として「ICカードこれひとつ」や「文字、文字コード」処理、時々C++などについて記述しています。

twitterツイッター

管理用

検索フォーム

お知らせ

コメント等お気軽にどうぞ。

気に入ったら拍手して頂けると、今後の記事を書く際の参考や励みになります。

■お仕事を募集しております
ソフトウェア製造の仕事や、原稿執筆の仕事などを随時受け付けております。
お気軽にご相談下さい

■初めての方へ
こまごまと更新しているため、他にも関連する記事があるかもしれません。
「月別アーカイブ」「検索フォーム」「カテゴリ」などをお試し下さい。
トップページはこちら

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

広告枠

メール

メールはこちら

リンク

このブログをリンクに追加する

RSSリンクの表示

QRコード

QR