Tous les articles

Text Diff : comment les algorithmes trouvent la différence entre deux textes

Sur Légifrance, chaque article de loi modifié est présenté avec les mots supprimés barrés et les mots ajoutés soulignés, directement dans le texte consolidé — une convention de suivi des modifications bien antérieure au diff informatique, héritée de la pratique juridique française de comparaison de versions successives d'un texte normatif.

La plus longue sous-séquence commune

L'approche classique du diff repose sur la recherche de la plus longue sous-séquence commune (LCS) de lignes entre deux versions d'un texte. Les lignes qui en font partie sont considérées comme inchangées ; tout le reste est marqué comme supprimé de l'ancienne version ou ajouté à la nouvelle. Le résultat est un ensemble minimal de modifications, pas n'importe quelle suite possible de suppressions et d'ajouts.

Comment lire le résultat

Les lignes supprimées sont généralement marquées par - en rouge, et les lignes ajoutées par + en vert. Une ligne « modifiée » au sens courant est techniquement affichée comme la suppression de l'ancienne ligne plus l'ajout de la nouvelle — le diff n'a pas de notion propre d'édition d'une ligne en place.

Pourquoi la comparaison ligne par ligne n'est pas toujours intuitive

Insérer une seule nouvelle ligne au milieu d'un texte peut faire apparaître toutes les lignes suivantes comme « modifiées », car l'algorithme ne distingue pas toujours une insertion d'un remplacement massif. Les juristes qui comparent des versions successives d'un contrat avec un outil automatique connaissent bien ce piège : renuméroter une seule clause peut faire signaler tout le reste du document comme réécrit.

À quoi ça sert

  • Vérifier exactement ce qui a changé entre deux versions d'un fichier de configuration ou d'un document.
  • Relire une code review en comprenant la logique de l'algorithme de recherche de différences.
  • Comparer la sortie d'un script avant et après un refactoring pour confirmer l'absence de régression.

Diff au niveau des lignes contre au niveau des caractères

La comparaison ligne par ligne convient au code et aux fichiers de configuration, mais pour de la prose ou une longue phrase dont un seul mot a changé, elle marque toute la ligne comme supprimée puis réajoutée. Un diff au niveau des mots ou des caractères à l'intérieur de la ligne montre précisément le mot modifié — au prix d'une complexité de calcul plus élevée sur de grands textes.

Essayer l'outil