Подтвердить что ты не робот

Где хороший адресный парсер

Я ищу хороший инструмент, который может принимать полный почтовый адрес, отформатировать для отображения или использовать с меткой рассылки и преобразовать его в структурированный объект.

Итак, например:

// 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.

4b9b3361

Ответ 1

API Googlemaps работает очень хорошо для этого. Например, предположим, что вам дана строка "120 w 45 st nyc". Передайте его в API Googlemaps, например: 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 ]
    }
  } ]
}

Ответ 2

Если вы ищете парсер адресов с простым решением, попробуйте следующее:

http://usaddress.codeplex.com/

Хорошо: 1. Не требуется база данных 2. Нет необходимости в поиске в Интернете. 3. Довольно точно

Плохо: 1. Невозможно подтвердить, является ли он реальным адресом 2. Работает только для адреса США. 3. в С# используйте .NET 3.5 или выше

Ответ 3

Поскольку нет тривиального решения, например, как сказал @duffymo, следующим лучшим может быть пересмотр дизайна. Если это пользовательская форма, сделайте компромисс и позвольте пользователю заполнить его. Если вы занимаетесь ретроактивным анализом данных, используйте строгое регулярное выражение для анализа адресов на основе некоторых критериев (страна - США). Затем сделайте второй проход на оставшихся и так далее. Я использовал этот подход, и это единственный надежный подход.

Другая проблема с дизайном при использовании общего подхода регулярного выражения заключается в том, что он будет генерировать ложные положительные значения для плохих адресов. Если вы отправляете уличную почту этим людям, это будет подпрыгивать, и у вас будет больше работы, пытаясь разобраться, какие из них вернулись или продолжают отправлять письма на ошибочные адреса.

Ответ 4

Недавно я попробовал RecogniContact. Это компонент Windows COM, который анализирует адреса США и Европы. Вы можете протестировать его с веб-сайта.

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

Ответ 5

Как уже упоминалось, это не тривиальная проблема. Одна из самых больших проблем - помимо международных адресов - заключается в том, что нет стандартного формата адресов и того факта, что адрес не может сказать вам, правильно ли он сформирован, то есть он не является самонастраивающимся, как номер кредитной карты.

Из-за этого вам нужно полагаться на внешний источник правды, чтобы обеспечить реальный адрес. В этом случае в систему входит служба проверки адреса. В зависимости от ваших бизнес-потребностей и требований к приложениям вы можете просматривать одноразовый "пакетный" скраб вашего списка адресов или, возможно, службу проверки подлинности в реальном времени/в реальном времени. Существует ряд хороших поставщиков (которые различаются по стоимости), которые могут легко решить эту проблему.

Я должен упомянуть, что я основатель SmartyStreets. Мы CASS-сертифицированная проверка адреса. Мы возьмем ваши неформатированные/необработанные адреса и превратим их в адреса, которые были очищены, стандартизованы и подтверждены/подтверждены. В зависимости от размера вашего списка стоимость обычно составляет всего несколько долларов, а время обработки почти мгновенно - обычно несколько минут.

Ответ 6

Вы можете попробовать Experian Address Verification. Имеет ли он проблемы, но в значительной степени работает, как рекламируется.

Ответ 7

Для канадских адресов я использовал один из Street Perfect. Нам пришлось обернуть код c++ в некотором .net, чтобы сделать его многоразовым для нашей цели, но это было довольно легко.