[解決済み] 自由形式の住所/郵便番号をテキストから解析し、コンポーネントに変換する方法
質問
私たちは主に米国でビジネスを展開しており、すべての住所欄を1つのテキストエリアにまとめることで、ユーザーエクスペリエンスを向上させようとしています。しかし、いくつかの問題があります。
- ユーザーが入力する住所は、正しいか標準的な形式でない可能性があります。
- クレジットカード決済を行うには、住所を部分的(通り、市、州など)に分割する必要がある
- ユーザーは住所以外も入力可能(名前や会社が一緒の場合など)
- Googleでも可能だが、利用規約やクエリーの制限があるため、特に予算が限られている場合は、厳しい。
どうやら、これはよくある質問のようです。
- アドレスをパースするPHPスクリプト?
- フリーフォーマットのアドレスをパースしてDataBaseに保存するには?
- Java 郵便番号パーサー
- 住所構成要素を抽出する、より効率的な方法
- アンドロイドの連絡先画面に、ストリート、シティ、ジップなど、あらかじめ入力された郵便物の住所を表示するにはどうすればよいですか?
- PHPの正規表現 USアドレス
住所を周りのテキストから分離して、バラバラにする方法はありますか?アドレスをパースするための正規表現はありますか?
どのように解決するのですか?
住所確認の会社に勤めていた頃、この質問をよく見かけました。同じ質問で検索しているプログラマーがよりアクセスしやすくなるように、ここにその答えを掲載します。私がいた会社では、何十億もの住所を処理しており、その過程で多くのことを学びました。
まず、住所について少し理解する必要があります。
アドレスは 正規
つまり、正規表現はアウトなのです。非常に特殊な形式のアドレスにマッチする単純な正規表現から、こんなのまでありますね。
/\s+(\d{2,5}\s+)(?![a|p]m\b)(([a-zA-Z|\s+]{1,5}){1,2})?([\s|,|.]+)?(([a-zA-Z|\s+]{1,30}){1,4})(court|ct|street|st|drive|dr|lane|ln|road|rd|blvd)([\s|,|.|;]+)?(([a-zA-Z|\s+]{1,30}){1,2})([\s|,|.]+)? \b(AK|AL|AR|AZ|CA|CO|CT|DC|DE|FL|GA|GU|HI|IA|ID|IL|INKS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NC|ND|NE|NH|NJ|NM|NV|NY|OHOK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VI|VT|WA|WI|V|WY)([\s|,|.] +)?(\s +d{5})?([\s|,|.]+)/i
から これ 900行以上のクラスのファイルが、超巨大な正規表現をその場で生成して、さらにマッチングさせるというものです。これらはお勧めしない(例えば。 上の正規表現をいじると、こんな感じになります。 ). これを動作させるための簡単な魔法の公式はないのです。理論的には、そして によって 理論的には、正規表現でアドレスを照合することは不可能です。
USPSパブリケーション28 は、可能な限り多くの形式の住所と、そのキーワードやバリエーションを記録しています。最悪なのは、住所があいまいなことです。単語は複数の意味を持ち、("St" は "Saint" にも "Street" にもなります) また、間違いなく彼らが発明したと思われる単語も存在します。("Stravenue"が通りの接尾語であることを誰が知っていましたか?)
住所を本当に理解するコードが必要で、もしそのコードが存在するならば、それは企業秘密です。しかし、本当にそのことに興味があるのなら、自分で作ることもできるだろう。
アドレスは意外な形と大きさ
ここでは、いくつかの工夫された(しかし完全な)アドレスを紹介します。
1) 102 main street
Anytown, state
2) 400n 600e #2, 52173
3) p.o. #104 60203
これらも有効である可能性があります。
4) 829 LKSDFJlkjsdflkjsdljf Bkpw 12345
5) 205 1105 14 90210
もちろん、これらは標準化されたものではありません。句読点や改行も保証されていません。こんな感じです。
-
番号1 は、住所と都市名、州名が含まれているので完全です。この情報があれば、住所を特定するのに十分であり、(ある程度の標準化がなされていれば)配送可能であると考えることができます。
-
番号2 は、ストリートアドレス(セカンダリ/ユニット番号付き)と5桁の郵便番号が含まれているため、住所を特定するのに十分です。
-
番号3 は郵便番号を含んでいるため、完全な郵便局の書式となります。
-
番号4 も完全なので 郵便番号は一意である これは、民間企業や法人がその住所空間を購入したことを意味します。ユニークな郵便番号は、大量または集中的な配達スペースのためのものです。郵便番号12345宛のものは、ニューヨーク州スケネクタディのゼネラル・エレクトリック社に送られます。この例では、特定の誰かに届くわけではありませんが、それでもUSPSはそれを配達します。
-
5番 も、信じられないかもしれませんが、完全です。この数字だけで、あらゆる住所のデータベースと照らし合わせると、完全な住所が発見できるのです。足りない方向指示器、第二指示器、ZIP+4コードを埋めるのは、それぞれの番号を構成要素として見れば簡単なことである。以下は、完全に拡張され標準化された状態である。
205 N 1105 W Apt 14
ビバリーヒルズ CA 90210-5221
住所データはお客様ご自身のものではありません
公式な住所データをライセンス業者に提供しているほとんどの国では、住所データそのものは管理機関に属しています。米国では、USPSが住所を所有しています。カナダポスト、ロイヤルメールなども同様ですが、国によって所有権の行使や定義が少し異なります。このことを知ることは、通常、住所データベースのリバースエンジニアリングを禁止しているため、重要です。データを取得し、保存し、使用する方法には注意が必要です。
迅速な住所修正にはGoogleマップがよく使われますが TOS 例えば、Google Mapを表示せずにそのデータやAPIを使用することはできず、非商用目的のみ(お金を払わない限り)、データを保存することはできません(一時的なキャッシュは除く)。これは理にかなっています。Googleのデータは世界でもトップクラスです。しかし、Googleマップは ではなく は住所を確認します。住所が存在しない場合でも、その住所がある場所を表示します。 は もし した。 が存在することを確認します(自分の住んでいる通りで試してみてください;存在しないことを知っている家屋番号を使います)。これは時々便利ですが、その点には注意してください。
ノミナティムの 利用規定 も同様に、特に大量かつ商業的な利用には制限があり、データはほとんどがフリーソースから抽出されているため、(オープンプロジェクトの性質として)それほど整備されていません。しかし、これはまだあなたのニーズに合っているかもしれません。素晴らしいコミュニティがサポートしています。
USPS自体もAPIを持っていますが よくダウンする 保証やサポートは一切ありません。また、使いにくいかもしれません。問題なく使いこなしている人もいます。しかし、USPSがAPIの利用を義務付けているのは、USPSを通じて発送する住所の確認だけであることを見逃しがちだ。
人々は住所が難しいものであることを期待している
残念ながら、私たちは社会的に、住所が複雑であることを期待するように仕向けられています。このことについては、インターネット上に何十もの優れたUX記事があります。しかし、実際のところ、個々のフィールドを持つ住所入力フォームがあれば、ユーザーがそれを期待するのは当然です。あるいは、ユーザーが自分の住所の特定の部分をどこに入力すればいいのかわからない場合などです。
最近のチェックアウトフォームの悪いUXについて何度も説明したいのですが、その代わりに、住所を1つのフィールドにまとめると、次のようなことが言えます。 ようこそ 人々は、長いフォームを理解しようとするのではなく、自分の好きなように住所を入力することができるようになるのです。しかし、この変更は 予想外 最初は少し戸惑うかもしれません。その点だけは注意してください。
この苦痛の一部は、国名フィールドを前面、住所の前に置くことで軽減されます。最初に国名フィールドを埋めてもらえば、フォームをどのように表示させればいいかがわかります。米国を選択された場合は、フォームを1つのフィールドに減らし、そうでない場合は構成要素フィールドを表示させることができます。ただ、考えるべきことはそれだけです。
難しい理由はわかった。どうすればいいのか?
USPSは、CASS™認証と呼ばれるプロセスを通じて、検証済みの住所を顧客に提供するベンダーにライセンスを付与しています。これらのベンダーは、毎月更新されるUSPSのデータベースにアクセスすることができます。これらのベンダーのソフトウェアは、認証を受けるために厳格な基準に適合していなければならず、上述のような限定的な条件への同意を求めることはあまりありません。
CASS認定企業の多くは、リスト処理が可能であったり、APIを持っていたりします。Melissa Data、Experian QAS、SmartyStreetsなどです。
(宣伝だと怒られそうなので、この辺で切り上げました。あなたに合った解決策を見つけるのはあなた次第です)。
真実の姿 本当に、みなさん、私はこれらの企業のどれにも勤めていません。宣伝ではありません。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン