Perbandingan Dokumen

Perbandingan Dokumen

Perbandingan Dokumen

Panduan ini menunjukkan cara membandingkan dua rangkaian teks dan menghasilkan urutan edit di antara keduanya menggunakan mesin text-diff FOSS Aspose.PDF untuk .NET. Titik masuk untuk model perbandingan ini adalah DiffOperation, sebuah edit tunggal yang ditandai dengan sebuah Operation (Equal, Delete, atau Insert), bersama dengan DiffUtils kelas pembantu untuk menemukan teks umum dan menyusun kembali diff menjadi teks sumber dan tujuan. Sebuah proses optimalisasi terpisah, yang dijelaskan dalam Optimasi Diff, mengkanoinisasi output diff mentah yang dihasilkan dengan cara ini sebelum ditampilkan atau diterapkan.


Model Diff: Operasi dan DiffOperation

Operation adalah enum yang mengklasifikasikan setiap edit dalam diff: Equal menandai rangkaian teks yang tidak berubah, Delete menandai rangkaian yang dihapus dari sumber, dan Insert menandai rangkaian yang ditambahkan di tujuan. DiffOperation menggabungkan nilai Operation dengan Text yang diterapkannya, dan mengimplementasikan IEquatable<DiffOperation> sehingga dua edit dapat dibandingkan untuk kesetaraan.

using Aspose.Pdf.Comparison.Diff;

// A single edit consists of an Operation and the run of text it applies to.
var unchanged = new DiffOperation(Operation.Equal, "Aspose.PDF ");
var removed = new DiffOperation(Operation.Delete, "for .NET Framework");
var added = new DiffOperation(Operation.Insert, "FOSS for .NET");

Console.WriteLine(unchanged.Operation); // Equal
Console.WriteLine(added.Text);          // "FOSS for .NET"

Menemukan Teks Umum dengan DiffUtils

DiffUtils adalah kelas pembantu statis yang digunakan oleh mesin diff untuk menemukan awalan dan akhiran umum yang dibagi oleh dua string sebelum bagian tengah yang berbeda di-diff. FindCommonStartParts menemukan awalan umum, dan FindCommonEndParts menemukan akhiran umum; sebuah overload dari FindCommonEndParts menerima startIndex sehingga pencarian akhiran dapat dibatasi pada teks yang mengikuti awalan yang sudah ditemukan.

string original = "The quick brown fox";
string revised = "The quick red fox jumps";

var commonStart = DiffUtils.FindCommonStartParts(original, revised);
var commonEnd = DiffUtils.FindCommonEndParts(original, revised);

Menyusun Kembali Teks dari Diff

Setelah diff diungkapkan sebagai urutan nilai DiffOperation, DiffUtils dapat merekonstruksi salah satu sisi perbandingan: AssemblySourceText membangun kembali teks asli dari Equal dan Delete runs, dan AssemblyDestinationText membangun kembali teks revisi dari Equal dan Insert runs.

using System.Collections.Generic;

var diffs = new List<DiffOperation>
{
    new DiffOperation(Operation.Equal, "The quick "),
    new DiffOperation(Operation.Delete, "brown"),
    new DiffOperation(Operation.Insert, "red"),
    new DiffOperation(Operation.Equal, " fox")
};

string sourceText = DiffUtils.AssemblySourceText(diffs);
string destinationText = DiffUtils.AssemblyDestinationText(diffs);

Console.WriteLine(sourceText);      // "The quick brown fox"
Console.WriteLine(destinationText); // "The quick red fox"

Membandingkan dan Melaporkan Edit

DiffOperation menimpa Equals, GetHashCode, dan ToString, sehingga edit dapat dibandingkan untuk kesetaraan atau dituliskan ke log dan output tes tanpa kode konversi tambahan.

var a = new DiffOperation(Operation.Equal, "PDF");
var b = new DiffOperation(Operation.Equal, "PDF");

bool same = a.Equals(b); // true - same Operation and Text
Console.WriteLine(a.ToString());

Tips dan Praktik Terbaik

  • DiffOperation bersifat immutable dan mengimplementasikan IEquatable<DiffOperation> — gunakan Equals untuk membandingkan dua edit daripada kesetaraan referensi.
  • Temukan prefiks bersama dengan FindCommonStartParts terlebih dahulu, kemudian berikan panjangnya ke overload startIndex dari FindCommonEndParts untuk menghindari prefiks bersama yang pendek dihitung ganda sebagai bagian dari sufiks.
  • Gunakan AssemblySourceText dan AssemblyDestinationText untuk memverifikasi bahwa urutan nilai DiffOperation melakukan round-trip ke teks asli dan revisi yang tepat sebelum Anda mengandalkannya di tempat lain.
  • Anggap run Operation.Equal sebagai no-op saat merender diff visual, dan hanya sorot run Delete dan Insert runs.
  • Mesin ini membandingkan perbedaan teks, bukan dokumen secara langsung — ekstrak teks yang ingin Anda bandingkan (misalnya, dari halaman atau dokumen) sebelum membuat diff.

Masalah Umum

MasalahPenyebabPerbaiki
AssemblySourceText / AssemblyDestinationText output tidak cocok dengan aslinyaDaftar diffs tidak lengkap atau entri DiffOperation tidak berurutanSertakan setiap penyuntingan dalam urutan, sesuai urutan asli saat penyuntingan terjadi
FindCommonEndParts mengembalikan hasil yang tidak terduga pada string pendek yang miripPencarian akhiran umum tumpang tindih dengan teks yang sudah dicocokkan oleh FindCommonStartPartsBerikan panjang yang dikembalikan oleh FindCommonStartParts sebagai argumen startIndex
Equals mengembalikan false untuk edit yang tampak identikNilai Text berbeda karena spasi atau huruf besar/kecilNormalisasi teks (potong / ubah huruf) sebelum membuat nilai DiffOperation yang ingin Anda bandingkan
Output diff terlihat berisik atau terfragmentasi secara tidak perluUrutan DiffOperation mentah belum dikanonisasiJalankan urutan tersebut melalui tahap optimisasi yang dijelaskan dalam Optimisasi Diff

FAQ

Apa yang dibandingkan oleh engine Diff?

Ia membandingkan rangkaian teks dan menghasilkan urutan nilai DiffOperation yang menggambarkan edit — teks yang tidak berubah, dihapus, atau disisipkan — yang diperlukan untuk mengubah satu string menjadi yang lain.

Jenis edit apa yang didukung oleh Operation?

Tiga: Equal untuk teks yang tidak berubah, Delete untuk teks yang dihapus dari sumber, dan Insert untuk teks yang ditambahkan di tujuan.

Bagaimana cara memeriksa apakah dua edit sama?

Panggil Equals pada sebuah instance DiffOperation, atau bandingkan properti Operation dan Text secara langsung.

Apakah saya dapat memperoleh teks asli dan yang direvisi dari sebuah diff?

Ya — berikan daftar nilai DiffOperation ke DiffUtils.AssemblySourceText untuk teks asli dan DiffUtils.AssemblyDestinationText untuk teks yang direvisi.

Apakah halaman ini mencakup penggabungan atau pembersihan diff?

Tidak — mengkanonisasi diff mentah (menggabungkan run yang bersebelahan, menggeser edit melintasi kesetaraan) dibahas secara terpisah dalam Optimisasi Diff.


API Reference Ringkasan

Kelas / MetodeDeskripsi
OperationEnum yang mengklasifikasikan edit sebagai Equal, Delete, atau Insert
DiffOperationSatu suntingan: sebuah Operation yang dipasangkan dengan Text yang diterapkannya
DiffOperation.OperationNilai Operation untuk suntingan ini
DiffOperation.TextRentang teks yang diterapkan oleh suntingan ini
DiffOperation.EqualsMembandingkan dua suntingan untuk kesetaraan berdasarkan Operation dan Text
DiffOperation.ToStringMenyajikan edit sebagai string untuk logging atau tampilan
DiffUtilsKelas pembantu statis dengan utilitas pembandingan teks
DiffUtils.FindCommonStartPartsMenemukan prefiks umum yang dibagikan oleh dua string
DiffUtils.FindCommonEndPartsMenemukan sufiks umum yang dibagikan oleh dua string, secara opsional mulai dari sebuah indeks
DiffUtils.AssemblySourceTextMenyusun kembali teks asli dari daftar nilai DiffOperation
DiffUtils.AssemblyDestinationTextMenyusun kembali teks yang direvisi dari daftar nilai DiffOperation

Lihat Juga

 Bahasa Indonesia