Todos los artículos

Text Diff: cómo los algoritmos encuentran la diferencia entre dos textos

El español no es un idioma único sino una familia de variantes regionales, y eso se nota en los archivos de traducción: un mismo string en es-ES y es-MX puede diferir en vocabulario ("ordenador" frente a "computadora") o en el uso de "vosotros" frente a "ustedes" — comparar esas variantes con un diff línea por línea es una tarea habitual en equipos que mantienen localización para varios países hispanohablantes.

La subsecuencia común más larga

El diff clásico busca la subsecuencia común más larga (LCS) de líneas entre dos versiones de un texto. Las líneas que forman parte de ella se consideran sin cambios; el resto se marca como eliminado de la versión antigua o añadido a la nueva. El resultado es el conjunto mínimo de cambios necesarios, no cualquier secuencia posible de borrados e inserciones.

Cómo leer el resultado

Las líneas eliminadas suelen marcarse con - en rojo, y las añadidas con + en verde. Una línea que «cambió» en el sentido cotidiano se muestra técnicamente como la eliminación de la versión antigua más la adición de la nueva — el diff no tiene un concepto propio de «editar» una línea existente.

Por qué la comparación línea por línea engaña a veces

Si se inserta una sola línea nueva en medio de un texto, la comparación puede marcar todas las líneas siguientes como «cambiadas», porque el algoritmo no siempre distingue una inserción de un reemplazo masivo. Esto se ve claramente al comparar archivos .po o .json de traducción entre variantes regionales: una sola cadena nueva en medio del archivo puede disparar decenas de falsas diferencias.

Para qué sirve

  • Comprobar exactamente qué cambió entre dos versiones de un archivo de configuración o documento.
  • Revisar un code review entendiendo la lógica del algoritmo de diferencias.
  • Comparar la salida de un script antes y después de una refactorización para confirmar que no hay regresiones.

Diff a nivel de línea frente a nivel de carácter

La comparación línea por línea funciona bien para código y configuración, pero en prosa o en una frase larga con una sola palabra cambiada, marca toda la línea como eliminada y vuelta a añadir. Un diff a nivel de palabra o carácter dentro de la línea señala con precisión justo la palabra modificada, a costa de mayor complejidad computacional en textos grandes.

Probar la herramienta