Ruby/CHISE

Ruby/CHISEとはなにか

Ruby/CHISEは、XEmacs CHISEにおけるChaon実装を
Rubyへ移植することを試みたモジュールである。

■Chaonモデルとはなにか

Chaonモデルとは、文字を符号ではなく属性によって扱う方法を意味する。

Ruby/CHISEではそれを拡張し、文字をオブジェクトとして扱っている。

■download & history

  • 2003-0110 テスト公開
  • 2003-0112 XString追加
  • 2003-0115 IDSの読み込み機能β版
  • 2003-0116 IDSの読み込み機能1.0
  • 2003-0117 XStringを廃止し、Stringに一本化。IDSの読み込み機能を強化。
  • 2003-0120 IDS_Treeの読み込み機能を追加。木構造の整合性checkを追加。
  • 2003-0130 IDSの逆変換機能などを追加。
  • 2003-0213 ruby-chise-20030213.tar.bz2
    名称をRuby/UTF-2000からRuby/CHISEへと変更。
  • 2003-0312 ruby-chise-20030312.tar.bz2
    様々なライブラリを追加。

CVS access

■install

展開して、make installする。

通常、/usr/local/lib/ruby/site_ruby/以下にinstallされる。


■config

src/chise.rb

DB_DIR = '/usr/local/lib/xemacs-21.4.10/i686-pc-linux/char-db'
必要に応じて変更する。

IDS_DB_DIR = '/home/eto/work/chise/ids/''
IDSのテキストファイルが置かれているディレクトリーを指す。(下記の字形分解・合成についてを参照)


■依存関係

下記のパッケージが必要。

一般にRubyのパッケージは RAAを使って探すことができる。


■Unicode

現状では、Ruby/CHISEに渡す文字コードはUTF-8のUnicodeにしておくと便利である。

将来的にはプログラム自体がSJIS、EUCなどで書かれていても 問題なく処理できるようにしたい。

WindowsでUnicodeを使えるエディターとして、Meadow + Mule-UCSが使える。

フリーのUnicode対応エディターとして「サクラエディタ」が使える。

他、Windows付属のメモ帳、見るだけであればIEが使える。

■付属libraryの説明

現時点では個々の詳細には立ち入りません。

  • ext/*
    libchiseを用いたextensionです。現在はプレアルファ版です。
  • network.rb, makegraph.rb, graphviz.rb, defkanji.rb, kanjilist.rb
    漢字の部品間の接続関係を計算します。Graphvizによるグラフ化も行います。
    ruby makegraph.rb
    

    Graphvizが必要です。min.svgが生成されます。

    ruby defkanji.rb
    

    漢字の定義を行います。

  • stroke.rb, kage.rb, kageserver.rb, csf.rb
    StrokeFontを用いるライブラリー群。 上地宏一氏によるKAGE System(現時点ではまだ非公開), 坂直純氏によるCSFという二つのStrokeFontが使えます。 別途フォントファイルが必要です。
    csf.rb中のCSF_FONT_DIR = 'd:/work/chise/csf/'を適切に設定してください。

    sglという独自のグラフィックライブラリーが必要ですが、これはまだ非公開です。

    ruby stroke.rb
    

    漢字のCodeTableが表れ、その中の文字を表示できます。

■使い方

■全体的な使い方

require 'chise'
include CHISE

str = "字" #Stringを拡張している。UTF8で与えること。
p str.ucs #とすると、その文字のucsの値が表示される
p str.total_strokes #画数が表示される
p str.chinese_gb2312 #などなど
str.char.alist.each {|a, v| #こんな感じで全属性を表示できる
  print a, ': ', v, "\n"
}
p str.inspect_x #Characterについての情報が表示される。
p str.inspect_all #持っている属性情報を全て表示する。

str = "文字列" #もちろん一文字でなく文字列も扱える。UTF-8で与える。
p str.inspect_x #各文字の情報が表示される。
p str.inspect_all #各文字の属性情報を全て表示する。

■字形分解・合成

Ruby/CHISEは、もともと字形分解・合成を扱うために作られたため、その機能が強化されている。

字形分解・合成は、現在はUnicodeにおけるIDS(Ideographic Description Structure)という仕様に準拠している。 U+2FF0〜U+2FFBで表わされるIDC(Ideographic Description Characters)によって合成方法を指定し、 これに続く二文字から三文字の文字を合成して表示する。


■IDSを使うための準備

下記のようにして、IDSのテキストファイル群を持ってくる。

% cd ~/work/chise (このディレクトリーは適宜変更する)
% cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/root login
password: (何も入れずにただもう一度return)

% cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/chise co -d ids ids

このようにすると、IDSのテキストファイル群を持ってくることができる。

その後、src/chise.rb
IDS_DB_DIR = '/home/eto/work/chise/ids/''
ここに、上記のIDSテキストファイル群を持ってきたディレクトリーを入れる。 必要であれば、再度make installする。 このようにして適切にIDS_DB_DIRを設定し、 ./tools/idsdbdumpall.rbを実行する。(かなり時間がかかる) これで、文字属性として新たにids, ids-decomposeが加わった。 それぞれ、IDSの文字列、それを再帰的に分解しきったものを意味する。


■字形分解

Stringに、decompose, decompose_allという二つのメソッドがある。 decomposeは一段階だけ分解する。decompose_allはそれを再帰的に行う。

p "字".decompose
p "字".decompose_all
p "榊".decompose
p "榊".decompose_all
p "終了".decompose
p "終了".decompose_all
p "鬱".decompose
p "鬱".decompose_all

最初の説明から、字形分解されて出てきた結果の文字列には、 IDSキャラクターが含まれているため、場合によってはうまく表示されない。 メモ帳だと表示できるだろう。


■字形合成

字形合成は、composeメソッドで行う。

p "#x2ff0;木木".compose

findメソッドで、ある部品が漢字の一部として含まれている漢字群を探すことができる。

p "日雲".find

ここでは、日と雲という部品が含まれている全漢字を出力する。

■説明

まじめなメソッドの説明を書く。(未完)

現時点では、test caseを見たほうが使い方はわかりやすいかもしれません。

class String
	char	先頭の文字をCharacterに変換したものを返す
→method_missingで、存在しないmethodを指定すると、自動的に先頭の文字を
Characterに変換してそれへのmethodとして呼ぶ。

class Character
	get	ある文字をgetする。(flyweightパターン)
	[]	ある属性をgetする。get_char_attributeも使える。
		またmethod_missingも使える。
	[]=	ある属性をputする。put_char_attributeも使える。
		またmethod_missingによる入力も使える。
存在しない属性を参照したときは、nilが返る。

■tools

詳しくはtools/READMEを参照。

  • dbdumpall.rb, char-dbのBDBファイル群の中身をテキストとして展開する。
  • idsdumpall.rb, IDSのテキストファイル群を読みこみ、BDB化する。再帰的に展開したids-decomposeも作る。
  • idscheckintegrity.rb, IDSの木構造の整合性をチェックする。
  • mkdbtarball.rb, UNIXで作ったBDBファイル群をWindowsに持っていくときに使う。 Windowsでtar.gzを展開するには、eoがおすすめ。
  • trim_bom.rb, Unicodeファイルを作ったときの先頭についてくるBOM(byte order mark)を削除する。

■悩みどころ

■Ruby/M17Nとの整合性

Ruby/M17Nとの整合性をどうとればいいか。

Ruby/M17Nブランチが本体に反映されるのは、ruby-1.8以降が予定されている。

ソースコード中のm17n.c, m17n.hが該当個所。 内部的にはUTF-8として扱えるので、それを拡張すればいいか? UTF-8の処理への追加という形で実装できる?

Kouichirou Eto, 2003 at eto.com