7

私は、さまざまなソースからコンパイルされた大都市のデータベースを持っています。都市名に基づいて重複を簡単に見つける方法を見つけようとしています。単純な答えは、レーベンシュタイン距離を使用することです。ただし、都市の問題は、多くの場合、その国で共通の接頭辞と接尾辞が付けられていることです。

例えば:

ブールビル対ボッシャービル

これらはほぼ確実に異なる都市です。ただし、どちらも "ville" で終わる (そしてどちらも "Bo" で始まる) ため、レーベンシュタイン距離はかなり小さくなります。

*文字の位置を考慮して、単語の途中の文字を単語の末尾の文字よりも高く重み付けすることで、接頭辞と接尾辞の影響を最小限に抑える文字列距離アルゴリズムを探しています。*

おそらく自分で何かを書くことはできますが、適切なアルゴリズムをまだ誰も公開していないとは信じがたいでしょう。

4

2 に答える 2

3

これは、自然言語プログラミングのステミングに似ています。

そのフィールドでは、さらに分析を実行する前に単語の語幹が検出されます。

run => run
running => run
runs => run

(もちろん、rando not stem toのようなものrun。そのために、レンマタイザーを使用できます。しかし、私は脱線します...)。NLP のステミングは完璧とは言えませんが、非常にうまく機能します。

あなたの場合、Levenstein を適用する前に、都市名に固有のルールを使用して都市を抑止するとうまくいく場合があります。都市のステマーの実装については知りませんが、ルールは表面上はかなり単純に見えます。

接頭辞のリストと接尾辞のリスト (一般的な変形/タイプミスのスペルを含む) から始めて、レーベンシュタイン距離をチェックする前にそのような接頭辞/接尾辞を単純に削除することができます。

余談ですが、追加の住所情報 (住所や郵便番号など) がある場合は、住所固有のアルゴリズムに基づいて最適な一致を見つける、多くの国向けの住所正規化ソフトウェアが存在します。

于 2013-12-18T02:16:43.913 に答える