Где хороший адресный парсер
Я ищу хороший инструмент, который может принимать полный почтовый адрес, отформатировать для отображения или использовать с меткой рассылки и преобразовать его в структурированный объект.
Итак, например:
// 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.
Ответы
Ответ 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
, чтобы сделать его многоразовым для нашей цели, но это было довольно легко.