レーベンシュタイン距離アルゴリズムを使用して、可能な一致の辞書に対して単一の検索語を一致させようとしています。このアルゴリズムは、検索文字列を一致する文字列に変換するために必要な操作の数として表される距離を返します。上位「N」(たとえば10)の一致のランク付けされたパーセンテージリストに結果を表示したいと思います。
検索文字列は個々の辞書文字列よりも長くても短くてもよいため、距離をパーセンテージで表現する適切なロジックは何でしょうか。これは、各結果がクエリ文字列にどれだけ近いかを定性的に反映します。 % 完全一致を示します。
次のオプションを検討しました。
Q = query string
M = matched string
PM = Percentage Match
Option 1. PMi = (1 - Lev_distance(Q, Mi)/Strlen(Q)) * 100
Option 2. PMi = (1 - Lev_distance(Q, Mi)/max(Strlen(Q), strlen(Mi))) * 100
オプション 1 では、距離が検索文字列の長さよりも長く、一致文字列が長い場合、負のパーセンテージになる可能性があります。たとえば、クエリ「ABC」は「ABC Corp.」と一致します。負の一致率になります。
オプション 2 では、Mi のセット全体で一貫したパーセンテージが得られないようです。これは、各計算で異なる分母が使用される可能性があり、結果のパーセンテージ値が正規化されないためです。
私が考えることができる唯一の他の方法は、lev_distance といずれかの文字列の長さの比較を捨てることですが、代わりに上位 "N" の一致の比較距離を逆パーセンタイル ランク (100 パーセンタイル ランク) として提示することです。
何かご意見は?より良いアプローチはありますか?レーベンシュタイン距離はおそらくあいまい一致の最も一般的なアルゴリズムであり、これは非常に一般的な問題であるに違いないため、何かが欠けているに違いありません。