2011-05-20 11 views
9

He buscado en línea para esto, pero realmente no he encontrado mucho. Básicamente, necesito comparar un grupo de direcciones para ver si coinciden. Las direcciones se pueden escribir de diferentes maneras. Por ejemplo: 1345 135th st NE, 1345 NE 135TH ST, etc. Además, podrían estar en diferentes idiomas también. Antes de intentar escribir algún algoritmo de comparación de análisis por mi cuenta, ¿alguien sabe alguna biblioteca o formas en que podría hacer esto fácilmente? Mi amigo, sin embargo, de usar Google o Bing Maps Web Service y pasarles la dirección y obtener las coordenadas geográficas y comparar el uso de las coordenadas en lugar de la coincidencia de cadenas. Pero luego tengo que llamar a un servicio web miles de veces para todas estas direcciones que tengo, no muy elegante;) Cualquier ayuda sería agradable :)Necesito un algoritmo de coincidencia de direcciones

Respuesta

3

No creo que este sea un problema de tipo REGEX. Está buscando convertir primero a un formato comparable.

Existen varios servicios web/productos disponibles que estandarizarán una dirección para usted. Bing para "API de estandarización de direcciones de USPS" y encontrará mucha información. Una vez que la dirección esté estandarizada, la comparación debería ser sencilla.

http://www.bing.com/search?q=usps+address+standardization+api&go=&form=QBRE&qs=n&sk=&sc=1-32

Alternativamente, puede codificar geográficamente la dirección para obtener un conjunto de coordenadas y luego comparar esos.

http://code.google.com/apis/maps/documentation/geocoding/

+0

El código de Google también le permite devolver una "dirección con el formato correcto", pero creo que después de tantas llamadas a la API debe pagar o algo así. – jcolebrand

3

me encontré con 2 opciones.

En primer lugar, tal vez, en lugar de tomar cualquier entrada, deje que los usuarios elijan entre un número limitado de opciones, de forma similar a cómo Facebook trata con las direcciones. Si usa una API autocompletada, a medida que escriben, la api reducirá las direcciones posibles. Aquí es uno de Google:

http://code.google.com/p/geo-autocomplete/

En segundo lugar, la dirección de la búsqueda de & de clasificación (pero ar no libre):

https://www.craftyclicks.co.uk/

https://smartystreets.com/ (Dirección calificado previamente)

https://www.alliescomputing.com/ (Direcciones mundiales anteriormente ofrecidas)

1

Esto requiere inteligencia para hacerlo correctamente; las computadoras no son inteligentes.

Un algoritmo simple podría indicar qué direcciones tienen algo en común, por ejemplo, "1345 135th st NE" y "1345 NE 135TH ST" tienen el número "1345" en común.

Tendría entonces menos para comparar. También reduciría el número de geolocalización.

2

Las direcciones de EE. UU. Se pueden representar de forma única mediante un número de 12 dígitos llamado punto de entrega (DPBC). Este número consiste en el código postal completo de 9 dígitos y un número de punto de entrega de 3 dígitos. Esto es lo que se usa para formar códigos de barras en piezas de correo para acelerar la entrega. El uso de un servicio certificado por CASS puede proporcionar el punto de entrega de 12 dígitos e incluso marcar duplicados por usted.

Con el interés de la divulgación completa trabajo para SmartyStreets, que anteriormente era la dirección calificada, que se mencionó en la otra respuesta por Mowgli.

Proporcionamos una API que se puede consultar, así como un servicio de procesamiento por lotes (que marcará los duplicados como se explicó anteriormente).

Tenga en cuenta que incluso el DPBC de 12 dígitos no siempre identifica de manera única una dirección en particular. Esto ocurre con frecuencia cuando un bloque de calle en particular, o un código postal de 9 dígitos, tiene un tramo largo de hogares que tienen números primarios similares. En estos casos, es mejor utilizar un servicio CASS para estandarizar y validar las direcciones, luego córtelas para realizar comparaciones convenientes. (Sin embargo, como se ha dicho, los duplicados ya estarán marcados por algunos servicios CASS.)

actualización: SmartyStreets ofrece ahora international address verification.

+0

La asignación del código zip plus 5 probablemente sea la mejor manera de comparar posteriormente. La asignación del código requiere la coincidencia y la búsqueda en la base de datos de direcciones completa. –

+1

No, solo tener el código ZIP + 4 (9 dígitos) no es suficiente. Puede haber información secundaria (números de apartamentos, descriptores, etc.) que solo se encuentran en el código de barras del punto de entrega de 12 dígitos (que consta del código postal de 9 dígitos más el punto de entrega y un dígito de control). (Esto es específico, por supuesto, para las direcciones de EE. UU.) – mdwhatcott

2

Hay una biblioteca de código abierto de python para la deduplicación de registros/resolución de entidades que se puede aplicar a la coincidencia de direcciones: Dedupe.

Es gratis y se puede ejecutar en una computadora portátil, a diferencia de un servidor enorme.

1

No consideraría esto un problema de expresiones regulares.

Una herramienta gratuita que podría ser útil es usaddress, una biblioteca de python para analizar direcciones. Se lleva a cabo bastante bien en todo tipo de formatos de dirección, b/c que utiliza un enfoque probabilístico en lugar de un enfoque de expresiones regulares (a pesar de que está hecho para direcciones de EE.UU., & puede no funcionar bien en direcciones en otros idiomas) http://usaddress.readthedocs.org/en/latest/

Las direcciones de análisis no resolverán su problema al 100%, pero comparar dos direcciones, especialmente direcciones con formatos variables, será mucho más fácil si las direcciones se dividen en sus respectivos componentes (para que pueda comparar la calle # contra la calle #, la ciudad contra ciudad, etc.)

Luego, para comparar registros, puede usar dedupe - otra biblioteca gratuita de python. http://dedupe.readthedocs.org/en/latest/

Cuestiones relacionadas