[aquaskk-dev 57] 数値変換のサポート

Back to archive index

Tomotaka SUWA t-suw****@users*****
2006年 6月 3日 (土) 11:40:24 JST


諏訪です。

数値変換をサポートしたコードを commit しました。

				- * -

■ NumericConverter クラスについて

数値変換をサポートする NumericConverter クラスを導入しています。このク
ラスには以下のメソッドがあります。


bool Setup(const CppCFString& query)
----------------------------------------------------------------------
引数の見出し語から連続した数値を見つけて vector に保存します。同時に、
数値部分を '#' に正規化してメンバー変数に保存します。連続した数値が全く
見つからなければ、false を返します。

例えば引数が「だい128かい」であれば、「だい#かい」に正規化して、vector に
は "128" が保存されます。


CppCFString OriginalKey() const;
----------------------------------------------------------------------
オリジナルの見出し語を返します。


CppCFString NormalizedKey() const;
----------------------------------------------------------------------
正規化された見出し語を返します。


CppCFString Apply(const CppCFString& candidate) const;
----------------------------------------------------------------------
数値変換を実行します。引数に含まれる #[0-59] 部分に、vector の内容を当
てはめていきます。

例えば引数が「第#2回」であれば、「第百二十八回」に変換します。


■ 数値変換の動作

AquaSKK の変換時の動作は以下のようになります。

1. 通常の見出し語で辞書検索

   → 結果 A を得る

2. 数値変換が有効で NumericConverter.Setup() が成功した場合、
   正規化した見出し語で辞書検索

   → 結果 B を得る
   → 結果 A の末尾に 結果 B を追加する

つまり基本は今まで通りで、数値変換はあくまでも「おまけ」として扱います。


■ 注意点・問題点

1. 数値再変換を実装していない

本家のマニュアルによると、数値再変換というのは以下のようなエントリがあ
る場合に、「/p125」で「東京都葛飾区」を得るもののようです。

     p# /#4/
     125 /東京都葛飾区/

AquaSKK ではこの仕様をサポートしません。

理由としては、検索の挙動は辞書の内容に依存すべきではないと考えるからで
す。非現実的ですが、仮に、

# /#4/#4/#4/#4/#4/#4/#4/

のようなエントリがあった場合には、無駄な検索を何度もすることになってし
まいます。

また、現在の SKK-JISYO.L で #4 を含むエントリは以下の一行のみです。

# /#1/#3/#2/#;number/#0/#4/#5/#9/

そして、この行の意味するところは結局のところ、「オリジナルの数値による
検索をしたい」ということになると思います。

AquaSKK では数値変換は「おまけ」であり、オリジナルの数値による検索は常
に行なわれます。よって、数値再変換を実装しなくてもこの要件を満たすこと
ができます。

2. 変換候補が重複する

今のところ、数値変換の結果を単純に足してるので、変換候補が重複する場合
があります。将来的には、重複した候補を取り除く予定です。

				- * -

ご意見・ご要望や、不具合・見落しなどがあれば指摘をお願いします。

-- Tomotaka SUWA



aquaskk-dev メーリングリストの案内
Back to archive index