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