مقارنة المستندات

مقارنة المستندات

مقارنة المستندات

هذا الدليل يوضح كيفية مقارنة نصين وإنتاج تسلسل التعديلات بينهما باستخدام محرك الفروقات النصية المفتوح المصدر Aspose.PDF لـ .NET. نقطة الدخول لهذا النموذج المقارن هي DiffOperation, تعديل واحد معلم بـ Operation (Equal, Delete, أو Insert)، مع DiffUtils فئة مساعدة لتحديد النص المشترك وإعادة تجميع الفرق مرة أخرى إلى نص المصدر والوجهة. تمريرة تحسين منفصلة، موصوفة في تحسين الفروقات, يُقنِّع مخرجات الفرق الخام التي تم إنتاجها بهذه الطريقة قبل أن تُعرض أو تُطبق.


نموذج الفروقات: العملية و DiffOperation

Operation هو التعداد الذي يصنف كل تعديل في الفروقات: Equal يحدد مقطع نص غير مُغيّر، Delete يحدد مقطع تم إزالته من المصدر، وInsert يحدد مقطع تم إضافته إلى الوجهة. DiffOperation يربط قيمة Operation مع Text التي ينطبق عليها، ويُطبق IEquatable<DiffOperation> بحيث يمكن مقارنة تعديلين للتماثل.

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"

تحديد النص المشترك باستخدام DiffUtils

DiffUtils هي فئة مساعدة ثابتة يستخدمها محرك الفروقات للعثور على البادئة واللاحقة المشتركة بين سلسلتين قبل أن يتم فحص الجزء الأوسط المختلف. FindCommonStartParts يحدد البادئة المشتركة، وFindCommonEndParts يحدد اللاحقة المشتركة؛ نسخة مُحمَّلة من FindCommonEndParts تقبل startIndex بحيث يمكن تحديد بحث اللاحقة إلى النص الذي يلي بادئة تم تحديدها مسبقًا.

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);

إعادة تجميع النص من فرق

بمجرد أن يتم التعبير عن الفرق كسلسلة من قيم DiffOperation، يمكن لـ DiffUtils إعادة بناء أي جانب من المقارنة: AssemblySourceText يعيد بناء النص الأصلي من تشغيلات Equal وDelete، وAssemblyDestinationText يعيد بناء النص المعدل من تشغيلات Equal وInsert.

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"

مقارنة وتقرير التعديلات

DiffOperation يتجاوز Equals وGetHashCode وToString، لذا يمكن مقارنة التعديلات للتماثل أو كتابتها إلى السجلات ومخرجات الاختبار دون شفرة تحويل إضافية.

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());

نصائح وأفضل الممارسات

  • DiffOperation غير قابل للتغيير ويطبق IEquatable<DiffOperation> — استخدم Equals لمقارنة تعديلين بدلاً من مساواة الإشارة.
  • حدد البادئة المشتركة باستخدام FindCommonStartParts أولاً، ثم مرّر طولها إلى التحميل الزائد startIndex لـ FindCommonEndParts لتجنب احتساب البادئة المشتركة القصيرة مرتين كجزء من اللاحقة.
  • استخدم AssemblySourceText وAssemblyDestinationText للتحقق من أن سلسلة قيم DiffOperation تعود إلى النص الأصلي والمعدل بدقة قبل الاعتماد عليها في أماكن أخرى.
  • اعتبر تشغيلات Operation.Equal كعمليات لا تفعل شيئًا عند عرض فرق بصري، وقم بتسليط الضوء فقط على تشغيلات Delete وInsert.
  • هذه الأداة تقارن النصوص، لا المستندات مباشرة — استخرج النص الذي تريد مقارنته (على سبيل المثال، من صفحة أو مستند) قبل إنشاء المقارنة.

المشكلات الشائعة

مشكلةالسببإصلاح
إخراج AssemblySourceText / AssemblyDestinationText لا يتطابق مع الأصليينقائمة diffs غير مكتملة أو أن إدخالات DiffOperation الخاصة بها غير مرتبةضمّن كل تعديل في السلسلة، بالترتيب الأصلي الذي حدثت فيه التعديلات
FindCommonEndParts يعطي نتيجة غير متوقعة على سلاسل قصيرة ومتشابهةبحث اللواحق المشتركة يتداخل مع النص الذي تم مطابقته بالفعل بواسطة FindCommonStartPartsمرّر الطول الذي يُعيده FindCommonStartParts كمعامل startIndex
Equals يُعيد false للتعديلات التي تبدو متطابقةالقيم Text تختلف بالمسافات أو حالة الأحرفقم بتطبيع النص (trim / case-fold) قبل إنشاء قيم DiffOperation التي تنوي مقارنتها
مخرجات Diff تبدو صاخبة أو مُجزأة بصورة غير ضروريةالتسلسلات الخام DiffOperation لم يتم تقنينها بعدقم بتمرير التسلسل عبر مرحلة التحسين الموصوفة في تحسين الفروقات

FAQ

ماذا تقارن أداة الـ Diff؟

إنها تقارن سلاسل النص وتنتج تسلسلاً من قيم DiffOperation التي تصف التعديلات — النص غير المتغير، المحذوف أو المُدرج — اللازمة لتحويل سلسلة إلى أخرى.

ما أنواع التعديلات التي يدعمها Operation؟

ثلاثة: Equal للنص غير المتغير، Delete للنص الذي أزيل من المصدر، وInsert للنص المضاف في الوجهة.

كيف يمكنني التحقق مما إذا كان التعديلان متماثلان؟

استدعِ Equals على كائن DiffOperation، أو قارن خصائصه Operation وText مباشرةً.

هل يمكنني استرجاع النص الأصلي والنص المعدل من diff؟

نعم — مرّر قائمة قيم DiffOperation إلى DiffUtils.AssemblySourceText للنص الأصلي وDiffUtils.AssemblyDestinationText للنص المعدل.

هل تغطي هذه الصفحة دمج أو تنظيف diff؟

لا — تقنين الفارق الخام (دمج السلاسل المتجاورة، وتمرير التعديلات عبر التطابقات) يتم تغطيته بشكل منفصل في تحسين الفروقات.


API Reference ملخص

الفئة / الطريقةوصف
Operationتعداد يصنّف تعديلًا كـ Equal، Delete أو Insert
DiffOperationتحرير واحد: Operation مقترن بـ Text الذي يُطبَّق عليه
DiffOperation.Operationقيمة Operation لهذا التحرير
DiffOperation.Textمجموعة النص التي ينطبق عليها هذا التحرير
DiffOperation.Equalsيقارن تحريرين للتأكد من تساويهما وفقًا لـ Operation وText
DiffOperation.ToStringيعرض تعديلًا كسلسلة للتسجيل أو العرض
DiffUtilsفئة مساعدة ثابتة تحتوي على أدوات مقارنة النصوص
DiffUtils.FindCommonStartPartsيبحث عن البادئة المشتركة بين سلسلتين
DiffUtils.FindCommonEndPartsيبحث عن اللاحقة المشتركة بين سلسلتين، ويمكن البدء من فهرس اختياريًا
DiffUtils.AssemblySourceTextيعيد تجميع النص الأصلي من قائمة قيم DiffOperation
DiffUtils.AssemblyDestinationTextيعيد تجميع النص المعدل من قائمة قيم DiffOperation

انظر أيضاً

 العربية