Ringkas: baris "duplikat" tidak selalu berupa byte yang identik — spasi di akhir, huruf besar/kecil yang berbeda, atau normalisasi Unicode yang berbeda bisa menyembunyikan duplikat asli atau menciptakan duplikat palsu. Memahami cara kerja perbandingan membuat pembersihan Anda akurat, bukannya tanpa sengaja menghapus baris yang Anda butuhkan. Padukan panduan ini dengan Remove Duplicate Lines, Text Difference, Word Frequency, dan Remove Extra Spaces.

Duplicate Finder di CharCount menghapus baris duplikat dari daftar, log, ekspor CSV, dan daftar kata kunci. Bagian tersulitnya bukan menghapusnya — melainkan menentukan apa yang dihitung sebagai "baris yang sama" sebelum menghapus apa pun.

Latar belakang: referensi MDN tentang JavaScript Set menjelaskan struktur data yang digunakan sebagian besar alat deduplikasi secara internal, panduan MDN tentang String.normalize() membahas normalisasi Unicode, dan laporan segmentasi teks Unicode (UAX #29) mendefinisikan cara teks dipecah menjadi unit yang bermakna.

Cara Menemukan dan Menghapus Baris Duplikat dalam Teks dengan Cepat

Cara kerja deteksi duplikat sesungguhnya

Di balik layar, alat baris duplikat menelusuri setiap baris dan memeriksa apakah sudah pernah muncul — biasanya menggunakan Set, yang menyimpan nilai unik dan menolak duplikat persis dalam waktu konstan. Ini cepat, tetapi kata "persis" menanggung banyak beban dalam kalimat itu: Set membandingkan urutan unit kode UTF-16 pada string, jadi "Apel" dan "apel" adalah entri berbeda, begitu juga "teks " dan "teks" (dengan spasi di akhir).

Inilah mengapa deduplikasi naif pada ekspor CSV atau daftar kata kunci hasil scraping sering "gagal" — alatnya tidak rusak, ia membandingkan persis apa yang Anda berikan, termasuk spasi tak terlihat dan perbedaan huruf besar/kecil yang tidak Anda sadari.

Mempertahankan urutan vs. urutkan-lalu-deduplikasi

Ada dua strategi umum. Deduplikasi yang mempertahankan urutan menyimpan kemunculan pertama tiap baris dan posisi aslinya — pilihan tepat untuk log, ekspor chat, atau apa pun yang urutannya bermakna. Urutkan-lalu-deduplikasi (seperti pipeline Unix klasik sort | uniq) mengurutkan semuanya secara alfabetis terlebih dahulu, yang lebih cepat pada file besar tetapi merusak urutan asli — cocok untuk daftar kata kunci, salah untuk changelog.

Pilih yang mempertahankan urutan kapan pun "apa yang muncul lebih dulu" penting; pilih urutkan-lalu-deduplikasi hanya jika urutan daftar memang acak sejak awal.

Di mana normalisasi mengubah hasil deduplikasi

Unicode memungkinkan karakter tampak yang sama ada sebagai urutan byte berbeda — huruf beraksen bisa berupa satu titik kode gabungan (NFC) atau huruf dasar plus tanda diakritik gabungan terpisah (NFD). Dua baris yang tampak identik di layar bisa gagal dalam deduplikasi kecocokan persis jika satu berasal dari ekspor Mac dan yang lain dari Windows, karena keduanya berada dalam bentuk normalisasi yang berbeda.

String.normalize('NFC') menyatukan kedua bentuk ke representasi yang sama sebelum dibandingkan, itulah sebabnya alat duplikat yang baik menormalisasi teks terlebih dahulu — jika tidak, alat itu diam-diam melewatkan duplikat yang identik secara visual tetapi memiliki urutan Unicode berbeda.

Alur pembersihan yang lebih aman

  • Putuskan dulu: apakah urutan baris penting untuk daftar ini? Ini menentukan strategi Anda.
  • Hapus spasi di akhir dan normalisasi huruf besar/kecil hanya jika daftar dimaksudkan case-insensitive (daftar kata kunci sering demikian; daftar kata sandi tidak pernah).
  • Jalankan deduplikasi, lalu periksa sampel baris yang dihapus untuk memastikan itu benar-benar duplikat.
  • Simpan file asli sampai Anda memverifikasi versi yang sudah dibersihkan.

Untuk kasus yang meragukan, jalankan sebelum/sesudah melalui Text Difference untuk melihat persis apa yang dihapus, dan Word Frequency untuk memastikan tidak ada istilah berulang yang sah diperlakukan sebagai noise.