Saltar al contenido
LeedyBox
Apoyar

Cómo funciona la comparación de textos

Un diff responde a una sola pregunta: ¿qué hay que cambiar para convertir el primer texto en el segundo? Esta guía explica cómo encuentran la respuesta las herramientas diff, cómo leer su resultado y cómo preparar dos versiones para que el resultado muestre los cambios que te importan y no ruido.

Qué muestra un diff

La mayoría de las herramientas diff, incluida Comparar textos de LeedyBox, comparan los textos línea por línea. Cada línea del resultado es de uno de tres tipos: sin cambios (en ambas versiones), eliminada (solo en el original) o añadida (solo en la versión nueva). No existe un tipo «modificada», así que una línea en la que se cambió una palabra aparece dos veces, una como eliminada y otra como añadida:

  Dear customer,
- Your order ships on Monday.
+ Your order ships on Tuesday.
  Kind regards

Las marcas siguen una convención antigua: - para eliminada, + para añadida y un espacio para las líneas sin cambios. Los colores, normalmente rojo y verde, repiten la misma información.

Cómo se emparejan las líneas

Una herramienta diff busca la secuencia más larga de líneas que aparecen en ambos textos en el mismo orden, la subsecuencia común más larga. Esas líneas se mantienen como sin cambios; todo lo demás se marca como eliminado o añadido. Si el original es A, B, C, D y el texto nuevo es A, C, B, D, la secuencia común más larga tiene tres líneas, por ejemplo A, B, D, así que C se muestra como movida: eliminada en un sitio y añadida en otro.

A menudo hay varias respuestas igual de largas, y cada herramienta elige de forma distinta. Por eso el mismo par de archivos puede dar diffs algo diferentes en dos programas. Git usa por defecto el algoritmo de Myers y ofrece patience e histogram como alternativas, que suelen dar resultados más legibles en código con muchas líneas que solo contienen una llave de cierre.

Encontrar la secuencia común más larga requiere un trabajo que crece con el número de líneas de un texto multiplicado por el del otro. La herramienta de LeedyBox aparta primero las líneas idénticas del principio y del final, compara el resto y se detiene con un mensaje cuando ese producto supera 4.000.000, por ejemplo unas 2.000 frente a 2.000 líneas distintas.

Leer los diffs unificados de Git y de las revisiones de código

El control de versiones solo muestra las partes modificadas de un archivo, en el formato de diff unificado:

--- a/config.yml
+++ b/config.yml
@@ -12,4 +12,5 @@
 server:
-  port: 8080
+  port: 8081
+  timeout: 30
 database:

Las líneas --- y +++ nombran el archivo antiguo y el nuevo. La cabecera del bloque @@ -12,4 +12,5 @@ significa: este bloque empieza en la línea 12 y abarca 4 líneas en el archivo antiguo, y empieza en la línea 12 y abarca 5 líneas en el nuevo. Unas pocas líneas sin cambios alrededor de cada cambio, tres por defecto, dan contexto. Una herramienta que muestra el texto completo, como la de LeedyBox, no tiene cabeceras de bloque porque todas las líneas están visibles; por eso su resultado no se puede aplicar como parche.

Preparar los textos para una comparación útil

Un diff compara caracteres, no significado. Pequeñas diferencias invisibles hacen que las líneas difieran y pueden enterrar los cambios reales:

  • Espacios y tabulaciones al final de las líneas, o tabulaciones en una versión y espacios en la otra. Quita los espacios finales y usa la misma sangría en ambas.
  • Caracteres invisibles como un espacio de no separación o un espacio de ancho cero, frecuentes en texto copiado de páginas web y procesadores de texto.
  • Formas Unicode. Una letra acentuada como é puede guardarse como un carácter o como e más un acento combinable. El texto de los nombres de archivo de macOS o de algunos PDF suele usar la segunda forma.
  • Comillas tipográficas y rayas. Los procesadores de texto cambian " por “ ” y - por –, así que una copia pegada ya no coincide con el original en texto plano.
  • Finales de línea. Windows termina las líneas con CR LF y macOS y Linux con LF. Los navegadores convierten todo salto de línea de un cuadro de texto en LF, así que esta diferencia no se ve en la herramienta de LeedyBox, pero sí en las que comparan archivos directamente.
  • Formato de datos y código. Un JSON con otra sangría o con las claves en otro orden hace que casi todas las líneas difieran. Formatea primero ambas versiones igual, por ejemplo con las claves ordenadas y la misma sangría.

Comparar prosa

En documentos normales, un párrafo entero suele ser una sola línea larga, así que una única palabra editada marca todo el párrafo como eliminado y añadido. Dos hábitos ayudan. Antes de comparar, pon cada frase en su propia línea para que solo destaque la frase cambiada. O usa una herramienta que compare palabras dentro de las líneas, como git diff --word-diff o la comparación con control de cambios de los procesadores de texto.

El texto copiado de un PDF tiene su propia trampa: las líneas se cortan donde las cortó la maquetación de la página, y las palabras pueden aparecer divididas con guion al final de línea. Vuelve a unir las líneas de cada párrafo antes de compararlo con un documento de origen.

Lo que un diff por líneas no puede decirte

  • Movimientos. Un párrafo trasladado aparece como eliminado en un sitio y añadido en otro. Algunas herramientas, como git con --color-moved, marcan aparte los bloques movidos.
  • Significado. Dos textos que dicen lo mismo con otras palabras difieren por completo, y un cambio de un solo carácter, como un «not» que falta, parece pequeño pero puede invertir una frase.
  • Contenido binario. Los documentos de Word, los PDF y las imágenes no son texto plano. Extrae primero su texto o usa la función de comparación del programa que los creó.

Privacidad al comparar documentos

Los contratos, los archivos de configuración y los registros suelen contener nombres, claves o contraseñas. Algunos servicios de comparación en línea guardan el texto pegado en sus servidores, a veces bajo un enlace que se puede compartir. Comparar textos de LeedyBox se ejecuta en tu navegador y no envía ni guarda el texto, pero aun así conviene quitar los secretos antes de pegar un archivo de configuración en cualquier sitio.

Preguntas frecuentes

¿Por qué se marca todo un párrafo como cambiado si solo edité una palabra?

El párrafo es una sola línea, y los diffs por líneas comparan líneas completas. Divide el texto en frases o líneas más cortas antes de comparar, o usa una comparación por palabras.

¿Puedo ignorar las diferencias de espacios?

La herramienta de LeedyBox compara las líneas exactamente. Limpia antes ambos textos, por ejemplo quitando los espacios finales y convirtiendo tabulaciones en espacios; git ofrece opciones como --ignore-space-change para archivos.

¿Cómo comparo dos documentos de Word?

Word tiene una función Comparar integrada que también muestra los cambios de formato. Para comparar solo la redacción, copia el texto de ambos documentos en una herramienta de comparación de textos.

¿Qué es una fusión a tres bandas (three-way merge)?

Cuando dos personas editan el mismo original, una herramienta de fusión compara cada versión con el original común. Los cambios en lugares distintos se combinan automáticamente; los cambios en las mismas líneas se señalan como conflictos que una persona debe resolver.