データベース内の重複した住所を見つけるにはどうすればよいですか? または、フォームに入力するときにすでに人を止めたほうがよいですか? 早い方がいいと思いますか?
タイプミスや 2 つの登録を取得しようとする単純な試みを検出できるように、通りや郵便番号などを抽象化する良い方法はありますか? お気に入り:
Quellenstrasse 66/11
Quellenstr. 66a-11
私はドイツの住所を話している...ありがとう!
データベース内の重複した住所を見つけるにはどうすればよいですか? または、フォームに入力するときにすでに人を止めたほうがよいですか? 早い方がいいと思いますか?
タイプミスや 2 つの登録を取得しようとする単純な試みを検出できるように、通りや郵便番号などを抽象化する良い方法はありますか? お気に入り:
Quellenstrasse 66/11
Quellenstr. 66a-11
私はドイツの住所を話している...ありがとう!
GoogleGeoCodeAPIを使用できます
Wichは実際、両方の例で結果を出します。試してみてください。そうすれば、データベースに保存できる構造化された結果が得られます。ルックアップが失敗した場合は、別の方法でアドレスを書き込むようにユーザーに依頼してください。
早く人を止めることができれば、長期的には簡単になります!
データベーススキーマやデータ入力フォームにあまり詳しくないので、次のようなルートをお勧めします。
住所「part」ごとにデータベースに個別のフィールドがあります。たとえば、通り、都市、郵便番号、Länderなどです。
データ入力フォームを同様に分類します(例:通り、都市など)
上記の背後にある理由は、各部分に、わずかに変更されたアドレスをチェックするための独自の「ルール」がある可能性が高いためです(上記の「Quellenstrasse」->「Quellenstr。」、「66/11」->「66a-11」)したがって、検証コードは、各フィールドに表示される値がそれぞれのdbフィールドに存在するかどうかを確認できます。そうでない場合は、指定された各フィールドに変換ルールを適用し(たとえば、「str」にステミングされた「strasse」)、重複を再度チェックするクラスを作成できます。
明らかに、上記の方法には欠点があります。
データセットによっては遅くなる可能性があり、ユーザーを待たせます
ユーザーは、住所「Parts」を間違ったフィールドに入力することで回避しようとする可能性があります(都市に郵便番号を追加するなど)。しかし、経験から、上記のような単純なチェックを導入するだけでも、大部分のユーザーが既存のアドレスを入力できないようになることがわかりました。
基本的なチェックを行ったら、必要なdbアクセスの最適化、特定のスキーマに合わせてルールを調整するなどを検討できます。同様のテキストを作成するためのMySQLのmatch()関数もご覧ください。
ヨハネス:
@PConroy: これも私の最初の考えでした。これに関する興味深い部分は、住所のさまざまな部分の適切な変換ルールを見つけることです! 良い提案はありますか?
以前このタイプのプロジェクトに取り組んでいたとき、私たちのアプローチは、既存のアドレスのコーパス (150k 程度) を取得し、ドメインに最も一般的な変換を適用することでした (アイルランド、つまり「Dr」->「Drive」、「 Rd"->"Road" など)。残念ながら、当時はそのようなことに関する包括的なオンライン リソースがなかったので、電話帳などをチェックして、基本的に自分たちでリストを作成することになりました (スペースが限られているため、アドレスはさまざまな方法で省略されています! )。前述したように、いくつかの一般的なルールを追加するだけで、どれだけ多くの「重複」を検出できるかに驚かれることでしょう。
私は最近、住所略語のかなり包括的なリストを含むページに出くわしました。これはアメリカ英語ですが、ドイツでどれほど役立つかわかりません! 簡単なグーグルでいくつかのサイトが見つかりましたが、それらはスパムのようなニュースレターのサインアップトラップのようでした. それは私が英語でグーグル検索したことですが、ドイツ語の「ドイツ語の住所の略語」でもっと見ることができるかもしれません:)
別の可能な解決策 (信頼できる住所データが実際に必要であり、アカウントの重複を防ぐ方法として住所を使用するだけではない場合) は、サードパーティの Web サービスを使用して、ユーザーが提供する住所を標準化することです。
このように動作します。システムは、オンライン フォームを介してユーザーのアドレスを受け入れます。フォームは、ユーザーの住所をサードパーティの住所標準化 Web サービスに渡します。Web サービスは同じ住所を返しますが、データは個別の住所フィールドに標準化され、標準の略語と形式が適用されています。アプリケーションは、データベースにデータを保存しようとする前に、確認のためにこの標準化されたアドレスをユーザーに表示します。
すべてのユーザー アドレスが標準化ステップを経て、標準化されたアドレスのみが DB に保存される場合、リンゴとリンゴを比較しているため、重複レコードの検索は大幅に簡素化されます。
そのようなサードパーティ サービスの 1 つはGlobal Address の Interactive Serviceで、サポートされている国のリストにドイツが含まれており、サービスの仕組みを示すオンライン デモもあります (デモ リンクはその Web ページにあります)。
明らかに、このアプローチにはコスト面でのデメリットがあります。ただし、プラス面は次のとおりです。
免責事項: 私は Global Address で働いていないので、彼らのサービスを試したことはありません。実際にプレイできるオンラインデモがあるので、例として挙げているだけです。
データベースで重複する住所の検索を開始する前に、まず住所を標準形式で保存する必要があります。
ほとんどの国では、住所をフォーマットする標準的な方法があります。米国では、USPS CASS システムです: http://www.usps.com/ncsc/addressservices/certprograms/cass.htm
しかし、他のほとんどの国にも同様のサービス/標準があります。より国際的な形式については、このサイトを試してください: http://bitboost.com/ref/international-address-formats.html
これは、重複を見つけるのに役立つだけでなく、顧客に郵送する際の費用も節約できます (住所が標準形式の場合、郵便料金が安くなります)。
アプリケーションによっては、標準の住所レコードだけでなく「バニティ」住所レコードも保存したい場合があります。これにより、VIP 顧客を満足させることができます。「バニティ」アドレスは次のようなものです。
62 ウェスト ナインティ ファースト ストリート
アパートメント 4D
マンハッタン、ニューヨーク、NY 10001
標準の住所は次のようになります。
62 W 91ST ST APT 4D
ニューヨーク NY 10024-1414
見たいと思うかもしれないことの 1 つは、 Soundex検索です。これは、スペルミスや短縮形に非常に役立ちます。
ただし、これはデータベース内の検証ではないため、探しているものである場合とそうでない場合があります。
自分の質問に回答を追加するには:
別の方法として、ユーザーに携帯電話番号を尋ね、確認のためにテキスト メッセージを送信します。これにより、ほとんどの人が重複したアドレスをいじることがなくなります.
私は個人的な経験から話しています。(ピッグスバックに感謝!) 彼らは携帯電話による確認を導入しました。それは私が2つのアカウントを持つのを止めました!:-)
元の投稿はドイツの住所に固有のものであることは認識していますが、これは一般的な住所についての良い質問です。
アメリカには、配達ポイントバーコードと呼ばれる住所の一部があります。これは、単一の配送ポイントを識別する一意の 12 桁の番号であり、住所の一意の識別子として機能します。この値を取得するには、アドレス検証またはアドレス標準化 Web サービス API を使用する必要があります。これには、リクエストの量に応じて月額約 20 ドルかかる場合があります。
完全な開示のために、私は SmartyStreets の創設者です。LiveAddress と呼ばれるまさにそのような住所検証 Web サービス APIを提供しています。ご不明な点がございましたら、個人的にお問い合わせください。
多くの場合、データベースで制約を使用して、データがデータベースの意味で「一意」であることを確認します。
「同型」に関しては、あなたはあなた自身であると思います。つまり、コードを自分で書くことです。データベースにある場合は、トリガーを使用できます。
住所を DET BundesPost から提供された住所と照合して、重複を検出します。
DET はおそらくアメリカと同じように CD を販売しています。次に、Bundespost の住所との照合が問題になります。略語をポスト承認された略語などに置き換える長いプロセスです。
アメリカでも同じです。USPostOffice の住所と照合して (申し訳ありませんが、これらにはお金がかかるため、完全に開いていない CD は米国の郵便局から入手できます)。