私もSmartyStreetsで働いていますが、私は開発者ではないので、「できない」「確実にできる方法がない」などの制約に縛られることはありません。実際、私が思いつくアイデアは常に可能であるとは限りませんが、私は問題解決者であり、解決策を見つける人であり、この特定の問題には絶対に解決策があります.
必要なものは次のとおりです: 少しの正規表現、スクリプト言語 (python、php、お好きなもの) の知識、およびアドレス検証ツールへのアクセス (これは、いつ正しくなったかを知るために必要です)。
それでは、例文から始めましょう。
1234 Apple Street New York, NY 10011 で会いましょう。
すべてのアドレスに始まりと終わりがあることを確認できます。(銀行に持っていけます!)
そのため、文字列内のアドレスの先頭を探す正規表現を実行すると、アドレスが始まる前のすべてを削除できます。これを行う正規表現は次のとおりです。
(^(.*(?=p\.?o\.? box|h\.?c\.?r\.? |c\.?m\.?r\.?)|^[^0-9]+))
これにより、次のものが返されます。
1234 Apple Street New York, NY 10011 それではお会いしましょう!
これで途中までは終わりましたが、残りの文字列をループする必要があります。もう 1 つの前提として、アドレスは 328 文字を超えることはありません (この数字は私が作ったものですが、お分かりいただけると思います。アドレスにも終わりが必要であり、 USPS アドレスの許容最大長。)
有効なアドレスが取得されるまで、アドレス文字列をループします。これを行うには、先頭から開始し、順列が追加されるたびに 1 語ずつ右に移動します。これは、住所検証サービスが役立つ場所です。住所がどこで終わるかわからないため、それを知る必要があるからです。そのため、文字列から生成した各順列 (左側から開始していることを思い出してください) が検証のために送信されます。2 語未満の有効な住所は存在しないため、そこから始めます。以下は、住所の例と検証結果の順列です (smartystreets.com の住所検索ボックスの住所行に入力して、各住所を試しています。
1234 アップル ==> 失敗
1234 アップルストリート ==> 失敗
1234 Apple Street New ==> 失敗
1234アップルストリートニューヨーク==>失敗
1234 Apple Street New York, NY ==> ビンゴ、有効な住所一致。繰り返し続ける必要はありません。
明らかに、これは有効なアドレスではありませんが、実際のアドレスで同じことを試すと、同じ結果が得られます。明らかに、これは文字列から有効なアドレスを抽出するための最も洗練された方法ではありませんが、確かに機能します。また、SmartyStreets ではクエリごとに最大 100 個のアドレスを送信できるため、アドレス文字列を最大 99 回並べ替えて、300 ミリ秒未満で結果を返すことができます。お分かりのように、これはすべてのアドレスで機能するわけではありませんが、アドレスがテキスト文字列内でどれほど不明瞭であるかに関係なく、大多数のアドレスを非常に簡単に処理できます。
それで、私たちはこれから始めました 1234 Apple Street New York, NY 10011 で会いましょう! そして、0.5 秒もかからずに、この1234 Apple Street New York, NY 10011-1000を思いつきました。
かっこいいでしょ?プログラマーでなくても、とても簡単に聞こえます。
実際のアドレスで試してみましょう:
4219 jon young orlando fl 32839 で会いましょう。
正規表現を適用すると、次のようになります。
4219 ジョン ヤング オーランド fl 32839 ではまた!
並べ替え、反復、検証:
4219 ジョン ==> 失敗
4219 ジョン・ヤング ==> 失敗
4219 ジョン・ヤング・オーランド ==> 失敗
4219 jon young orlando fl ==> ビンゴ、有効なアドレス一致。
