una - sql plus create table
Estandarización de direcciones dentro de una base de datos (1)
Trabajando en MS Access 2013. Tenga un montón de ubicaciones / direcciones que necesitan ser estandarizadas.
Los ejemplos incluyen direcciones como:
- 500 W Main St
- 500 West Main St
- 500 West Main Street
Tú entiendes.
He considerado ejecutar una consulta que extrae todos los registros donde los caracteres izquierdos (7) o algo existen más de una vez en la base de datos, pero hay fallas obvias en esa lógica.
¿Existe una función o consulta o cualquier otra cosa que me ayude a generar una lista de registros cuyas direcciones pueden existir varias veces, de maneras ligeramente diferentes?
Este es un negocio complicado ... partes iguales de Magia Negra y Ciencia. Te sorprenderán las variaciones de Boulevard solo.
Por eso uso la API de Google. Para el conjunto de datos inicial puede llevar mucho tiempo, pero solo las nuevas adiciones tendrían que resolverse.
Por ejemplo
https://maps.googleapis.com/maps/api/geocode/json?address=500 S Main St,Providence RI 02903
vuelve, en parte
"formatted_address" : "500 S Main St, Providence, RI 02903, USA"
y la BUENA noticia es
https://maps.googleapis.com/maps/api/geocode/json?address=500 South Main Steet,Providence RI 02903
devuelve la misma dirección formateada que la consulta anterior
"formatted_address" : "500 S Main St, Providence, RI 02903, USA"
Ejemplo de VBA:
Al ejecutar el siguiente código ...
'' VBA project Reference required:
'' Microsoft XML, v3.0
Dim httpReq As New MSXML2.ServerXMLHTTP
httpReq.Open "GET", "https://maps.googleapis.com/maps/api/geocode/json?address=500 South Main Steet,Providence RI 02903", False
httpReq.send
Dim response As String
response = httpReq.responseText
... la
response
variable de cadena contiene los siguientes datos JSON:
{
"results" : [
{
"address_components" : [
{
"long_name" : "500",
"short_name" : "500",
"types" : [ "street_number" ]
},
{
"long_name" : "South Main Street",
"short_name" : "S Main St",
"types" : [ "route" ]
},
{
"long_name" : "Fox Point",
"short_name" : "Fox Point",
"types" : [ "neighborhood", "political" ]
},
{
"long_name" : "Providence",
"short_name" : "Providence",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Providence County",
"short_name" : "Providence County",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "Rhode Island",
"short_name" : "RI",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "United States",
"short_name" : "US",
"types" : [ "country", "political" ]
},
{
"long_name" : "02903",
"short_name" : "02903",
"types" : [ "postal_code" ]
},
{
"long_name" : "2915",
"short_name" : "2915",
"types" : [ "postal_code_suffix" ]
}
],
"formatted_address" : "500 S Main St, Providence, RI 02903, USA",
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 41.82055829999999,
"lng" : -71.4028137
},
"southwest" : {
"lat" : 41.8204014,
"lng" : -71.40319219999999
}
},
"location" : {
"lat" : 41.8204799,
"lng" : -71.40300289999999
},
"location_type" : "ROOFTOP",
"viewport" : {
"northeast" : {
"lat" : 41.8218288302915,
"lng" : -71.40165396970851
},
"southwest" : {
"lat" : 41.8191308697085,
"lng" : -71.40435193029151
}
}
},
"partial_match" : true,
"place_id" : "ChIJicPQAT9F5IkRfq2njkYqZtE",
"types" : [ "premise" ]
}
],
"status" : "OK"
}