FreeToGenerate.com

Siete respuestas a una pregunta, porque no son la misma pregunta.

Dos cadenas, todas las medidas

MedidaPuntuaciónEdiciones
Levenshtein0,6672
Damerau-Levenshtein0,8331
Jaro0,944
Jaro-Winkler0,961
Dice0,400
Jaccard0,250
Subsecuencia común más larga0,833

Ediciones es la distancia en bruto antes de convertirla en puntuación: cuántos cambios de un carácter hacen falta. Las demás medidas no cuentan ediciones en absoluto.

0,711

La diferencia entre la puntuación más alta y la más baja es justo lo importante. Son preguntas distintas, no formas distintas de decir una misma respuesta.

¿Cuál es la coincidencia más cercana?

MedidaSu elecciónPuntuación
Levenshteinrelieve0,857
Damerau-Levenshteinreceive0,857
Jaroreceive0,952
Jaro-Winklerreceive0,967
Dicerelieve0,667
Jaccardrelieve0,500
Subsecuencia común más largareceive0,857

2 ganadores distintos entre las medidas, de una sola lista.

Levenshtein
Las menos inserciones, eliminaciones y sustituciones que convierten una cadena en la otra, dividido por la más larga.
Damerau-Levenshtein
Lo mismo, más intercambiar dos caracteres contiguos como una sola edición. Por eso un corrector considera que a hte le falta un solo cambio para ser the, y no dos.
Jaro
Caracteres coincidentes dentro de una ventana de la mitad de la cadena más larga, penalizado por cuántas de esas coincidencias están desordenadas.
Jaro-Winkler
Jaro con una bonificación por coincidir en los primeros caracteres, porque los nombres para los que se diseñó se escriben mal al final mucho más que al principio.
Dice
El doble de los pares de letras contiguas compartidos sobre el total de pares. Importa el orden dentro del par; la posición en la cadena no.
Jaccard
Los pares de letras contiguas compartidos sobre su unión. Ordena igual que Dice, pero siempre puntúa más bajo.
Subsecuencia común más larga
La secuencia más larga de caracteres que aparece en ambas cadenas en el mismo orden, aunque no sean contiguos, sobre la cadena más larga.

Todo se calcula en tu navegador sobre puntos de código, así que un emoji cuenta como un carácter y no como dos. Jaro y Jaro-Winkler reproducen las cifras publicadas junto a sus definiciones.

También disponible en: English · Português · Français · العربية

Similitud de textos: siete medidas en paralelo

Todas las medidas habituales de similitud entre cadenas calculadas a la vez, para que veas cuál necesita de verdad tu problema.

¿Qué es la similitud de textos?

La similitud de textos es un número que dice cuánto se parecen dos cadenas, normalmente escalado de forma que 1 es idéntico y 0 no tiene nada en común. Es lo que hay debajo de la búsqueda difusa, de limpiar duplicados en una lista de clientes, de cazar una errata en un código de producto y de casar un nombre tecleado por una persona con otro guardado en una base de datos.

El problema es que no hay una única definición. Levenshtein cuenta cuántas ediciones de un carácter separan a las dos. Jaro cuenta caracteres coincidentes y cuánto están desordenados. Dice y Jaccard ignoran la posición por completo y comparan conjuntos de pares de letras contiguas. La subsecuencia común más larga pregunta cuánto de una cadena sobrevive dentro de la otra en orden. Son preguntas distintas y dan respuestas distintas.

Esta página calcula siete a la vez en lugar de elegir una por ti, porque elegir una es la decisión de verdad y casi siempre se toma sin darse cuenta.

Cómo usarla

  1. Pon dos cadenas en los cuadros de arriba. Todas las medidas puntúan el par al instante, con el recuento de ediciones en bruto al lado de las dos que se basan en distancias.
  2. Después prueba el panel de ordenación. Dale algo que buscar y una lista de candidatas, una por línea. Cada medida ordena la lista por su cuenta e informa de su ganadora.
  3. Mira discrepar a las ganadoras. La línea de debajo de esa tabla cuenta cuántas respuestas distintas salieron de una sola lista. Cuando dice más de una, la medida que habrías elegido estaba haciendo trabajo de verdad.

Cuánto discrepan, medido

No es una preocupación teórica. Tomando el código fuente de este sitio como corpus y sacando tríos aleatorios de identificadores en camelCase, Levenshtein y Jaro-Winkler colocan las mismas dos candidatas en orden distinto el 27,7% de las veces sobre 3.479 pares. Frente a la medida Ratcliff/Obershelp que usa difflib de Python, Levenshtein discrepa en el 25,5%.

El efecto es peor en el caso que la gente construye de verdad: elegir la coincidencia más cercana de una lista. Eligiendo entre un grupo de 400 candidatas, Levenshtein y Jaro-Winkler nombraron ganadora distinta en el 62% de las consultas. Esa cifra depende del tamaño del grupo, así que toma el 27,7% como el titular honesto y esta otra como demostración de hacia dónde se mueve.

El ejemplo cargado por defecto es el caso clásico. Busca la errata recieve entre receive, relieve, reprieve, retrieve y recipe. Levenshtein a secas prefiere relieve, porque está a una sustitución mientras que receive está a dos ediciones: las letras estaban intercambiadas y Levenshtein no tiene concepto de intercambio. Damerau-Levenshtein, que cuenta cambiar dos caracteres contiguos como una sola edición, puntúa receive y relieve igual con 0,857 y elige la primera de las dos. Jaro-Winkler pone receive estrictamente arriba con 0,967. Tres comportamientos de una misma lista, y solo uno te da la palabra que querías.

¿Cuál deberías usar?

Para erratas humanas, Damerau-Levenshtein suele ser mejor opción por defecto que Levenshtein a secas, porque intercambiar dos letras es uno de los fallos más frecuentes y Levenshtein lo cobra el doble. Para nombres, Jaro-Winkler se diseñó justo para eso en la oficina del censo de Estados Unidos, y su bonificación por prefijo refleja que la gente acierta el principio de un nombre mucho más que el final.

Para textos más largos donde se mueven palabras enteras, las medidas de conjuntos van mejor. Dice y Jaccard comparan bolsas de pares de letras contiguas, así que reordenar les importa mucho menos, y ordenan igual entre sí: Jaccard simplemente puntúa siempre más bajo para el mismo par, lo que sorprende a quien compara umbrales copiados de sitios distintos.

La única generalización honesta es que un umbral no es transferible. Un corte de 0,8 significa algo bastante distinto con Jaccard que con Jaro-Winkler, y para el par MARTHA y MARHTA cargado arriba las puntuaciones van de 0,250 a 0,961 según a qué medida preguntes. Cualquier umbral que heredes de una entrada de blog va pegado a una medida, y la medida casi nunca se indica.

Lo que esta página no puede decirte

Ninguna de estas medidas entiende el significado. Gato y felino puntúan casi cero; colour y color puntúan alto. Si necesitas saber que dos frases dicen lo mismo con otras palabras, la similitud entre cadenas es la herramienta equivocada y ningún umbral la va a salvar.

También se basan en caracteres, y carácter aquí significa punto de código y no lo que tú llamarías una letra. Eso arregla el fallo habitual de que un emoji cuente como dos caracteres y dos emojis distintos salgan a dos ediciones, pero se queda corto de los grupos de grafemas: una bandera o un emoji con tono de piel siguen siendo varios puntos de código, y las definiciones clásicas de estas medidas no entran ahí.

Por último, el panel de ordenación resuelve los empates por orden de entrada. Cuando dos candidatas puntúan igual gana la que esté más arriba en tu lista, y eso es una propiedad de esta herramienta y no de la medida. Se muestran las puntuaciones para que veas cuándo ha pasado.

¿Por qué es gratis?

Las siete medidas son unas pocas decenas de líneas de aritmética que se ejecutan en tu navegador. Nada de lo que escribes se sube, no se registra nada y no hay cuenta que crear.

Sin registro, sin límites y sin marca de agua en nada de lo que copies.