c# parsing opensocial street-address

c# - Dónde está un buen analizador de direcciones



parsing opensocial (7)

Como no hay una solución trivial como dijo @duffymo, lo mejor sería reconsiderar el diseño. Si se trata de un formulario de usuario, haga un compromiso y permita que el usuario lo complete. Si está analizando datos de manera retroactiva, utilice una expresión regular muy estricta para analizar las direcciones según algunos criterios (el país es EE. UU.). Luego haz un segundo pase a los que sobran, y así sucesivamente. He adoptado este enfoque y es el único enfoque confiable.

Otro problema de diseño al tomar un enfoque regex genérico es que generará un falso positivo para direcciones incorrectas. Si está enviando correo postal a estas personas, terminará rebotando y tendrá más trabajo en sus manos tratando de determinar cuáles regresaron o continuar enviando correos a direcciones erróneas.

Estoy buscando una buena herramienta que pueda tomar una dirección de correo completa, formateada para mostrar o usar con una etiqueta de correo, y convertirla en un objeto estructurado.

Entonces, por ejemplo:

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

Ahora podría hacer esto usando RegEx. ¡Pero la parte difícil es mantenerlo lo suficientemente general como para manejar cualquier dirección en el mundo!

Estoy seguro de que tiene que haber algo que pueda hacerlo.

Si alguien lo notó, este es en realidad el formato del objeto opensocial.address .


Como se ha mencionado, este no es un problema trivial. Uno de los mayores problemas, aparte de las direcciones internacionales, es que no existe un formato estándar para las direcciones y el hecho de que una dirección no puede decirle si está bien formado, es decir, no se autovalida como un número de tarjeta de crédito. .

Debido a esto, debe confiar en una fuente externa de verdad para garantizar que la dirección sea real. Aquí es donde un servicio de verificación de direcciones entra en la mezcla. Dependiendo de las necesidades de su negocio y los requisitos de la aplicación, es posible que esté mirando un fregado de "una sola vez" por lotes de su lista de direcciones, o quizás un servicio de validación de direcciones en tiempo real / en vivo. Hay una serie de buenos proveedores (que varían en costo) que pueden resolver fácilmente este problema.

Debo mencionar que soy el fundador de SmartyStreets. Hacemos verificación de dirección certificada por CASS . Tomaremos sus direcciones sin formato / sin formato y las convertiremos en direcciones que se hayan limpiado, estandarizado y verificado / confirmado. Dependiendo del tamaño de su lista, el costo generalmente es de unos pocos dólares y el tiempo de respuesta es casi instantáneo, generalmente de unos minutos.



La API de Googlemaps funciona bastante bien para esto. Por ejemplo, supongamos que le dan la cuerda "120 w 45 st nyc". Pásalo a la API de Googlemaps de la siguiente manera: http://maps.google.com/maps/geo?q=120+w+45+st+nyc y obtienes esta respuesta:

{ "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 ] } } ] }


Para las direcciones canadienses, he usado una llamada Street Perfect . Tuvimos que ajustar el código de c++ en algunos .net para que sea reutilizable para nuestro propósito, pero eso fue bastante fácil.



Si está buscando un analizador de direcciones con una solución simple, intente esto:

http://usaddress.codeplex.com/

Bueno: 1. No se requiere base de datos 2. No se requiere búsqueda en Internet 3. Bastante preciso

Malo: 1. No puedo confirmar si es una dirección real 2. Solo funciona para la dirección de EE. UU. 3. en C #, use .NET 3.5 o superior