Motores de búsqueda12 min de lectura

Algoritmos de comparación de texto y su uso en la comparación de marcas

Levenshtein, Jaccard, TF-IDF y embeddings semánticos: una guía técnica de los algoritmos que permiten medir cuánto se parecen dos nombres de marca.

Comparar dos textos parece trivial hasta que intentas programarlo. ¿"Coca" y "Koka" son parecidos? ¿Cuánto? ¿Y "Aurora" y "Amanecer"? Detrás de cada respuesta hay un algoritmo distinto. Esta guía recorre las familias de algoritmos de comparación de texto y cómo se aplican a la detección de conflictos entre marcas.

El problema de comparar cadenas

Una marca es, en su nivel más básico, una cadena de caracteres. Pero "parecerse" tiene varias capas:

  • Similitud léxica: se escriben parecido (mismos caracteres).
  • Similitud fonética: suenan parecido (mismo sonido).
  • Similitud semántica: significan lo mismo (mismo concepto).

Cada capa requiere su propia familia de algoritmos. Veámoslas.

Familia 1: Distancia de edición

Estos algoritmos miden cuántas operaciones hacen falta para transformar una cadena en otra.

Distancia de Levenshtein

La más conocida. Cuenta el número mínimo de inserciones, eliminaciones y sustituciones de un solo carácter.

Ejemplo: de "Marca" a "Marco" hay distancia 1 (una sustitución). De "Coca" a "Koka" hay distancia 2.

Se calcula con programación dinámica, llenando una matriz que compara prefijos de ambas cadenas. Para normalizar el resultado entre 0 y 1, se divide la distancia entre la longitud de la cadena más larga.

Damerau-Levenshtein

Una variante que añade la transposición de caracteres adyacentes como una sola operación. Es útil porque muchos errores tipográficos son transposiciones.

Ejemplo: "Adidsa" → "Adidas" es una sola transposición.

Distancia de Jaro-Winkler

Diseñada originalmente para comparar nombres propios. Da más peso a los prefijos coincidentes, lo que la hace excelente para marcas, donde el inicio del nombre suele ser lo más distintivo.

Familia 2: Similitud basada en conjuntos

En lugar de operaciones de edición, estos métodos tratan las palabras como conjuntos de fragmentos y miden su solapamiento.

N-gramas

Un n-grama es una subcadena de n caracteres consecutivos. "Marca" en bigramas (n=2) es: ma, ar, rc, ca.

Coeficiente de Jaccard

Mide la similitud entre dos conjuntos como el tamaño de la intersección dividido por el de la unión:

  • Si dos marcas comparten muchos n-gramas, su índice de Jaccard se acerca a 1.
  • Es robusto a diferencias de longitud y a reordenamientos parciales.
AlgoritmoQué mideFortaleza para marcas
LevenshteinOperaciones de ediciónErratas y variantes cortas
Damerau-LevenshteinEdición + transposiciónErrores tipográficos
Jaro-WinklerCoincidencia con peso al prefijoNombres con inicio común
Jaccard sobre n-gramasSolapamiento de fragmentosDistinta longitud, reordenamientos

Familia 3: Modelos vectoriales clásicos

Cuando comparamos frases o nombres compuestos, conviene representarlos como vectores.

TF-IDF

TF-IDF (Term Frequency – Inverse Document Frequency) pondera cada término por su frecuencia en el texto y su rareza en el conjunto. Palabras genéricas como "compañía" o "del" pesan poco; las distintivas, mucho. Luego se compara con similitud del coseno.

Ejemplo: en "Cafetería del Valle" la palabra distintiva es "Valle", no "del" ni "Cafetería". TF-IDF lo refleja automáticamente.

Familia 4: Similitud fonética

La similitud léxica no detecta que "Koaka" suena como "Coca". Para eso se codifica el sonido de la palabra.

  • Soundex: convierte la palabra en un código de letra + dígitos según las consonantes.
  • Metaphone y Double Metaphone: producen una representación más precisa de la pronunciación, con soporte multilingüe.

Dos nombres con el mismo código fonético se consideran homófonos. En español conviene adaptar las reglas al seseo, el yeísmo y la equivalencia B/V.

Familia 5: Similitud semántica con embeddings

La frontera más reciente. Algunos conflictos no son ni léxicos ni fonéticos, sino de significado: "Aurora" y "Amanecer", o "Manzana" y "Apple".

Los embeddings de palabras (word embeddings) representan cada término como un vector en un espacio donde la cercanía equivale a relación semántica. Modelos modernos basados en transformadores generan embeddings sensibles al contexto.

Ejemplo: "Aurora" (luz del amanecer) y "Dawn" (amanecer en inglés) tienen vectores cercanos, así que se detecta su parentesco conceptual aunque no compartan ni letras ni sonido.

Para comparar, de nuevo se usa similitud del coseno entre los vectores.

Cómo se combinan en la práctica

Ningún algoritmo único cubre todas las capas. Un motor de comparación de marcas serio orquesta varios:

1. Normaliza el texto (minúsculas, sin acentos ni signos).

2. Calcula similitud léxica (Levenshtein, Jaccard, Jaro-Winkler).

3. Calcula similitud fonética (Metaphone adaptado al español).

4. Calcula similitud semántica (embeddings).

5. Combina las puntuaciones en un veredicto único de colisión.

El resultado es mucho más fiable que cualquier algoritmo aislado: se detectan tanto las copias evidentes como las coincidencias sutiles de sonido o significado.

Conclusión

La comparación de texto no es un problema único, sino un conjunto de problemas en capas. Levenshtein y sus parientes resuelven la similitud de escritura; Soundex y Metaphone, la de sonido; TF-IDF y los embeddings, la de significado. La detección moderna de conflictos de marca combina lo mejor de cada familia para no dejar pasar ningún tipo de coincidencia.

Referencias

  • Levenshtein, V. I. (1966). "Binary codes capable of correcting deletions, insertions, and reversals". Soviet Physics Doklady, 10(8), 707–710.
  • Damerau, F. J. (1964). "A technique for computer detection and correction of spelling errors". Communications of the ACM, 7(3), 171–176.
  • Winkler, W. E. (1990). "String Comparator Metrics and Enhanced Decision Rules in the Fellegi-Sunter Model of Record Linkage". Proceedings of the Section on Survey Research Methods.
  • Manning, C. D., Raghavan, P., & Schütze, H. (2008). Introduction to Information Retrieval. Cambridge University Press.
  • Jaccard, P. (1912). "The distribution of the flora in the alpine zone". New Phytologist, 11(2), 37–50.
  • Philips, L. (2000). "The Double Metaphone Search Algorithm". C/C++ Users Journal, 18(6).
  • Mikolov, T., Chen, K., Corrado, G., & Dean, J. (2013). "Efficient Estimation of Word Representations in Vector Space". ICLR Workshop.
  • Devlin, J., Chang, M.-W., Lee, K., & Toutanova, K. (2019). "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding". NAACL.

¿Listo para buscar tu marca?

Verifica si tu marca ya existe en el repositorio del SENADI antes de invertir en el registro.

Buscar mi marca gratis