distancia Jaro-Winkler es una métrica de cadena que mide una distancia de edición entre dos secuencias. Es una variante propuesta en 1990 por William E. Winkler de la métrica de distancia Jaro (1989, Matthew A. Jaro ).
La distancia Jaro-Winkler usa una escala de prefijo que otorga calificaciones más favorables a las cadenas que coinciden desde el principio para una longitud de prefijo establecida .
Cuanto menor es la distancia Jaro-Winkler para dos cadenas, más similares son las cadenas. La puntuación se normaliza de modo que 1 equivale a ninguna similitud y 0 es una coincidencia exacta. La similitud de Jaro-Winkler es la inversión, (1 - distancia de Jaro-Winkler).
Aunque a menudo se la conoce como métrica de distancia , la distancia Jaro-Winkler no es una métrica en el sentido matemático de ese término porque no obedece a la desigualdad del triángulo .
Definición [ editar ]
Similitud de Jaro [ editar ]
La similitud de Jaro de dos cadenas dadas y es
Dónde:
- es la longitud de la cuerda ;
- es el número de caracteres coincidentes (ver más abajo);
- es la mitad del número de transposiciones (ver más abajo).
Dos personajes de y respectivamente, se consideran coincidentes solo si son iguales y no más allá de.
Cada personaje de se compara con todos sus caracteres coincidentes en . El número de caracteres coincidentes (pero con un orden de secuencia diferente) dividido por 2 define el número de transposiciones . Por ejemplo, al comparar CRATE con TRACE, solo 'R' 'A' 'E' son los caracteres coincidentes, es decir, m = 3. Aunque 'C', 'T' aparecen en ambas cadenas, están más allá de 1 (el resultado de) Por lo tanto, t = 0. En DwAyNE versus DuANE, las letras coincidentes ya están en el mismo orden DANE, por lo que no se necesitan transposiciones.
Similitud Jaro-Winkler [ editar ]
La similitud de Jaro-Winkler usa una escala de prefijo que otorga calificaciones más favorables a las cadenas que coinciden desde el principio para una longitud de prefijo establecida . Dadas dos cuerdas y , su similitud Jaro-Winkler es:
dónde:
- es la similitud de Jaro para cadenas y
- es la longitud del prefijo común al comienzo de la cadena hasta un máximo de cuatro caracteres
- es un factor de escala constante de cuánto se ajusta la puntuación hacia arriba por tener prefijos comunes. no debe exceder 0.25, de lo contrario la similitud podría ser mayor que 1. El valor estándar para esta constante en el trabajo de Winkler es
La distancia Jaro-Winkler Se define como .
Aunque a menudo se la conoce como métrica de distancia , la distancia Jaro-Winkler no es una métrica en el sentido matemático de ese término porque no obedece a la desigualdad del triángulo . [1] La distancia Jaro-Winkler tampoco satisface el axioma de identidad.
Relación con otras métricas de distancia de edición [ editar ]
Existen otras medidas populares de distancia de edición , que se calculan utilizando un conjunto diferente de operaciones de edición permitidas. Por ejemplo,
- la distancia de Levenshtein permite la eliminación, inserción y sustitución;
- la distancia Damerau-Levenshtein permite la inserción, eliminación, sustitución y transposición de dos caracteres adyacentes;
- la distancia de subsecuencia común más larga (LCS) permite solo la inserción y eliminación, no la sustitución;
- la distancia de Hamming solo permite la sustitución, por lo tanto, solo se aplica a cuerdas de la misma longitud.
La distancia de edición generalmente se define como una métrica parametrizable calculada con un conjunto específico de operaciones de edición permitidas, y a cada operación se le asigna un costo (posiblemente infinito). Esto se generaliza aún más por los algoritmos de alineación de secuencias de ADN , como el algoritmo Smith-Waterman , que hacen que el costo de una operación dependa de dónde se aplica.
distancia de Levenshtein es una métrica de cuerda para medir la diferencia entre dos secuencias. Informalmente, la distancia de Levenshtein entre dos palabras es el número mínimo de ediciones de un solo carácter (inserciones, eliminaciones o sustituciones) requeridas para cambiar una palabra en la otra. Lleva el nombre del matemático soviético Vladimir Levenshtein , quien consideró esta distancia en 1965. [1]
La distancia de Levenshtein también se puede denominar distancia de edición , aunque ese término también puede denotar una familia más grande de métricas de distancia . [2] : 32 Está estrechamente relacionado con las alineaciones de cadenas por pares .
Definición [ editar ]
La distancia de Levenshtein entre dos cuerdas (de longitud y respectivamente) está dado por dónde
dónde es la función del indicador igual a 0 cuando e igual a 1 de lo contrario, y es la distancia entre el primero personajes de y el primero personajes de .
Tenga en cuenta que el primer elemento en el mínimo corresponde a la eliminación (de a ), el segundo para la inserción y el tercero para que coincida o no coincida, dependiendo de si los símbolos respectivos son los mismos.
Ejemplo [ editar ]
Por ejemplo, la distancia de Levenshtein entre "gatito" y "sentado" es 3, ya que las siguientes tres ediciones cambian de una a otra, y no hay forma de hacerlo con menos de tres ediciones:
- k itten → s itten (sustitución de "s" por "k")
- sitt e n → sitt i n (sustitución de "i" por "e")
- sittin → sittin g (inserción de "g" al final).
Límites superior e inferior [ editar ]
La distancia de Levenshtein tiene varios límites superiores e inferiores simples. Éstos incluyen:
- Es al menos la diferencia de los tamaños de las dos cadenas.
- Es como máximo la longitud de la cadena más larga.
- Es cero si y solo si las cadenas son iguales.
- Si las cadenas son del mismo tamaño, la distancia de Hamming es un límite superior en la distancia de Levenshtein.
- La distancia de Levenshtein entre dos cadenas no es mayor que la suma de sus distancias de Levenshtein desde una tercera cadena ( desigualdad triangular ).
Un ejemplo donde la distancia de Levenshtein entre dos cuerdas de la misma longitud es estrictamente menor que la distancia de Hamming es dada por el par "falla" y "césped". Aquí la distancia de Levenshtein es igual a 2 (elimine "f" del frente; inserte "n" al final). La distancia de Hamming es 4.
Aplicaciones [ editar ]
En la coincidencia aproximada de cadenas , el objetivo es encontrar coincidencias para cadenas cortas en muchos textos más largos, en situaciones en las que se espera un pequeño número de diferencias. Las cadenas cortas podrían provenir de un diccionario, por ejemplo. Aquí, una de las cadenas es típicamente corta, mientras que la otra es arbitrariamente larga. Esto tiene una amplia gama de aplicaciones, por ejemplo, correctores ortográficos , sistemas de corrección para el reconocimiento óptico de caracteres y software para ayudar a la traducción del lenguaje natural basado en la memoria de traducción .
La distancia de Levenshtein también se puede calcular entre dos cadenas más largas, pero el costo para calcularla, que es aproximadamente proporcional al producto de las dos longitudes de cadena, hace que esto sea poco práctico. Por lo tanto, cuando se usa para ayudar en la búsqueda de cadenas difusas en aplicaciones como el enlace de registros , las cadenas comparadas suelen ser cortas para ayudar a mejorar la velocidad de las comparaciones. [ cita requerida ]
En lingüística, la distancia de Levenshtein se usa como una métrica para cuantificar la distancia lingüística , o cuán diferentes son dos idiomas entre sí. [3] Se relaciona con la inteligibilidad mutua , cuanto mayor es la distancia lingüística, menor es la inteligibilidad mutua y cuanto menor es la distancia lingüística, mayor es la inteligibilidad mutua.
Relación con otras métricas de distancia de edición [ editar ]
Existen otras medidas populares de distancia de edición , que se calculan utilizando un conjunto diferente de operaciones de edición permitidas. Por ejemplo,
- la distancia Damerau-Levenshtein permite la transposición de dos caracteres adyacentes junto con la inserción, eliminación, sustitución;
- la distancia de subsecuencia común más larga (LCS) permite solo la inserción y eliminación, no la sustitución;
- la distancia de Hamming solo permite la sustitución, por lo tanto, solo se aplica a cuerdas de la misma longitud.
- la distancia de Jaro solo permite la transposición .
La distancia de edición generalmente se define como una métrica parametrizable calculada con un conjunto específico de operaciones de edición permitidas, y a cada operación se le asigna un costo (posiblemente infinito). Esto se generaliza aún más por los algoritmos de alineación de secuencias de ADN , como el algoritmo Smith-Waterman , que hacen que el costo de una operación dependa de dónde se aplica.
Calculando la distancia de Levenshtein [ editar ]
Recursivo [ editar ]
Este es un sencillo, pero ineficaz, recursivo C implementación de una
LevenshteinDistance
función que toma dos cadenas, s y t , junto con sus longitudes, y devuelve la distancia Levenshtein entre ellos:
Esta implementación es muy ineficiente porque vuelve a calcular la distancia de Levenshtein de las mismas subcadenas muchas veces.
Un método más eficiente nunca repetiría el mismo cálculo de distancia. Por ejemplo, la distancia de Levenshtein de todos los prefijos posibles podría almacenarse en una matriz donde está la distancia entre los primeros caracteres de la cadena y los primeros caracteres de la cadena . La tabla es fácil de construir una fila a la vez comenzando con la fila 0. Cuando se ha construido toda la tabla, la distancia deseada es .
d[][]
d[i][j]
i
s
j
t
d[len_s][len_t]
Iterativo con matriz completa [ editar ]
-
- Nota: Esta sección utiliza cadenas basadas en 1 en lugar de cadenas basadas en 0
Calcular la distancia de Levenshtein se basa en la observación de que si reservamos una matriz para mantener las distancias de Levenshtein entre todos los prefijos de la primera cadena y todos los prefijos de la segunda, entonces podemos calcular los valores en la matriz en una forma de programación dinámica , y así encuentre la distancia entre las dos cadenas completas como el último valor calculado.
Este algoritmo, un ejemplo de programación dinámica de abajo hacia arriba , se discute, con variantes, en el artículo de 1974 El problema de corrección de cadena a cadena de Robert A. Wagner y Michael J. Fischer. [4]
Esta es una implementación pseudocódigo sencillo para una función
LevenshteinDistance
que toma dos cadenas, s de longitud m , y t de longitud n , y devuelve la distancia Levenshtein entre ellos:
Dos ejemplos de la matriz resultante (al pasar el cursor sobre un número etiquetado se revela la operación realizada para obtener ese número):
|
|
La invariante mantenida en todo el algoritmo es que podemos transformar el segmento inicial en un mínimo de operaciones. Al final, el elemento inferior derecho de la matriz contiene la respuesta.
s[1..i]
t[1..j]
d[i,j]
Iterativo con dos filas de matriz [ editar ]
Resulta que solo se necesitan dos filas de la tabla para la construcción si no se desea reconstruir las cadenas de entrada editadas (se calcula la fila anterior y la fila actual).
La distancia de Levenshtein se puede calcular iterativamente usando el siguiente algoritmo: [5]
Esta variante de dos filas es subóptima: la cantidad de memoria requerida puede reducirse a una fila y una palabra de sobrecarga. [6]
El algoritmo de Hirschberg combina este método con divide y vencerás . Puede calcular la secuencia de edición óptima, y no solo la distancia de edición, en los mismos límites de tiempo y espacio asintóticos. [7]
Variante adaptativa [ editar ]
La variante dinámica no es la implementación ideal. Un enfoque adaptativo puede reducir la cantidad de memoria requerida y, en el mejor de los casos, puede reducir la complejidad del tiempo a lineal en la longitud de la cadena más corta y, en el peor de los casos, no más que cuadrática en la longitud de la cadena más corta . [8]
Aproximación [ editar ]
Complejidad computacional [ editar ]
Se ha demostrado que la distancia de Levenshtein de dos cadenas de longitud n no se puede calcular en el tiempo O (n 2 - ε ) para cualquier ε mayor que cero a menos que la hipótesis del tiempo exponencial fuerte sea falsa.
No hay comentarios:
Publicar un comentario