En bref : les lignes "en double" ne sont pas toujours des octets identiques — des espaces finaux, une casse différente ou une normalisation Unicode différente peuvent masquer des doublons exacts ou en créer de faux. Comprendre le fonctionnement de la comparaison rend votre nettoyage précis au lieu de supprimer accidentellement des lignes dont vous aviez besoin. Associez ce guide à Remove Duplicate Lines, Text Difference, Word Frequency et Remove Extra Spaces.
Duplicate Finder sur CharCount supprime les lignes répétées dans les listes, journaux, exports CSV et listes de mots-clés. La partie délicate n'est pas la suppression — c'est de décider ce qui compte comme "la même ligne" avant de supprimer quoi que ce soit.
Références : la référence MDN sur JavaScript Set explique la structure de données que la plupart des outils de déduplication utilisent en interne, le guide MDN sur String.normalize() couvre la normalisation Unicode, et le rapport Unicode sur la segmentation de texte (UAX #29) définit comment le texte est découpé en unités significatives.
Comment fonctionne réellement la détection des doublons
Sous le capot, un outil de lignes en double parcourt chaque ligne et vérifie si elle a déjà été vue — généralement à l'aide d'un Set, qui stocke des valeurs uniques et rejette les doublons exacts en temps constant. C'est rapide, mais "exact" fait beaucoup de travail dans cette phrase : un Set compare les chaînes octet par octet, donc "Pomme" et "pomme" sont des entrées différentes, tout comme "texte " et "texte" (espace final).
C'est pourquoi une déduplication naïve sur un export CSV ou une liste de mots-clés scrapée "échoue" souvent — elle n'est pas cassée, elle compare exactement ce que vous lui avez donné, y compris les espaces invisibles et les différences de casse que vous n'aviez pas remarquées.
Préserver l'ordre vs trier puis dédupliquer
Il existe deux stratégies courantes. La déduplication qui préserve l'ordre conserve la première occurrence de chaque ligne et sa position d'origine — le bon choix pour les journaux, les exports de chat ou tout ce où la séquence a un sens. Trier puis dédupliquer (comme le classique pipeline Unix sort | uniq) réorganise d'abord tout par ordre alphabétique, ce qui est plus rapide sur d'énormes fichiers mais détruit l'ordre d'origine — bien pour une liste de mots-clés, mauvais pour un journal des modifications.
Choisissez la déduplication qui préserve l'ordre chaque fois que "ce qui vient en premier" compte ; choisissez trier-puis-dédupliquer seulement quand l'ordre de la liste était arbitraire au départ.
Où la normalisation change le décompte
Unicode permet au même caractère visible d'exister sous forme de séquences d'octets différentes — un "é" accentué peut être un seul point de code composé (NFC) ou un "e" plus un signe diacritique combinant séparé (NFD). Deux lignes qui semblent identiques à l'écran peuvent échouer à une déduplication par correspondance exacte si l'une provient d'un export Mac et l'autre d'un export Windows, car elles sont dans des formes de normalisation différentes.
String.normalize('NFC') ramène les deux formes à la même représentation avant comparaison, c'est pourquoi un bon outil de doublons normalise le texte d'abord — sinon il sous-compte silencieusement les doublons visuellement identiques mais pas octet par octet.
Un flux de nettoyage plus sûr
- Décidez d'abord : l'ordre des lignes compte-t-il pour cette liste ? Cela détermine votre stratégie.
- Supprimez les espaces finaux et normalisez la casse seulement si la liste est censée être insensible à la casse (une liste de mots-clés l'est souvent ; une liste de mots de passe jamais).
- Lancez la déduplication, puis vérifiez un échantillon des lignes supprimées pour confirmer qu'elles étaient vraiment des doublons.
- Conservez le fichier original jusqu'à ce que vous ayez vérifié la version nettoyée.
Pour tout cas ambigu, faites passer l'avant/après par Text Difference pour voir exactement ce qui a été supprimé, et Word Frequency pour vérifier qu'aucun terme répété légitime n'a été traité comme du bruit.