Outil de Comparaison de Texte
Qu'est-ce que la comparaison de texte ?
Text Diff compare deux versions d’un texte et met en évidence les lignes ou sections ajoutées, supprimées, modifiées ou inchangées. Il sert à relire des extraits de code, fichiers de configuration, traductions, contrats, documents Markdown, versions de prompt, notes de version et journaux sans parcourir les deux copies à la main. L’outil est précieux lorsqu’une petite modification se cache dans un long contenu ou lorsque la mise en forme, les espaces, la ponctuation ou l’ordre ont pu changer par erreur. Un diff ne dit pas si la nouvelle version est juste; il montre précisément où les textes divergent pour concentrer la relecture.
Mode d'emploi
Mode d'emploi
- Collez le texte original dans la zone de saisie de gauche
- Collez le texte modifié dans la zone de saisie de droite
- Le système calcule automatiquement les différences et les met en évidence ; la barre d'état affiche le nombre de lignes ajoutées et supprimées.
Conseils de relecture
- Normalisez les fins de ligne et les espaces avant la comparaison quand le vrai changement porte sur le contenu et non la mise en forme.
- Pour du code ou des textes juridiques, vérifiez les modifications en surbrillance manuellement ; la comparaison automatique montre les différences mais ne juge ni l'intention ni la correction.
Cas d’utilisation
Principe technique
Le diff au niveau des lignes repose sur le problème de la Plus Longue Sous-séquence Commune (LCS) : étant donné deux séquences de lignes A et B, trouver la plus longue séquence apparaissant dans les deux dans le même ordre relatif. Tout ce qui ne fait pas partie de la LCS est soit une insertion (présent dans B mais pas dans A), soit une suppression (présent dans A mais pas dans B), ce qui correspond exactement aux lignes rouges et vertes affichées dans la vue côte à côte. La table de programmation dynamique naïve de la LCS s'exécute en O(M * N) en temps et en espace, où M et N sont les nombres de lignes des deux entrées. En pratique, le moteur de diff utilise l'algorithme de Myers (Eugene Myers, 1986), qui résout le même problème en O((M + N) * D) temps, où D est la distance d'édition entre les deux fichiers. Pour deux fichiers en grande partie identiques, D est petit et Myers est considérablement plus rapide que la table complète de PD ; le backend de diff par défaut de Git, la vue de diff web de GitHub et la plupart des panneaux de diff des IDE utilisent Myers ou l'un de ses descendants (patience diff, histogram diff) pour cette raison. Le patience diff aligne d'abord sur les lignes uniques, ce qui produit des hunks plus lisibles lorsque des blocs de code ont été déplacés. La sortie est une séquence d'opérations égal/insertion/suppression rendue sous forme de diff unifié dans les outils CLI (avec des en-têtes de hunk @@ -m,n +p,q @@ et un seul préfixe +/- par ligne) ou sous forme de lignes colorées côte à côte dans une interface web. Les diffs au niveau du caractère ou du mot utilisent le même algorithme sur une séquence à granularité plus fine, souvent associé à la distance de Levenshtein (coûts d'insertion + suppression + substitution) lorsque les substitutions doivent être comptées comme une seule opération. La bibliothèque diff-match-patch de Neil Fraser est l'implémentation de référence pour les diffs au niveau du caractère côté web.
- Base LCS : la Plus Longue Sous-séquence Commune des deux tableaux de lignes définit les lignes inchangées ; tout le reste est une insertion ou une suppression
- Myers diff (1986) : O((M + N) * D) temps où D est la distance d'édition ; backend par défaut dans Git, GitHub et la plupart des vues de diff des IDE
- PD naïve : O(M * N) en temps et espace — acceptable pour les petites entrées mais la mémoire quadratique la rend impraticable pour les grands fichiers
- Patience diff : aligne d'abord sur les lignes uniques ; produit des hunks plus propres pour les blocs déplacés ou réordonnés
- Formats de sortie : diff unifié avec en-têtes de hunk @@ -m,n +p,q @@ pour CLI ; lignes colorées côte à côte pour l'interface web
- Granularité : les diffs ligne / mot / caractère appliquent le même algorithme à une segmentation différente de l'entrée
- Distance de Levenshtein : comptabilise les insertions + suppressions + substitutions ; diff-match-patch est la bibliothèque web de référence
Exemples
Repérer un changement d'un mot dans un paragraphe
Original :
The server starts on port 3000 by default.
Modifié :
The server starts on port 8080 by default.
Résultat : 1 ligne modifiée (3000 -> 8080)Comparer deux versions d'un bloc de configuration
Original : Modifié :
timeout: 30 timeout: 60
retries: 3 retries: 3
debug: false debug: true
log_level: info
Résultat : 2 lignes ajoutées, 2 lignes suppriméesDiff des notes de version avant/après
Supprimé (rouge) :
- Fixed login redirect on Safari 16
Ajouté (vert) :
- Fixed login redirect on Safari 16 and 17
- Added dark mode preference sync
Résultat : 2 lignes ajoutées, 1 ligne suppriméeDétecter des clés JSON réordonnées
Original : Modifié :
{ "name": "alice", { "id": 1,
"id": 1, "name": "alice",
"role": "admin" } "role": "admin" }
Résultat : 2 lignes modifiées (ordre des clés différent, valeurs identiques)FAQ
Quel type de diff affiche-t-il ?
Un diff au niveau ligne. La page montre deux panneaux côte à côte : les lignes supprimées surlignées en rouge à gauche, les lignes ajoutées surlignées en vert à droite. Les numéros de ligne aident à localiser les changements. La barre d'état indique le nombre de lignes ajoutées et supprimées.
Quel algorithme de diff est utilisé ?
La page utilise un algorithme de plus longue sous-séquence commune (LCS) pour calculer le script d'édition au niveau ligne. Pour des documents de taille classique, cela tourne en temps réel pendant que vous tapez. L'algorithme trouve la séquence la plus courte d'insertions et de suppressions pour transformer le texte de gauche en celui de droite.
Pourquoi le diff diffère-t-il de git diff ?
Git utilise sa propre implémentation avec des algorithmes configurables. Cette page utilise un diff JavaScript basé sur LCS qui s'exécute entièrement dans le navigateur. Le format de sortie et les frontières de hunk peuvent différer légèrement de git diff, mais la détection d'édition sous-jacente est correcte pour une comparaison textuelle au niveau ligne.
Puis-je faire un diff dans un seul paragraphe ou une phrase ?
Oui : collez chaque version dans un côté. La page offre aussi un surlignage au niveau caractère à l'intérieur des lignes modifiées, ce qui permet à un « renommer foo en bar » d'apparaître comme un remplacement inline plutôt que comme deux changements indépendants.
Ignore-t-il les espaces ?
Non. Le diff est sensible aux espaces par défaut. Les différences d'espacement (espaces en fin de ligne, lignes vides supplémentaires, fins de ligne différentes) apparaissent comme des changements.
Puis-je faire un diff structurel sur du JSON ou du XML ?
Le diff de texte pur est basé sur les lignes. Pour comparer du JSON par clé (clé « a » déplacée de la position 1 à 3 avec la même valeur = pas de changement), utilisez un outil de diff conscient du JSON (jsondiffpatch, json-diff). Cette page sert à la comparaison textuelle.
Mon texte est-il envoyé ?
Non. Le diff s'exécute dans votre navigateur. Les deux entrées sont traitées localement et ne sont pas transmises.