10

私は文字列の比較のために Double Metaphone と Caverphone2 を使用してきましたが、名前や住所などでうまく機能します (Caverphone2 が私には最適です)。ただし、電話番号、IP アドレス、クレジット カード番号などの数値に到達すると、あまりにも多くの誤検知が発生します。

そこで、 LuhnVerhoeffのアルゴリズムを調べましたが、それらは本質的に私が望むものを説明していますが、完全ではありません。それらは検証には優れているように見えますが、あいまい一致用に構築されているようには見えません。ファジー文字列アルゴリズムと同様のエンコードと比較の目的で、1 桁のエラーと隣接する 2 桁を含む転置エラーを検出できる Luhn と Verhoeff のように動作するものはありますか?

数値をエンコードしてから、それを他の 100,000 の数値と比較して、ほぼ同一の一致を見つけたいと思います。したがって、7041234 のようなものは転記エラーの可能性として 7041324 と一致しますが、4213704 のようなものは一致しません。

4

1 に答える 1

5

レーベンシュタイン とその 仲間たちは、特定の文字列や数字の間の距離を見つけるのに適しているかもしれません。ただし、スペル修正プログラムを作成する場合は、すべてのクエリで単語データベース全体を実行する必要はありません。

Peter Norvig は、 Google のスペル候補の背後にあるテクノロジの一部に基づいた、単純な「ファジー マッチング」スペル修正プログラムに関する非常に優れた記事を書きました。

辞書にNエントリがあり、平均的な単語に長さLがある場合、「ブルート フォース レーベンシュタイン」アプローチには時間がかかりO(N*L^3)ます。代わりに、Peter Norvig のアプローチでは、入力から特定の編集距離内にあるすべての単語を生成し、それらを辞書で調べます。ここO(L^k)で、k は考慮される最も遠い編集距離です。

于 2011-12-31T00:09:31.137 に答える