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