Aller au contenu
LeedyBox
Soutenir

Comment fonctionne la comparaison de textes

Un diff répond à une seule question : que faut-il changer pour transformer le premier texte en second ? Ce guide explique comment les outils diff trouvent la réponse, comment lire leur résultat et comment préparer deux versions pour que le résultat montre les changements qui comptent plutôt que du bruit.

Ce que montre un diff

La plupart des outils diff, dont le comparateur de texte LeedyBox, comparent les textes ligne par ligne. Chaque ligne du résultat appartient à l’un de trois types : inchangée (présente dans les deux versions), supprimée (seulement dans l’original) ou ajoutée (seulement dans la nouvelle version). Il n’existe pas de type « modifiée » : une ligne dont un mot a changé apparaît donc deux fois, une fois supprimée et une fois ajoutée :

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

Les marques suivent une ancienne convention : - pour supprimée, + pour ajoutée et une espace pour les lignes inchangées. Les couleurs, en général rouge et vert, répètent la même information.

Comment les lignes sont associées

Un outil diff cherche la plus longue suite de lignes présentes dans les deux textes dans le même ordre : la plus longue sous-séquence commune. Ces lignes restent inchangées ; tout le reste est marqué supprimé ou ajouté. Si l’original est A, B, C, D et le nouveau texte A, C, B, D, la plus longue suite commune compte trois lignes, par exemple A, B, D, et C apparaît comme déplacée : supprimée à un endroit et ajoutée à un autre.

Il existe souvent plusieurs réponses de même longueur, et les outils choisissent différemment. C’est pourquoi la même paire de fichiers peut donner des diffs légèrement différents dans deux programmes. Git utilise par défaut l’algorithme de Myers et propose patience et histogram en alternative, qui donnent souvent des résultats plus lisibles pour du code comportant beaucoup de lignes réduites à une accolade fermante.

Trouver la plus longue suite commune demande un travail qui croît avec le nombre de lignes d’un texte multiplié par celui de l’autre. L’outil LeedyBox met d’abord de côté les lignes identiques au début et à la fin, compare le reste et s’arrête avec un message quand ce produit dépasse 4 000 000, par exemple environ 2 000 contre 2 000 lignes différentes.

Lire les diffs unifiés de Git et des revues de code

Le contrôle de version n’affiche que les parties modifiées d’un fichier, au format diff unifié :

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

Les lignes --- et +++ nomment l’ancien et le nouveau fichier. L’en-tête de bloc @@ -12,4 +12,5 @@ signifie : ce bloc commence à la ligne 12 et couvre 4 lignes dans l’ancien fichier, et commence à la ligne 12 et couvre 5 lignes dans le nouveau. Quelques lignes inchangées autour de chaque changement, trois par défaut, donnent le contexte. Un outil qui affiche tout le texte, comme celui de LeedyBox, n’a pas d’en-têtes de bloc puisque chaque ligne est visible ; c’est pourquoi son résultat ne peut pas être appliqué comme un correctif.

Préparer les textes pour une comparaison utile

Un diff compare des caractères, pas un sens. De petites différences invisibles rendent des lignes différentes et peuvent noyer les vrais changements :

  • Espaces et tabulations en fin de ligne, ou des tabulations dans une version et des espaces dans l’autre. Supprimez les espaces de fin et utilisez la même indentation des deux côtés.
  • Caractères invisibles comme une espace insécable ou une espace sans chasse, fréquents dans le texte copié depuis des pages web et des traitements de texte.
  • Formes Unicode. Une lettre accentuée comme é peut être stockée en un seul caractère ou en e suivi d’un accent combinant. Le texte des noms de fichiers macOS ou de certains PDF utilise souvent la seconde forme.
  • Guillemets typographiques et tirets. Les traitements de texte remplacent " par « » ou “ ” et - par –, si bien qu’une copie collée ne correspond plus à l’original en texte brut.
  • Fins de ligne. Windows termine les lignes par CR LF, macOS et Linux par LF. Les navigateurs convertissent chaque saut de ligne d’une zone de texte en LF ; cette différence n’apparaît donc pas dans l’outil LeedyBox, mais bien dans les outils qui comparent directement des fichiers.
  • Mise en forme des données et du code. Un JSON réindenté ou des clés dans un autre ordre rendent presque chaque ligne différente. Mettez d’abord les deux versions en forme de la même manière, par exemple avec des clés triées et la même indentation.

Comparer de la prose

Dans les documents courants, un paragraphe entier est souvent une seule longue ligne : un seul mot modifié marque alors tout le paragraphe comme supprimé et ajouté. Deux habitudes aident. Avant de comparer, mettez chaque phrase sur sa propre ligne, pour que seule la phrase modifiée ressorte. Ou utilisez un outil qui compare les mots à l’intérieur des lignes, comme git diff --word-diff ou la comparaison avec suivi des modifications des traitements de texte.

Le texte copié depuis un PDF a son propre piège : les lignes se coupent là où la mise en page les coupait, et des mots peuvent être coupés en fin de ligne. Recollez les lignes de chaque paragraphe avant de le comparer à un document source.

Ce qu’un diff par lignes ne peut pas vous dire

  • Les déplacements. Un paragraphe déplacé apparaît comme supprimé à un endroit et ajouté à un autre. Certains outils, comme git avec --color-moved, signalent à part les blocs déplacés.
  • Le sens. Deux textes qui disent la même chose avec d’autres mots diffèrent entièrement, et un changement d’un seul caractère, comme un « not » manquant, paraît minime mais peut inverser une phrase.
  • Le contenu binaire. Les documents Word, les PDF et les images ne sont pas du texte brut. Extrayez d’abord leur texte ou utilisez la fonction de comparaison du programme qui les a créés.

Confidentialité lors de la comparaison de documents

Les contrats, les fichiers de configuration et les journaux contiennent souvent des noms, des clés ou des mots de passe. Certains services de comparaison en ligne enregistrent le texte collé sur leurs serveurs, parfois derrière un lien partageable. Le comparateur de texte LeedyBox fonctionne dans votre navigateur et n’envoie ni n’enregistre le texte, mais il reste prudent de retirer les secrets avant de coller un fichier de configuration où que ce soit.

Questions fréquentes

Pourquoi tout un paragraphe est-il marqué comme modifié alors que je n’ai changé qu’un mot ?

Le paragraphe forme une seule ligne, et les diffs par lignes comparent des lignes entières. Découpez le texte en phrases ou en lignes plus courtes avant de comparer, ou utilisez une comparaison mot par mot.

Puis-je ignorer les différences d’espaces ?

L’outil LeedyBox compare les lignes à l’identique. Nettoyez d’abord les deux textes, par exemple en supprimant les espaces de fin et en convertissant les tabulations en espaces ; pour des fichiers, git propose des options comme --ignore-space-change.

Comment comparer deux documents Word ?

Word possède une fonction Comparer intégrée qui montre aussi les changements de mise en forme. Pour ne comparer que la formulation, copiez le texte des deux documents dans un outil de comparaison de texte.

Qu’est-ce qu’une fusion à trois voies (three-way merge) ?

Quand deux personnes modifient le même original, un outil de fusion compare chaque version à l’original commun. Les changements à des endroits différents sont combinés automatiquement ; les changements sur les mêmes lignes sont signalés comme des conflits qu’une personne doit résoudre.