es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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!

Tags:  , , ,

Answer

  1. Avatar for 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:

    SELECT StreetAddress, 
           zip, 
           state, 
           Soundex(StreetAddress) AS Sdx, 
           Difference(StreetAddress, '1440 thisisastreetaddress ave') AS Dff
    FROM Addresses
    WHERE Soundex(StreetAddress) = Soundex('1440 thisisastreetaddress ave')
       OR Difference(StreetAddress, '1440 thisisastreetaddress ave') = 4
    ORDER BY Dff DESC;
    

    Esta consulta agrupará las direcciones que tienen el mismo código Soundex o una puntuación Difference de 4 o superior. La función Soundex devuelve un código de cuatro caracteres que representa el sonido de una palabra, mientras que la función Difference 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 paquete stringdist 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.

Comments are closed.