『かんな』の部屋
『かんな』はNECの今 昭さんらによって開発された、かな漢字変換方式の日
本語入力システムです。UNIX上で動作する『かんな』はフリーソフトウェアとし
て配布されています。『かんな』の特徴は…いろいろあります。詳しくは
NECの『かんな』のホームページを
見てください。
ちなみに、私は以下の理由で『かんな』を愛用しています。
- 変換クライアント間でユーザインターフェイスの設定ファイルが共通
- 文法情報などの変換エンジンの内部情報の変更が比較的容易
- 動作が非常に安定している(いつの間にか死んだりしない)
『かんな』を使い初めてはや四年、『かんな』で書いた文章はかなりの量になり
ます。その間に、cannaserverが死んだとか誤動作したという経験はないし、メー
リングリストで報告されたこともないし、まわりで聞いたこともないです。
UNIX版『かんな』の最新版
UNIX版『かんな』の最新版はCanna Ver3.5 β2です。NECの『かんな』の
ダウンロードページから入手可能です。
非公式パッチ
Canna Ver3.5 β2には、私と
早稲田大学の狩野さんが作成して
かんなメーリングリストに流している、変換効率を改善するための非公式
パッチがあります。
メーリングリストの内容は、NetNewsのニュースグループ
tnn.forum.cannaで読むこともできます。
- 狩野さんのパッチについて
- 狩野さんの文法パッチは、主に文節区切りの誤りのうち、文法ファイルや
辞書の修正で解決が可能なものを対象としています。
わかりやすい例を一つあげると、Canna32p2では「僕の部屋」と変換しよう
とすると、「僕のへや」と一文節になってしまいます。これは、格助詞の
「へ」と「や」が接続しているために発生した誤変換で、この種の誤変換
は文法ファイルの修正で直すことができます。
- 私のパッチについて
- 私が文法ファイルの誤りを修正することもありますが、この二、三年は問
題点の指摘だけで、修正は狩野さんにまかせることが多いです。この手の
問題については、彼の方が圧到的にセンスがいいですから。
私のパッチは、文法ファイルや辞書の修正でカバーしきれない問題点のう
ち、変換ロジックのささいな修正で直せるものを対象としています。
例えば、『かんな』の変換ロジックには、「胃(い)」など一文字の自立語
を含む文節、例えば「胃が」を変換して学習すると、その後に「い」の直
前で文節を切る癖があります。これは、後で紹介する私のパッチで直せます。
- 対象外の問題点
- 文法ファイルが誤っているのではなく、単に学習情報の問題で文節区切り
を間違えてしまう場合については、僕も狩野さんも手を付けていません。
例えば、「簡単に入る」と変換しようとして、「簡単には入ル」となるの
は、「入る(はいる)」と「入ル(いる)」の間の優先関係が学習されていな
いために起こる誤変換なので、特に対策は講じてません。
正しい位置で文節が切れているのに、選択された候補が正しくない場合に
ついても、『かんな』の変換ロジックの根本的な仕様の問題もあって手を
付けていません。
非公式パッチ一覧
- 統合パッチ
- これは、私がCanna 4983
(Canna nnnnはメーリングリストの記事番号です)で流したもので、
それまでに流れていた非公式パッチをまとめたものです。
具体的には、狩野さんの
Canna 4716、
Canna 4721の
文法パッチ(README)のうち
patches.510以外と、私のCanna 4789の
変換ロジックパッチ2を当てて、
dic/ideo/words/obsolete.dirのミスを直したものです。
ディレクトリがCanna35になっていたのをCanna35b2に直しました
(1997/10/20)
- 統合パッチ2(1998/4/13)
- 統合パッチを当てた時点で残っている問題のうち、比較的無難なものを修
正しています。具体的には
僕のパッチ(Canna 4997、
Canna 5003)と
狩野さんの指摘(Canna 5013、
Canna 5014、
Canna 5015)を反映しています。
このパッチには、○や×などの記号類の品詞を一般名詞(#T35)から単漢字
(#KJ)に振り直した、狩野さんのパッチ(patches.510)を取り消す修正が含
まれています。「まるは」と入力しても、「○は」が出てこなくて、僕は
それが不快なので戻してしまいました。
- 文節区切り学習(only experimental)
- version 3.2以降の『かんな』は、単語の優先度の学習と、文節長の学習の
二つの変換学習機能を持っていますが、実際には後者はまったく機能して
いません(Canna 4982、
Canna 5005)。
dic/ideo/wordsでこのパッチを
当てて、辞書をインストールし直すと文節長学習が効くようになります。
ただし、文節長学習は実装されて以来、まったく使われていなかった機能
なので、有効にすると何か問題が生じるかもしれません。
- ロジックパッチ
(only experimental)(1998/4/13)
- 『かんな』の文法ファイル(gram.goto)は2品詞間の関係しか記述
できないので、3つ以上付属語が連結したときに日本語としてあり得ない表
現が生じることがあります。従来は品詞を細分類することで、あり得ない
連結を消していましたが、このパッチを当てると、より直接的に連結を打
ち消すことができます。
統合パッチ2まで当ててから、
このパッチを当ててください。このパッチには文節区切り学習を有効にす
るパッチが含まれています。すでに当てていると、patchが文句を言うので
よしなにしてください。
このパッチを当てて半年ほど使っていますが、その間に二回cannaserverが
死にました。文節区切り学習と、接続を打つ消すロジックのどちらに問題
があるのかは、まだ調べてません。
『かんな』の変換ロジックについて
『かんな』の変換ロジックの解説書としては、三年前に僕がメーリングリストに
流したものがあります(Canna 2257)。
古くなったところもかなりありますが、基本的な変換ロジックは今でも同じなの
で、雰囲気はつかめると思います。
ちなみにこれは、僕が修士過程のサブテーマ(修士研究とは別に、M1の間に別の
講座で行う小さな研究)で、cannaserverに文章末処理を組み込んだときに書いた
報告書の一部です。
これは、Canna 2257の文中に登場する「変換ログを
取る仕掛け」を、Canna35b2に当たるように直したものです。
lib/RKの下でpatch < Canna35b2-stat1.patchと当てると、
/tmpの下にばりばり変換ログが出力されるようになります。
本当にやっつけで作ったもので、動作確認も真面目にやってません。当時、問い
合わせに応じて数人に配布したものは、やっつけ仕事が過ぎて、いんてるはいっ
てるとログが化けてましたが、さすがにそれは直しました。
cannaserverのデバッグ
Canna 2257を書くときには、cannaserverをデバッガ
で追いました。そのとき覚えたことを書いておきます。
いや、「はっかーずぱらだいす」
からリンクされたので、それっぽいことも書いとこーかなぁと思って。
- デバッグ情報入りのバイナリを作る
- lib/RK/のlibRK.aが変換ロジックに関係しているので、
適当にコンパイラに-gを渡して、libRK.aを作り直しま
す。libRK.aを作り直したら、server/でcannaserverを
makeします。ネットワークまわりを追う場合には、server/の下
も-g付きでコンパイルします。
- cannaserverに-dオプションを指定する
- 普通にcannaserverを起動するとdaemonになってしまっていろいろ面倒なの
で、-dを付けて起動します。-dを付けるとdaemonにな
らずに、標準出力にばりばりデバッグ情報を吐きながら起動します。
- cannaserverに-pオプションを指定する
- 普通に起動すると、すでに起動しているcannaserverとぶつかるので、
-p 1を付けて別のポート番号を指定します。クライアントを接続
するときには、:1を付けてサーバを指定します。例えば、
-cs unix:1とかね。cannakillで殺すときは
cannakill 1と、単に-pで指定した番号を指定します。
- 辞書ホームを指定する
- デバッグ中のcannaserverに辞書を壊されたりすると悲惨なので、適当なディ
レクトリに、$(cannaLibDir)/dicの中身をpermissionを変えずに
コピーして、そのディレクトリをcannaserverを起動するときにオプション
なしで指定します。
- RkwBgnBun()が漢字変換の入口です
- lib/RK/bun.cのRkwBgnBun()が漢字変換の入口です。最
近は、cannaserverから呼ばれるlibRK.aの関数のマニュアルが、
lib/RKに入っています。RkwBgnBun()のマニュアルは、
RkBgnBun.{jmn,man}です。
- calcSplit()が文節区切り位置を決めてます
- 文節区切り位置の決定は、nword.cで定義されている
calcSplit()がやってます。この辺のソースのコメントが、僕の
非公式パッチを当てると、適切な日本語になります^^;
藤枝のホームページへ
Last modified: 2006/02/14 15:29:40 JST