Distancia entre cadenas
TextoTodo se ejecuta en tu navegador: no se sube nada
Cuánto se parecen dos cadenas depende de qué pregunta hagas, y por eso aquí hay cinco algoritmos: son cinco preguntas, no cinco maneras de decir lo mismo. · Levenshtein: cuántas ediciones convierten una en la otra, permitiendo insertar, borrar y sustituir. · Damerau: lo mismo, pero un intercambio de vecinos cuenta como un paso. `teh` → `the` es 2 por distancia de edición y 1 por Damerau, y los vecinos intercambiados son la errata más común que hay. · Hamming: solo sustituciones, y las dos deben medir lo mismo. Esta es la medida del ADN y de la tasa de error de bits. · Jaro-Winkler: una similitud de 0 a 1 en vez de una distancia, con bonus por un prefijo compartido. Viene de comparar nombres. · Subsecuencia común más larga: no hace falta que sea contigua; es la base del diff de texto. ⚠️ Por qué el resultado incluye además una alineación carácter a carácter: una distancia de 3 no es accionable. Necesitas saber dónde, así que la ruta de Levenshtein marca cada posición como coincidencia, sustitución, inserción o borrado. ⚠️ Una trampa con la similitud: aquí se calcula como `1 − distancia ÷ longitud de la más larga`, que es una convención, no la definición. Jaro-Winkler define la similitud a su manera, así que las dos discrepan con la misma entrada: no las compares directamente. Convención de entrada: A en la primera línea, B en la segunda. Todo se ejecuta en tu navegador.
Funciones
- Distancia de edición, con una alineación carácter a carácter y la lista de lo que cambió (qué sustituciones, inserciones y borrados)
- Damerau-Levenshtein: un intercambio de vecinos es un paso, así que `teh` → `the` es 1 y no 2
- Distancia de Hamming: ⚠️ cuando las longitudes difieren lo dice en vez de inventar un número, porque ahí la medida no está definida
- Similitud Jaro y Jaro-Winkler (0–1), con el prefijo limitado a 4 caracteres y el bonus solo por encima del umbral 0.7 del artículo original
- Subsecuencia común más larga: da la longitud y la subsecuencia misma
- ⚠️ La fila de similitud lleva una nota de que es una convención, para que no se compare con Jaro-Winkler
- Los caracteres CJK se alinean a dos columnas, así que la tabla no se desfasa
- ⚠️ Una cadena de más de 5000 caracteres se avisa en vez de calcularse: la matriz colgaría la pestaña, y un resultado congelado no ayuda a nadie
- Mayúsculas opcional, y normalizar solo afecta a la comparación, nunca a las cadenas que se muestran
Cómo se usa
- Pon A en la primera línea y B en la segunda
- Elige el algoritmo: responden a preguntas distintas
- La ruta de distancia de edición da una alineación con la que trabajar
Preguntas frecuentes
- ¿Por qué cinco algoritmos en vez de un solo número de similitud?
- Porque responden a preguntas distintas, y ofrecer uno solo engañaría. `teh` y `the` difieren en 2 por distancia de edición y en 1 por Damerau: cuál es correcto depende de si cuentas pulsaciones o letras cambiadas. Hamming solo admite sustituciones y exige la misma longitud, el caso del ADN y del error de bits. Jaro-Winkler devuelve una similitud en vez de una distancia y se inclina por «el mismo nombre si empieza igual». Elige el equivocado y el número sigue pareciendo un número, pero ya no responde a tu pregunta.
- ¿Por qué la similitud necesita una nota diciendo que es una convención?
- Porque una distancia tiene una definición exacta (cuántas ediciones) y una similitud no: hay varias formas de llevar una distancia a un valor entre 0 y 1. Esta usa `1 − distancia ÷ longitud de la más larga`. Jaro-Winkler define la suya, así que es legítimo que discrepen con la misma entrada. Sin decirlo, la gente compara los dos números y concluye que uno está roto.
- ¿Por qué no se da un número para Hamming cuando las longitudes difieren?
- Porque no está definido. La distancia de Hamming es «en cuántas posiciones difieren dos secuencias de igual longitud», y con longitudes distintas esa pregunta no existe. Se podría fabricar un número (truncando a la más corta, por ejemplo), pero no respondería a nada mientras parecería fiable. Así que la herramienta lo dice.
- ¿Por qué rechaza entradas muy largas?
- Porque todos estos algoritmos construyen una matriz de n × m. Veinte mil caracteres por lado son cuatrocientos millones de celdas: agota la memoria y luego cuelga la pestaña. Además, la comparación de cadenas es para textos cortos: erratas, nombres, identificadores de una línea. Pegar dos documentos largos aquí suele significar que te has equivocado de herramienta, así que a partir de 5000 caracteres lo dice en vez de congelarse.
- ¿Por qué la entrada son dos líneas?
- Porque un cuadro de texto contiene una cadena. La segunda podría ir en un campo de opciones, pero comparar cadenas es un proceso de probar cosas, y tener que salir del área de entrada en cada cambio es incómodo. El precio es que una cadena no puede contener saltos de línea: un compromiso deliberado, porque los algoritmos funcionan perfectamente con cadenas de varias líneas, pero «el carácter número N» deja de poder señalarse en la interfaz.
Herramientas relacionadas
Probador de regex
TextoPrueba expresiones regulares en el navegador: resaltado en vivo, grupos de captura, vista previa de sustitución y código para cinco lenguajes.
Comparar texto
TextoCompara dos textos línea a línea y resalta las líneas añadidas, borradas y sin cambios, alineando cada edición por diferencia mínima. Todo local.
Inspección de texto
TextoEncuentra caracteres invisibles (ancho cero, BOM) y letras confundibles, y muestra normalización, finales de línea y cuatro recuentos.
Contador de palabras
Texto¿Cuánto mide este texto? Cuenta por separado caracteres chinos y palabras inglesas, con caracteres, líneas, bytes UTF-8, tiempo de lectura y SMS.
Limpiar texto
TextoLimpia una columna copiada de un log o una hoja: quita duplicados, ordena, borra líneas vacías, recorta espacios y quita la numeración de línea.
Estilo de nombres
TextoConvierte identificadores entre catorce estilos de nombres, separando bien las palabras de siglas como HTTPServer. Todo en tu navegador.