libchise化の問題

守岡知彦 / MORIOKA Tomohiko tomo @ kanji.zinbun.kyoto-u.ac.jp
2004年 7月 8日 (木) 17:42:15 JST


守岡です。

公約がなかなか実現できてなくてすみません。

とりあえず謝っときます。(^_^;;

>>>>> In [chise-ja : No.00379] 
>>>>>	"江渡さん" = Kouichirou Eto <ml2004 @ eto.com> wrote:

江渡さん> Ruby/CHISEのlibchise化をすすめているのですが、その過程で気付
江渡さん> いたことをメモしておきます。

江渡さん> Ruby/CHISEでは様々に高度な機能を実現するために、どうしても
江渡さん> libchiseだけでは機能が足りず、その部分をRubyによるハイブリッ
江渡さん> ド化でおぎなっています。具体的にはまず、libchiseと同等な動作
江渡さん> をするPureRuby版(Ruby/BDBを使用)のlibchise_rを作り、追加機能
江渡さん> はここに実装しました。その上でC言語によるextension、
江渡さん> libchise_cを作り、両者を中間層で統合するという戦略を取ってい
江渡さん> ます。libchise_cを使用している場合でも、必要な機能が無かった
江渡さん> 場合はlibchise_rにfallbackすることによって、全ての機能が動作
江渡さん> するようになってます。libchise_rだけでも完全に動作します。

江渡さん> これでなんとか動くようになったのですが、この戦略は大変面倒で
江渡さん> あり、かつメンテにコストがかかりそうです。かといって、
江渡さん> libchiseに機能を全て追加してしまうのがいいのかどうか、よくわ
江渡さん> かりません。さてどうするべきだろうか、というのがこのメールの
江渡さん> 主旨です。

御迷惑お掛けしてます。

江渡さん> 具体的に追加した機能を並べてみます。まず、each_ccs_name、使
江渡さん> 用可能なCCS の一覧がない。これはeach_feature_nameの逆写像な
江渡さん> ので本来はeach_feature_nameを用いて実現可能なはずですが…。

chise_ds_foreach_char_feature_name では余分に出てくるのが面倒ないしは
CCS の判定が面倒ということでしょうか? char-feature が CCS かどうかの
述語があれば良いのかな?

江渡さん> CCSに対するeachがない。例えばJIS X 0208集合に含まれる全文字
江渡さん> といった検索をする場合があり、そのために使いました。

chise_feature_foreach_char_with_value などでは継承がサポートされてなく
て不便ということでしょうか?


江渡さん> IDSから文字を検索するためにcharacter/by_idsという新しい
江渡さん> directoryを作りました。定義からするとby_featureでもいいよう
江渡さん> な気がしますが、実際にはcode_pointからchar_idへのmappingだけ
江渡さん> に限っているため、文字列からchar_idへの対応をするdbは別の
江渡さん> treeにしたほうがいいだろうと判断しました。(by_idsでの検索が
江渡さん> 出来るのなら、by_nameによる検索などが出来ても良さそうな気も
江渡さん> してくるが…。)

現行の directory 構成に変更した時、単一の data source において char-id
の体系を単一にすることにしたので、by_feature/ に CHISE 的文字列をキー
にした逆引表があっても良いと思います。また、by_name や
by_sound @ ja%2Fon%2Fkan などを増やしたくなったり、あるいは、自動的に逆
引表を生成したりする時のことを考えれば、character/by_ids よりは
by_feature/ids が良いような気がします。


江渡さん> libchiseからは外れるかもしれませんが、やはりメタ文字DBが欲し
江渡さん> いです。現在はCCS間の継承関係はアドホックにライブラリに埋め
江渡さん> 込んでますが、本来はそのような情報は外に出したい。
江渡さん> chise-db/characterと並列に、ccsというdirectoryを作り、そこに
江渡さん> 置くのでどうでしょうか。前回この話が出たときは、データ構造を
江渡さん> どうするかの話でストップしたのでしたっけ。

<chise-ja:00242> によれば

・文字素性 → 属性値

	$CHISE-ROOT/feature/property/<name>

	但し、<name> は属性名


	例:文字素性属性 :type

	/usr/local/lib/chise/db/feature/property/type


・属性値 → 文字素性

	$CHISE-ROOT/feature/by-property/<name>

	但し、<name> は属性名


	例:final-byte から CCS 名への対照表

	/usr/local/lib/chise/db/feature/by-property/ccs-final-byte

;; foo-bar はその後 foo_bar に変えたので、by_property になる


   また、alias に関しては、素性属性 :true-name を用いて解決しようと思っ
   ています。例えば、XEmacs CHISE で

	(define-charset-alias 'ideograph-gt '=gt)

   とした場合、文字素性 ideograph-gt の属性 :true-name に =gt という値
   が入ることとします。これにより、属性 :true-name の有無で alias かど
   うかが判り、alias の場合には :true-name の値によって本名を調べるこ
   とができます。

ということで、directory 構成はとりあえず決めてた模様です。

形式は plain text でしょうか?


江渡さん> また上地さんからも話がありましたが、やはりchise-dbが独立して
江渡さん> 配付されているとうれしい。BDBファイルで配付するという案もあ
江渡さん> りますが、バイナリの互換性は無いのですよね。データ構造をどう
江渡さん> するかは悩み所ですが、当面はS式のままになるのかなと。

ちゃんと確認してないんですが、endian が違うはずの x86 Linux の BDB ファ
イルが Mac OS X で読めたような気もするので、実は portable なのではない
かという疑問があるのですがちゃんと調べてません。ご存知の方がいらっしゃ
いましたら是非情報をお寄せくださいませ。

とはいえ、配布用データ形式についてはちゃんと考えたいですね。XML 版の話
が止まってるので、現状では S 式しかないですね。一応、現在、XEmacs
CHISE 附属の文字定義ファイルは従来とは異なり Unicode の範囲内の UTF-8 
に収まるように符号化している(utf-8-mcs-er を使っている)ので、大域的
情報交換はできますが。

-- 
===『幾千億の分子に分かれても ========================================
     決して忘れない。    
     この宇宙が終るまで』              守岡 知彦 (MORIOKA Tomohiko)
====================== Email: <tomo @ kanji.zinbun.kyoto-u.ac.jp> ======





More information about the CHISE-ja mailing list