Comando FUZZYDUP
Información de concepto
Detecta valores casi idénticos (duplicados inexactos) en un campo de caracteres.
Nota
Para utilizar la correspondencia inexacta a fin de combinar campos de dos tablas de Analytics en una nueva tabla única de Analytics, consulte Comando FUZZYJOIN.
Sintaxis
FUZZYDUP ON campo_clave <OTHER campo <...n>|OTHER ALL <EXCLUDE nombre_campo <...n>>> LEVDISTANCE valor <DIFFPCT porcentaje> <RESULTSIZE porcentaje> <EXACT> <IF prueba> TO nombre_tabla <LOCAL> <OPEN>
Parámetros
Nombre | Descripción |
---|---|
ON campo_clave | El campo de caracteres o la expresión que se probará para detectar duplicados inexactos. |
OTHER campo<...n> | OTHER ALL opcional |
Uno o más campos adicionales para incluir en la salida.
|
EXCLUDE nombre_campo opcional |
Solo tiene validez al usar OTHER ALL. El o los campos que se deben excluir del comando. EXCLUDE le permite ajustar OTHER ALL, excluyendo campos específicos. EXCLUDE debe ir inmediatamente a continuación de OTHER ALL. Por ejemplo: OTHER ALL EXCLUDE campo_1 campo_2 |
LEVDISTANCE valor |
La máxima distancia de Levenshtein permitida entre dos cadenas para que se puedan identificar como duplicados inexactos e incluir en los resultados. El valor de LEVDISTANCE no puede ser menor que 1 ni mayor que 10. Al incrementar el valor de LEVDISTANCE aumenta la cantidad de resultados porque se incluyen valores con un mayor grado de diferencias; es decir valores que difieren más entre sí. Si desea obtener más información, consulte Comportamiento de FUZZYDUP. |
DIFFPCT porcentaje opcional |
Un umbral que limita el 'porcentaje de diferencia' o la proporción de una cadena que puede ser diferente. El porcentaje resultante de un cálculo interno de Analytics realizado sobre los posibles pares duplicados inexactos debe ser menor que o igual al valor de DIFFPCT para que el par se incluya en los resultados. El valor de DIFFPCT no puede ser menor que 1 ni mayor que 99. Si se omite DIFFPCT, el umbral se desactiva y el porcentaje de diferencia no se tiene en cuenta durante el procesamiento del comando FUZZYDUP. Si desea obtener más información, consulte Comportamiento de FUZZYDUP. |
RESULTSIZE porcentaje opcional |
El tamaño máximo del conjunto de resultados de salida como un porcentaje de la cantidad de registros del campo clave. Por ejemplo, para un campo clave con 50.000 registros, un RESULTSIZE de 3 finalizaría con el procesamiento si los resultados superan los 1500 duplicados inexactos (50.000 x 0,03). No se produce ninguna tabla de salida si el procesamiento finaliza. El valor de RESULTSIZE no puede ser menor que 1 ni mayor que 1000 (mil) por ciento. El límite de 1000 % es para adaptarse a la naturaleza de la coincidencia de muchos a muchos, que puede producir resultados más numerosos que el conjunto de datos de prueba original. Si se omite RESULTSIZE, el umbral se desactiva y tamaño del resultado no se tiene en cuenta durante el procesamiento del comando FUZZYDUP. ¡Precaución! La omisión de RESULTSIZE puede generar un conjunto de resultados excesivamente grande que tarda mucho tiempo en procesarse o que puede ocasionar que se exceda la memoria disponible, lo cual finaliza el procesamiento. Omita RESULTSIZE solo si está seguro de que los resultados tendrán un tamaño manejable. |
EXACT opcional |
Incluye duplicados exactos, así como duplicados inexactos en los resultados. |
IF prueba opcional |
Una expresión condicional que debe ser verdadera para procesar cada registro. El comando se ejecuta únicamente en los registros que cumplen la condición. Nota El parámetro IF se evalúa únicamente con los registros que quedan en la tabla después de aplicar los parámetros de alcance (WHILE, FIRST, NEXT). |
TO nombre_tabla |
El lugar al que se deben enviar los resultados del comando:
|
LOCAL opcional |
Guarda el archivo de salida en la misma ubicación que el proyecto de Analytics. Nota Aplicable únicamente al ejecutar el comando en una tabla de servidor con un archivo de salida que es una tabla de Analytics. El parámetro LOCAL debe ir inmediatamente después del parámetro TO. |
OPEN opcional |
Abre la tabla creada por el comando después de la ejecución del comando. Solo es válido si el comando crea una tabla de salida. |
Variables de salida de Analytics
Nombre | Contiene |
---|---|
GAPDUPn |
La cantidad total de grupos de duplicados inexactos, faltantes o duplicados identificados por el comando. |
Ejemplos
Comprobar un campo de apellido en busca de duplicados inexactos
Usted somete a prueba un campo de apellidos para detectar duplicados inexactos (el campo Apellido de la tabla Lista_empleados en ACL DATA\Archivos de datos de muestra\Datos_empleados_Metaphor.ACL). Los resultados se envían a una nueva tabla Analytics.
- Además del campo de prueba, otros campos se incluyen en los resultados.
- La máxima distancia de Levenshtein permitida es 1.
- La proporción de una cadena que puede ser diferente está limitada a 50 %.
- El tamaño de los resultados está limitado al 20 % del tamaño del campo de prueba.
- Además de los duplicados inexactos, se incluyen los duplicados exactos.
OPEN Lista_empleados FUZZYDUP ON Apellido OTHER Nombre NroEmpl LEVDISTANCE 1 DIFFPCT 50 RESULTSIZE 20 EXACT TO "Apellido_inexacto" OPEN
Observaciones
Cómo funciona
El comando FUZZYDUP busca valores casi idénticos (duplicados inexactos) o encuentra ortografía inconsistente en los datos ingresados manualmente.
A diferencia de la función ISFUZZYDUP( ), que identifica una lista exhaustiva de duplicados inexactos para un valor único de caracteres, el comando FUZZYDUP identifica todos los duplicados inexactos en un campo, los organiza en grupos no exhaustivos y genera los resultados.
Si desea obtener información detallada sobre la forma en la que funciona este comando, consulte Análisis de los falsos duplicados.
Qué significa no exhaustivo
No exhaustivo significa que los grupos de duplicados inexactos individuales en los resultados pueden no contener todos los duplicados inexactos en un campo de prueba que estén dentro del grado de diferencia especificado por el propietario del grupo. Sin embargo, si el propietario de un grupo es un duplicado inexacto de otro valor en el campo de prueba, los dos valores aparecerán juntos en un grupo en algún lugar de los resultados. Por lo tanto, los grupos pueden ser no exhaustivos, pero los resultados, en su totalidad, son exhaustivos.
Si para su análisis es importante generar un lista única y exhaustiva de duplicados inexactos para un valor específico del campo de prueba, puede usar la función ISFUZZYDUP( ).
Comportamiento de FUZZYDUP
El comando FUZZYDUP tiene dos parámetros que le permiten controlar el grado de diferencia entre los duplicados inexactos y el tamaño de los resultados:
- LEVDISTANCE
- DIFFPCT
Es posible que tenga que probar diferentes combinaciones de valores de configuración para estos dos parámetros a fin de determinar qué funciona mejor para un conjunto de datos en particular.
LEVDISTANCE (distancia de Levenshtein)
Cuando procesa los datos, el comando FUZZYDUP calcula la distancia de Levenshtein entre cada par evaluado de cadenas en el campo de prueba y calcula el porcentaje de diferencia. La distancia de Levenshtein es un valor que representa el mínimo número de ediciones de caracteres individuales requerido para hacer que una cadena sea idéntica a otra. Si desea obtener más información, consulte Función LEVDIST( ).
DIFFPCT (Porcentaje de diferencia)
El porcentaje de diferencia es el porcentaje de la cadena más corta de las dos cadenas evaluadas que es diferente y es resultado del siguiente cálculo interno de Analytics, que utiliza la Distancia de Levenshtein entre las dos cadenas:
Distancia de Levenshtein / número de caracteres en la cadena más corta × 100 = porcentaje de diferencia
Más información
Para obtener información detallada acerca de la configuración de la diferencia de los duplicados inexactos, el control del tamaño de los resultado y los grupos de duplicados inexactos, consulte Análisis de los falsos duplicados.
Distinción entre mayúsculas y minúsculas
El comando FUZZYDUP no distingue entre mayúsculas y minúsculas; por lo tanto, "SMITH" es equivalente a "smith".
Recorte automático de los espacios en blanco al final
El comando FUZZYDUP recorta automáticamente los espacios en blanco en el campo_clave, por lo que no es necesario utilizar las funciones ALLTRIM( ) o TRIM( ) cuando se especifica un campo clave para el campo_clave.
Si concatena campos para campo_clave, debe usar ALLTRIM( ), tal como se muestra a continuación.
Mejorar la efectividad de FUZZYDUP
Hay tres técnicas que pueden mejorar de manera significativa la efectividad del comando FUZZYDUP:
- ordenar los elementos individuales en los valores del campo de prueba
- quitar los elementos genéricos de los valores del campo de prueba
- concatenar los campos de prueba
Estas técnicas generan conjuntos más concentrados de resultados, con menos falsos positivos y más verdaderos positivos. Puede usar las técnicas de manera independiente o combinadas.
Ordenar los elementos individuales en los valores del campo de prueba
La función SORTWORDS( ) puede mejorar la efectividad del comando FUZZYDUP ordenando secuencialmente los elementos individuales de los valores del campo de prueba.
Ordenar los elementos, como los componentes de una dirección, puede hacer que dos cadenas con la misma información, pero un formato diferente, se asemejen más una a otra. Si la semejanza es mayor, mejoran las posibilidades de que un par de cadenas sean detectadas como falsos duplicados.
Si desea obtener más información, consulte Función SORTWORDS( ).
Si desea ver un video con una descripción general de SORTWORDS( ), vea Fuzzy Matching Using SORTWORDS() (Coincidencias inexactas con SORTWORDS()) (solo disponible en inglés).
Quitar los elementos genéricos de los valores del campo de prueba
La función OMIT( ) puede mejorar la efectividad del comando FUZZYDUP quitando los elementos genéricos, como "Corporation" o "Inc.", o los caracteres como comas, puntos y el símbolo "&", de los valores del campo de prueba.
La eliminación de los elementos genéricos y la puntuación centra la comparación de cadenas de FUZZYDUP únicamente en la porción de las cadenas donde puede haber una diferencia significativa.
Si desea obtener más información, consulte Función OMIT( ).
Concatenar los campos de prueba
Concatenar dos o más campos de prueba puede mejorar la efectividad del comando FUZZYDUP al aumentar el grado de unicidad de los valores de prueba.
Por ejemplo, si se concatena el campo Domicilio y el campo Ciudad, se evitan las coincidencias inexactas entre las direcciones de distintas ciudades:
FUZZYDUP ON ALLTRIM(Domicilio)+ALLTRIM(Ciudad) OTHER Domicilio Ciudad Nombre_proveedor LEVDISTANCE 4 DIFFPCT 50 RESULTSIZE 20 EXACT TO "Duplicados_inexactos_nombre_proveedor" OPEN
Otros métodos de comparación de cadenas
- La función DICECOEFFICIENT( ) ofrece un método de comparación de cadenas que le quita el énfasis o ignora completamente la posición relativa de los caracteres o de los bloques de caracteres.
- Las funciones SOUNDSLIKE( ) y SOUNDEX( ) proporcionan un método para comparar cadenas basándose en una comparación fonética (sonido) en lugar de una comparación ortográfica (escritura).