Levensteinのアルゴリズムは、文字列の挿入、削除、および置換の数に基づいています。
残念ながら、2文字の転置である一般的なつづりの間違いは考慮されていません(例:素晴らしくて不愉快な)。したがって、より堅牢なDamerau-Levensteinアルゴリズムを好むでしょう。
時間は比較される弦の長さとともに急激に増加するため、弦全体に距離を適用することは良い考えではないと思います。さらに悪いことに、ZIPなどの住所コンポーネントを削除すると、完全に異なる住所がよりよく一致する場合があります(オンラインレーベンシュタインカルキュレーターを使用して測定)。
1 someawesome street, anytown, F100 211 (reference)
1 someawesome st.,anytown (difference of 15, same address)
1 otherplaces street,anytown,F100211 (difference of 13, different ddress)
1 sameawesome street, othertown, CA98200 (difference of 13, different ddress)
anytown, 1 someawesome street (28 different same address)
anytown, F100 211, 1 someawesome street (37 different same address)
これらの効果は、ストリート名が短いほど悪化する傾向があります。
したがって、よりスマートなアルゴリズムを使用した方がよいでしょう。たとえば、Arthur RatzはCodeProjectでスマートテキスト比較のアルゴリズムを公開しました。アルゴリズムは距離を出力しません(確かにそれに応じて豊かにすることができます)が、テキストブロックの移動(たとえば、最初の例と最後の例の間の町と通りの間のスワップ)などのいくつかの難しいものを識別します。
そのようなアルゴリズムがあなたの場合にはあまりにも一般的である場合、実際にコンポーネントごとに作業し、比較可能なコンポーネントのみを比較する必要があります。世界のアドレス形式を解析する場合、これは簡単なことではありません。しかし、ターゲットがより具体的である場合、たとえば米国の場合、それは確かに実行可能です。たとえば、「street」、「st。」、「place」、「plazza」、およびそれらの通常のスペルミスは、アドレスのストリート部分を明らかにする可能性があり、その先頭部分は原則として番号になります。郵便番号は町を見つけるのに役立ちます。あるいは、住所の最後の要素である可能性があります。または、推測が気に入らない場合は、都市名のリストを検索できます(無料の郵便番号データベースのダウンロードなど)。その後、関連するコンポーネントのみにDamerau-Levenshteinを適用できます。