SQL Server Soundex() y Difference() para comparar las observaciones de una columna con ellas mismas.
Estoy buscando ayuda para utilizar Soundex()
y Difference()
en SQL Server con el objetivo de comparar una observación en una columna con otra observación en la misma columna.
Aquí tienes un poco de contexto sobre cómo se ve los datos. Todas estas direcciones de calle tienen la intención de representar el mismo lugar, pero con errores humanos cambiando una pequeña parte, por lo que no es exactamente igual:
Dirección Calle | código postal | estado |
---|---|---|
1440 estaesunadirecciondecalle ave | 12345 | OH |
1440 estamiesdirecciondecalle st | 12345 | OH |
1440 estaladirecciondecalle rd | 12345 | OH |
El objetivo sería utilizar Soundex()
y Difference()
para agrupar las direcciones que son similares entre sí. El problema es que la tabla tiene más de 2 millones de clientes, por lo que la solución no puede funcionar con una gran cantidad de uso de CPU. El producto final no tiene que ser bonito, no me importa ordenar manualmente (que me he dado cuenta de que puede ser necesario hasta cierto punto), pero apreciaría que el script las agrupe por mí.
Avísame si es posible con soundex()
y difference()
y, si no es posible con esas dos, cualquier otra función o forma que puedas utilizar para resolver esto. También puede ser importante mencionar que puede ser una solución de múltiples softwares, ya que el equipo y yo conocemos python, R, power BI, etc.
¡Gracias!
davy.ai
Solución para usar las funciones Soundex() y Difference() en SQL Server para comparar observaciones en una columna
Para agrupar direcciones similares, podemos utilizar las funciones Soundex() y Difference() de SQL Server.
Aquí tienes un ejemplo de consulta que agrupa las tres direcciones de la tabla anterior:
Esta consulta agrupará las direcciones que tienen el mismo código Soundex o una puntuación
Difference
de 4 o superior. La funciónSoundex
devuelve un código de cuatro caracteres que representa el sonido de una palabra, mientras que la funciónDifference
devuelve un entero del 0 al 4 que indica el número de diferencias a nivel de caracteres entre dos cadenas.Ten en cuenta que esta consulta puede no ser muy eficiente en una tabla con más de 2 millones de filas. Puede que quieras considerar optimizarla o dividir la tarea en fragmentos más pequeños.
Si estás abierto a utilizar otras herramientas, también podrías considerar el uso de la biblioteca
fuzzywuzzy
de Python o el paquetestringdist
de R para realizar emparejamientos difusos en las direcciones. Power BI también ofrece algunas capacidades de emparejamiento difuso.En resumen, existen múltiples formas de abordar este problema y la mejor solución dependerá de los requisitos específicos de tu caso de uso.