libchise解説

Kouichirou Eto 2004 @ eto.com
2004年 6月 11日 (金) 14:32:59 JST


江渡です。

libchiseを使ってみようと思ったのですが、Cygwinではconfigureに失敗しました。
 checking how to run the C++ preprocessor... /lib/cpp
 configure: error: C++ preprocessor "/lib/cpp" fails sanity check
 See `config.log' for more details.
とのことですが、理由はまだよくわかっていません。

また、それとは別にlibchiseの使い方を解読してみましたので、その結果を
簡単に文章としてまとめてみました。間違いなどありましたら御指摘下さい。

----------------------------------------------------------------------
* the hitchhiker's guide to the CHISE Library

** DataSource関連
- CHISE_DS_open(type, location, subtype, modemask) openする。
type=>CHISE_DS_Berkeley_DB, subtype=>0, modemask=>0755
というのが定番で、実質的にはlocationを指定するだけ。

- CHISE_DS_close(ds)
closeする。

- chise_ds_foreach_char_feature_name(ds, callback(ds, name))
素性の一覧に対するiterator.  directoryをなめて、それぞれのファイル名毎
にcallbackする。ファイル名が%を含む場合はそれをdecodeしている。
CCSの一覧に対するiteratorはいまのところ存在してない。いらない?

** 値
- CHISE_Char_ID
いわゆるchar_id。int。

- CHISE_Value
いわゆる素性の値。BDBが返す値(DBT)そのまま。

- chise_value_size(s)
- chise_value_data(s)
- chise_value_to_c_string(s)
などによって値を取り出す。dataとto_c_stringは同じものを指している。

** Feature_Table関連
featureとは素性のこと。

- chise_ds_get_feature(ds, name)
dsからFeature_Tableをgetする。

- chise_feature_setup_db(feature, writable)
実際にBDBをopenしている。書込み可能かどうかを指定する。
下記のset, loadなどは内部的にこれを呼んでいるため、明示的に呼ぶ必要はない。

- chise_feature_sync(feature)
bdbをcloseする。つまりHDDに書込みをする。

- chise_char_set_feature_value(cid, feature, value)
char_idに素性をputする。

- chise_char_load_feature_value(cid, feature, valdatum)
char_idの素性をgetする。

素性をgetするときは、このようにする。
 ft = chise_ds_get_feature(ds, "ideographic-structure")
 chise_char_load_feature_value(cid, ft, valdatum)
valdatumに値が返ってくる。値を取り出すにはchise_value_dataを使う。

- chise_ds_load_char_feature_value(ds, cid, name, valdatum)
これはそのshortcutで、上記と同等の操作をする。

- chise_char_gets_feature_value(cid, feature, dst, size)
load_feature_valueの発展形で、valdatumから値を取り出してc stringにする
ところまでやってくれる。dstにはc stringがはいる。

- chise_feature_foreach_char_with_value(feature, callback(cid, feature, valdatum))
あるFeatureTableが保持するchar_idの一覧に対するIterator.

** CCS Table関連
CCSは、Coded Character Setの略である。いわゆる文字集合。

- chise_ds_get_ccs(ds, name)
CCS Tableをgetする。

- chise_ccs_setup_db(ccs, writable)
BDBをopenする。下記set, decodeが内部的に呼ぶため、明示的に呼ぶ必要はない。

- chise_ccs_sync(ccs)
bdbをcloseする。つまりHDDに書込みをする。

- chise_ccs_decode(ccs, code_point)
code_pointに対応するchar_idをgetする。返り値がchar_id(int)。

ある文字集合からchar_idを取り出すにはこのようにする。
 ccs = chise_ds_get_ccs(ds, "=daikanwa")
 char_id = chise_ccs_decode(ccs, 364)

- chise_ds_decode_char(ds, "daikanwa", 364)
これはそのshortcut。

- chise_ccs_set_decoded_char(ccs, code_point, cid)
あるccsのcode_pointに、cidをsetする。

* libchise内部解説

- chise_ds_open_feature_table
get_feature_tableはcacheするだけで、実際にはここでFeature_Tableを生成する。

- chise_ds_open_ccs_table(ds, ccs)
同様に、ccsにおいてもこちらで実際にCCS_Tableを作っている。

** Attribute_Table
Feature_Table, CCS_TableにおけるBDB関係の処理を共通化するために、
内部的にはAttribute_Tableを使っている。

- CHISE_Attribute_Table_open(db_dir, category, key_type, name, real_subtype, accessmask, modemask)
ここで、実際にBDBをopenしている。

- CHISE_Attribute_Table_close(db)
BDBをcloseする。

- chise_attribute_table_get(db, key, valdatum)
BDBから値をgetする。

- chise_attribute_table_put(db, key, value)
BDBに値をputする。

** 値

- chise_format_char_id(cid, dest, len)
char_id(int)から、BDBにおける一文字を表す形式を生成する。
これはUTF-8でencodeし先頭に?がつく文字列で、この形式をUTF-8-MCSと呼ぶ。
正確には、コントロールcharacterや、いくつかの特殊characterは、
\でエスケープしなければならない。

- chise_char_id_parse_c_string (key_str, key_len)
上記のUTF-8-MCS形式の文字列をparseして、char_id(int)にする。

** name.c
DataSourceはそれぞれのTableをhashに保持している。
name.cにおいて、hash tableを実装している。

====
by Kouichirou Eto





More information about the CHISE-ja mailing list