2017-01-16 7 views
1

私は、xampp上のphpを使用して長い文字列から入力アドレスの場所(US-SmartyStreetに限定されません)を特定し抽出しようとしています。テキスト文字列PHPからアドレスの場所を特定するにはどうすればよいですか?

NLP、GoogleのジオコーディングAPI、および上記のタスクを実行するための正規表現を使用して、これを行う方法に関するいくつかのトピック/ライブラリを読んだことがあります。これらの3つのリンクは役に立つかもしれないいくつかのもっともらしいリンクです。Link 1Link 2Link 3/GitHub Library(Seems Promising)

しかし、これらのリンクが実装に役立つかどうかはわかりません。誰もそれで私を助けることができますか?

答えて

3

これは確かにアドレス解析の聖杯です。このプロジェクトを攻撃するときに考慮すべき点がいくつかあります。第一に、各国は独自の特定のアドレス形式を持つことができます。それがうまくいくかぎり、標準的なアドレッシング形式はありません。

ここ

は、アドレス形式のいくつかの良いコンパイルされているが、それでもこれらは必ずしも同意しない:

Address formats by Informatica

Address formats by Universal Postal Union

Address formats by a guy who has spent a lot of time thinking about this kind of stuff

ステップ1 - あなたが慣れてきたら、各国のすべての可能なアドレス形式で、同様の形式をグループ化し、各グループの正規表現を作成することができます。

ステップ2 - これは非常に重要です。住所が関係する国を特定するためにできることはすべて実行してください。これはどの正規表現を利用するかを知らせる。あなたがこれを行うことができない場合、あなたは多くの異なる住所候補に終わることがあります。

ステップ3 - 正規表現を使用して、ソーステキストをスキャンして、潜在的な地平線、住所の開始点と終了点を特定します。米国では、住所は通常、家の番号で始まり、郵便番号(5または9または11桁)で終わります。ドイツでは、住所は一般的に通りの名前で始まり、市/州または郵便番号で終わります。

ステップ4 - このアドレス候補をスキャンして、その国のフォーマットパターンの理解に基づいて、アドレスのさまざまなコンポーネントを決定します。通りはプリ方向性

  • 通りの名前(すべての可能な値のインデックスを持っているのに役立ちます)
  • は(可能なすべてのインデックスを持っているのに役立ちます

    • プライマリ番号:次のコンポーネントを探します値)
    • ストリートサフィックス(すべての可能な値のインデックスを持っているのに役立ちます)
    • ストリートポスト方向(すべての可能な値のインデックスを持っているのに役立ちます)
    • 二次番号指示子(すべての可能な値のインデックスを持っているのに役立ちます)
    • 二数
    • は(インデックスを持っているのに役立ちますすべての可能な値の)
    • 状態(すべての可能な値のインデックスを持っているのに役立つ)
    • 郵便

    が(もっとたくさんありますが、それは良いスタートだ)

    ステップ5 - あなただけのアドレスのように見える文字列を決定したい場合は、完了です。この文字列をジオコーディングツールに入力し、それに対応する緯度/経度を取得します。 Google MapsまたはOpenStreetMapはあなたのためのトリックを行うことができるはずです。

    住所が実際に有効かどうか(地方の郵便局のような権威のあるデータセットの既知のエントリと一致する)を知りたい場合は、住所確認ツールを使用する必要があります。 LLシンプルなGoogle検索で見つける:

    Google Search: "address validation"

    全開示を:私はそれを解決するためにさまざまな方法を見つけようと、多くの人々にそれを説明し、この非常にトピックについて考える多くの時間を費やしています。私はSmartyStreetsで一日中国際的な住所を扱っています。

  • 関連する問題