類似検索の詳細(Ver5.34対応版)
HmJre.dllのVersion 5.00から、いわゆる「類似検索」に対応しています。類似検索は、あいまい検索のオプションで指定できる他に、正規表現パターンで、「(?#similar:数値)」のような形でも指定できます。
HmJre.dllの類似検索は、「レーベンシュタイン距離」という指標を使って類似度合いを推測します。レーベンシュタイン距離というのは、比較対象の2つの文字列を同じにするのに、「文字の挿入」、「文字の削除」、「文字の置き換え」の3種類の編集操作が何回必要かをカウントするやり方なります。その回数が少ないと類似度合いが高く、多いと類似度合いが低い(類似してない)という基準で類似度合いを判定します。
レーベンシュタイン距離の数を、別名として「ミスの数」と表現することもあります。
例外1
HmJre.dllではさらに、半角文字の場合に限り、「前後の文字の入れ替え」もレーベンシュタイン距離=1とカウントします。例えば「test」という単語の'e'と's'を入れ替えた「tset」は、レーベンシュタイン距離=1とカウントします。
例外2
HmJre.dllでは、比較する文字列の先頭の文字が違ってる場合は類似検索で一散ヒットしません。例えば"test"を検索した場合、"teest"や"tst"にはヒットしますが、先頭の't'が不一致な"est"にはヒットしません。検索処理を高速化するために、最低限先頭の1文字は同じでないといけないって条件になっています。
全角文字やユニコード文字の扱い
類似検索では、文字の数を数える時に、全角文字でも半角文字でもすべて1文字とカウントします。また、サロゲートペアを使ったユニコード文字(4バイトユニコードの文字)についても1文字とカウントします。
例えば"あいうえ"と"あいうエ"は、1文字違ってるとカウントします。(全角文字なので2バイト=2文字違うとはカウントしません)
類似度合いの最低限
類似検索を実行するのには、最低でも3文字の文字列が必要になります。2文字以下の場合は類似検索は実行されません。また、極端に長い文字列、例えば半角文字で250文字以上の文字列や全角文字で125文字以上の文字列は類似検索が実行されません。
正規表現の(?#similar:数値)で類似検索する時には、レーベンシュタイン距離は検索対象文字列の文字数の半分以下に制限されます。例えば「(?#similar:3)test」のように指定しても、レーベンシュタイン距離は3ではなく、"test"の4文字の半分である2に制限されます。
パーセンテージ指定とミスの上限
正規表現の(?#similar:数値)での数値には、例えば(?#similar:66%)のようなパーセンテージの指定も可能です。その場合、検索する単語が9文字なら、9文字の66%を引いた3文字がレーベンシュタイン距離扱いとなります。
正規表現の(?#similar:数値)での数値にパーセンテージを指定した場合、およびあいまい検索で類似検索を実行する場合、あいまい検索ダイアログの「ミスの上限」が適用されます。たとえは99文字の文字列について66%指定すると、そのまま単純計算するとレーベンシュタイン距離は33となってしまいますが、実際には「ミスの上限」に指定された値が上限となります。