31

表示用に書式設定された、または宛名ラベルで使用するために書式設定された、完全な宛名を受け取り、それを構造化オブジェクトに変換できる優れたツールを探しています。

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

// 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オブジェクトの形式です。

4

7 に答える 7

24

GooglemapsAPIはこれに非常に適しています。たとえば、文字列「120 w45stnyc」が与えられたとします。次のように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 ]
    }
  } ]
}
于 2009-05-05T20:08:11.313 に答える
7

シンプルなソリューションを備えた住所パーサーを探している場合は、これを試してください。

http://usaddress.codeplex.com/

良い: 1. データベースが不要 2. インターネット検索が不要 3. かなり正確

悪い例: 1. 実在する住所かどうかを確認できない 2. 米国の住所でしか機能しない 3. C# では、.NET 3.5 以上を使用する

于 2012-03-08T17:17:11.830 に答える
5

前述したように、これは些細な問題ではありません。国際住所以外の最大の問題の 1 つは、住所の標準形式がないことと、住所が整形式であるかどうかを判断できないことです。つまり、クレジット カード番号のように自己認証を行うことができません。 .

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

私は SmartyStreets の創設者です。CASS 認定の住所確認を行います。フォーマットされていない/未加工のアドレスを取得し、それらをクリーニング、標準化、および検証/確認されたアドレスに変換します. リストのサイズにもよりますが、費用は通常わずか数ドルで、所要時間はほぼ瞬時 (通常は数分) です。

于 2011-10-13T03:57:50.197 に答える
4

Experianアドレス検証を試すことができます。問題はありますが、宣伝どおりに機能します。

于 2009-02-05T22:56:18.567 に答える
3

最近、RecogniContact を試してみました。これは、米国およびヨーロッパの住所を解析する Windows COM コンポーネントです。ウェブサイトからテストできます。

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

于 2009-05-12T13:50:12.077 に答える
3

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

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

于 2009-02-05T23:23:18.573 に答える
0

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

于 2011-02-01T07:07:55.447 に答える