La herramienta de similitud de cadenas toma dos cadenas de texto, String A y String B, que por defecto son kitten y sitting, y calcula en el navegador la distancia de edición de Levenshtein entre ambas. Con cada pulsación el resultado se recalcula en vivo: tres tarjetas de estadística imprimen la distancia, el porcentaje de similitud y el número de operaciones, como 3, 57.1% y 7 por defecto, y debajo hay una barra de progreso y un guion de edición numerado y coloreado por tipo, que lista cada paso del primer carácter al último. Todo es una pasada de programación dinámica en el navegador sobre las dos cadenas: nada se envía a ningún lado y no hay subida en ningún punto.
Qué recibe la herramienta y qué da
La entrada es dos campos de texto de una línea, lado a lado, etiquetados String A y String B, con fuente monoespaciada, y no se pide nada más. Los defectos son kitten en A y sitting en B, y las mismas dos palabras aparecen como marcadores de los campos. La salida es tres tarjetas en fila: la distancia como entero plano, la similitud como porcentaje con un decimal, y el número de operaciones como entero plano. Debajo de las tarjetas, una barra de progreso se llena al mismo porcentaje, y una lista desplazable imprime el guion de edición completo, cada línea numerada desde 1, cada una coloreada por su tipo: sustitución en amarillo, inserción en azul, borrado en rojo, y coincidencia en el color atenuado del texto. No hay botón: el resultado se recalcula mientras escribes, porque todo el cálculo es una lectura con memoria de los dos valores de los campos.
Cómo se calcula la distancia
La distancia es la distancia de Levenshtein clásica, construida con una tabla de programación dinámica de (longitud de A + 1) por (longitud de B + 1) celdas. Cada celda toma el mínimo de tres vecinas más un coste: la celda de arriba más uno, que es un borrado; la celda de la izquierda más uno, que es una inserción; y la diagonal más un coste de cero cuando los dos caracteres son iguales y uno cuando no, que es una coincidencia o una sustitución. La comparación es carácter a carácter y distingue mayúsculas, así que K y k son caracteres distintos. Para los valores por defecto, kitten contra sitting, la tabla es 7 por 8, 56 celdas, y la celda de abajo a la derecha lee 3: sustituir la k por una s, sustituir la e por una i, e insertar la g. book contra back es 2, las dos posiciones de la o; flaw contra lawn es 2, el borrado de la f y la inserción de la n al final.
Qué muestra la lista de operaciones
La lista es un retroceso a través de la tabla terminada, caminando desde la esquina de abajo a la derecha hasta la de arriba a la izquierda. En cada paso, el recorrido prefiere una coincidencia cuando los dos caracteres actuales son iguales, después una sustitución, después una inserción, y después un borrado, y los pasos recogidos se imprimen invertidos, de primero a último. Ese recorrido da un guion de edición mínimo válido, no el único: distintas elecciones de igual coste en un empate darían otra lista de la misma longitud. Las coincidencias también van en la lista, así que el número de operaciones es la longitud del guion, no la distancia. kitten contra sitting imprime 7 operaciones para una distancia de 3, las cuatro coincidencias siendo i, t, t y n; kitten contra sí misma imprime 6 operaciones, todas coincidencias, para una distancia de 0; flaw contra lawn imprime 5, las dos ediciones más tres coincidencias.
Cómo se lee el porcentaje de similitud
El porcentaje es la longitud mayor menos la distancia, dividida entre la longitud mayor, por cien, impreso con un decimal. Para los defectos, 7 menos 3 entre 7, lee 57.1%, que cae en la banda amarilla: el número y la barra pasan a verde con 70 o más, a amarillo con 40 o más, y a rojo por debajo de 40. Cadenas idénticas leen 100.0% con distancia 0. Un solo cambio de mayúscula, Kitten contra kitten, es una distancia de 1 sobre una longitud de 6, leyendo 83.3%. Un acento cuenta como una diferencia de carácter: café contra cafe es distancia 1, leyendo 75.0%. Y un par de sustitución cuenta como dos unidades, así que el emoji en a😀b contra ab es una distancia de 2, leyendo 50.0%.
Cuando el resultado está vacío
Si cualquiera de los dos campos está vacío después de recortar, el resultado es null y nada debajo de las dos entradas se renderiza: ni tarjetas, ni barra, ni lista. Los espacios en blanco dentro o en los bordes no se recortan de la comparación, solo se usan para comprobar el vaciado, así que un espacio final es una edición: key con un espacio final contra key es una distancia de 1, leyendo 75.0% sobre la longitud de 4. Contra una cadena vacía, la distancia es toda la longitud del otro lado, por eso abc contra el lado vacío calcula 3 y 0.0%, aunque la página no lo muestre mientras el campo sigue vacío.
Qué tan largas pueden ser las cadenas
No hay límite de longitud en el código. El coste es el tamaño de la tabla, (longitud de A + 1) por (longitud de B + 1) celdas, así que el trabajo crece con el producto de las dos longitudes: kitten contra sitting son 56 celdas, dos cadenas de 1,000 caracteres son un millón de celdas aproximadamente, y dos de 10,000 son cien millones, que la página calculará pero despacio. Las entradas son campos de una línea, así que las cadenas muy largas se escriben o pegan en una línea.
Qué no es
La herramienta compara, no transforma el texto: para quitar los espacios en blanco y las líneas sobrantes antes de comparar, usa el Limpiador de espacios; para voltear una cadena de extremo a extremo, eso lo hace el Inversor de texto; y para contar caracteres sin una segunda cadena, eso lo hace el Contador y analizador de caracteres. Para el recorrido de la herramienta de inversión, mira la guía de inversión de texto.