web-dev-qa-db-ja.com

良いアドレスパーサーはどこにありますか

完全な郵送先住所を取得し、表示用にフォーマットしたり、宛名ラベルで使用したりして、構造化オブジェクトに変換できる優れたツールを探しています。

たとえば、次のようになります。

// Start with a formatted address in a single string
string f = "18698 E. Main Street\r\nBig Town, AZ, 86011";

// Parse into address
Address addr = new Address(f);

addr.Street; // 18698 E. Main Street
addr.Locality; // Big Town
addr.Region; // AZ
addr.PostalCode; // 86011

これで、RegExを使用してこれを行うことができます。しかし、注意が必要なのは、世界中のあらゆるアドレスを処理できるように、それを十分に一般的に保つことです。

私はそれを行うことができる何かがそこにある必要があると確信しています。

誰かが気付いた場合、これは実際には opensocial.address オブジェクトの形式です。

28
Brig Lamoreaux

GooglemapsAPIはこれに非常に適しています。たとえば、「120 w 45stnyc」という文字列が与えられたとします。次のようにGooglemapsAPIに渡します:http://maps.google.com/maps/geo?q=120+w+45+st+nycそしてあなたはこの応答を受け取ります:

{
  "name": "120 w 45 st nyc",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [ {
    "id": "p1",
    "address": "120 W 45th St, New York, NY 10036, USA",
    "AddressDetails": {"Country": {"CountryNameCode": "US","CountryName": "USA","AdministrativeArea": {"AdministrativeAreaName": "NY","Locality": {"LocalityName": "New York","Thoroughfare":{"ThoroughfareName": "120 W 45th St"},"PostalCode": {"PostalCodeNumber": "10036"}}}},"Accuracy": 8},
    "ExtendedData": {
      "LatLonBox": {
        "north": 40.7603883,
        "south": 40.7540931,
        "east": -73.9807141,
        "west": -73.9870093
      }
    },
    "Point": {
      "coordinates": [ -73.9838617, 40.7572407, 0 ]
    }
  } ]
}
24
Tom Lehman

簡単な解決策を備えたアドレスパーサーを探している場合は、次のことを試してください。

http://usaddress.codeplex.com/

良い:1。データベースは必要ありません2.インターネット検索は必要ありません3.かなり正確です

悪い例:1。実際のアドレスかどうかを確認できません2.米国のアドレスでのみ機能します3. C#では、.NET3.5以降を使用します

7
liuhongbo

Experian Address Verification を試すことができます。問題はありますが、宣伝どおりに機能します。

4
Steve B.

@duffymoが言ったような簡単な解決策はないので、次善の策はデザインを再考することかもしれません。ユーザーフォームの場合は、妥協してユーザーに記入してもらいます。データをさかのぼって解析する場合は、非常に厳密な正規表現を使用して、いくつかの基準に基づいてアドレスを解析します(国は米国です)。次に、残っているパスで2回目のパスを作成します。私はこのアプローチを採用しましたが、これが唯一の信頼できるアプローチです。

一般的な正規表現アプローチを採用する場合のもう1つの設計上の問題は、不正なアドレスに対して誤検知が発生することです。これらの人々にカタツムリのメールを送信している場合、それはバウンスすることになり、どちらが戻ってきたかを分類したり、間違ったアドレスにメールを送信し続けたりするために、より多くの作業が必要になります。

3
aleemb

最近RecogniContactを試しました。これは、米国とヨーロッパのアドレスを解析するWindowsCOMコンポーネントです。あなたはそれをウェブサイトからテストすることができます。

http://www.loquisoft.com/index.php?page=8

3
Walter Scott

すでに述べたように、これは些細な問題ではありません。最大の問題の1つは、国際住所を除いて、住所の標準形式がないことと、住所が整形式であるかどうか、つまりクレジットカード番号のように自己検証されていないかどうかを教えてくれないことです。 。

このため、アドレスが本物であることを確認するには、外部の信頼できる情報源に依存する必要があります。ここで、アドレス検証サービスが混在します。ビジネスニーズとアプリケーション要件に応じて、アドレスリストの1回限りの「バッチ」スクラブ、またはリアルタイム/ライブアドレス検証サービスを検討している場合があります。この問題を簡単に解決できる優れたプロバイダー(コストは異なります)がいくつかあります。

私はSmartyStreetsの創設者です。 CASS認定の住所確認 を行います。書式なし/未加工のアドレスを取得し、クリーンアップ、標準化、検証/確認済みのアドレスに変換します。リストのサイズにもよりますが、費用は通常わずか数ドルで、所要時間はほぼ瞬時です。通常は数分です。

3
Jonathan Oliver

カナダの住所には、 Street Perfect という名前を使用しました。 c++コードを.netでラップして、目的に合わせて再利用できるようにする必要がありましたが、それはかなり簡単でした。

0
Brian c