1

事業所の名前と住所を、重複している可能性のある別の事業所の名前と住所と比較しようとしています。問題は、名前と住所は人が手動で入力することが多いため、明らかにさまざまな違いがあることです。

ここではいくつかの例を示します。

セントvs.セントvs.ストリート

Ste。14 vs. Ste 14 vs. Suite 14 vs.#14

NE 39th Ave. vs. 39th Ave. vs. 39th Avenue vs. NE 39th Avenue

そして、かなり多くのことが可能です...

プログラムで正規表現を(Pythonを使用して)記述して、これらのわずかな違いをキャッチする名前とアドレスを比較したいと思います。実際にまったく同じように見えるアドレスをよく見かけますが、そうでないアドレスについては、正規表現で完全に拒否して同じではないと言ってほしくないのです。

同じことが地名にも当てはまることがあります。(実際の)例:

「エルドラド」対「エルドラドメキシカンレストラン」

「イーストアトランタコーヒーショップ」と「ジョーズイーストアトランタコーヒーショップ」

「VillageRestaurant」と「Baba'sVillage」<----確認したところ、どちらもまったく同じ住所と電話番号だったので、技術的には重複しています。

「DjrCleaningEnterprises」と「DJRCleaningEnterprisesInc」

これを実行する方法やコードのアイデアについて何か提案があれば、私は今のところ単純な正規表現の方法しか知らないので、それをいただければ幸いです。私はこれまでにこれほど大きな問題を抱えたことはありません...

ありがとう。

4

1 に答える 1

2

コメントの全員が述べているように、この問題は単一の正規表現にはあまり適していません。私は最近同じ分野でたくさんの仕事をしました、そして私はあなたがそれを100%完璧にすることは決してないだろうと言うことから始めます。それは「可能な限り良く」することの問題です。

アドレス比較コンポーネントに焦点を当てると、私が見つけた最良の戦略は次のとおりです。

  1. アドレスを個々の単語にトークン化し(したがって、奇妙な句読点などを無視します)、文字列に再度参加します。

  2. 最後から、国または州を(事前定義されたリストから)検索します-見つかった場合は削除して保存します。アドレスの終わりは最初よりも予測可能であるように思われるため、最後から検索します。

  3. (\d{4})最後から、 4が桁数である郵便番号または郵便番号を検索します。見つかった場合は削除して保存します。4を対象国の数字または数字に置き換えます。

  4. 最後から、郊外を検索します-見つかった場合は削除して保存します。事前定義されたハッシュマップ/辞書または郊外があり、非常に役立ちました。また、各一致を後で保存して、最適なものを選択できるようにすることもお勧めします(たとえば、郵便番号と郵便番号の一致を確認します)。おそらく、そのデータがあれば、郵便番号から郊外を検索することもできます。

  5. 最後は番地を探すことです!非常に多くの形式があるため、非常に困難です。

    1. これを使用して、ユニット/ショップ/スイート/サイト/ファクトリー/ロットコンポーネントを抽出します。

      (unit|unt|un|u|shop|shp|suite|ste|se|site|factory|fy|lot|lt)s?(\s|\.)?(\w?\d+\w?)

    2. これでレベル/フロアを抽出するために序数正規表現を生成しました:

      ((\w??\d+\w??|g|grnd|ground|lower|first|second|third|fourth|fifth|sixth|seventh|eighth|nineth|tenth|eleventh|twelth|1st|2st|3rd|4th|5th|6th|7th)(?:\s*|\.*|\s*)*(level|lvl|l|floor|flr|fl|f)

    3. 他のコンポーネントが削除されると、多くの場合、住所に似たものが残ります。私はそれを抽出するためにこれを使用しました:

      \d+(\s*-\s?\d*|\s*)?\D+(highway|freeway|alley|arcade|avenue|boulevard|bypass|chase|circle|circlet|circuit|circus|close|court|cove|crescent|drive|esplanade|fairway|garden|gardens|grove|lane|mall|mews|parade|parkway|place|plaza|promenade|quay|ridge|ridgeway|road|row|square|street|terrace|walk|way|Al|ar|ave|blvd|by|cc|ch|ci|cs|cct|cres|cr|cst|dip|dr|ed|ent|es|fry|fo|fmn|fwy|hwy|int|la|lp|mi|mr|pde|pwy|ps|pt|pro|qs|ra|rge|rd|rty|rw|sp|st|tce|tk|trl|tn|vs|wk|wy|cl|ct|cy|ce|cro|dl|el|gp|gns|gl|gm|gr|hts|lkt|me|pl|pa|rt|ri|sh|sq|tp|tr|vl|vw|dv|bvd)\b

言ったように、それは単純なプロセスではありません。上記のアルゴリズムでかなり良い結果を得ることができました。この方法で2つのアドレスを解析したら、コンポーネントを比較して、それらが同じであるかどうかを判断できます。

また、国ごとに異なる住所形式がどのように使用されているかにも注目してください。オーストラリアの住所を調べているので、少し変更する必要があるかもしれません。原則は同じですが、私は想像します。

うまくいけば、これがお役に立てば幸いです。

于 2012-08-17T03:51:08.023 に答える