दस्तावेज़ तुलना
दस्तावेज़ तुलना
यह गाइड दिखाता है कि दो टेक्स्ट रन की तुलना कैसे करें और उनके बीच संपादन क्रम उत्पन्न करें Aspose.PDF FOSS टेक्स्ट-डिफ इंजन का उपयोग करके .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);डिफ से पाठ को पुनः संयोजित करना
जब कोई diff एक अनुक्रम 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के साथ सामान्य उपसर्ग को खोजें, फिर उसकी लंबाई कोFindCommonEndPartsकेstartIndexओवरलोड में पास करें ताकि छोटा सामान्य उपसर्ग दुगुना गिना न जाए और उपसर्ग का हिस्सा न बन जाए। AssemblySourceTextऔरAssemblyDestinationTextका उपयोग करकेDiffOperationमानों की अनुक्रमणिका को सत्यापित करें कि वह सटीक मूल और संशोधित पाठ तक राउंड-ट्रिप करता है, इससे पहले कि आप इसे कहीं और उपयोग करें।- विज़ुअल diff रेंडर करते समय
Operation.Equalरन को नो-ऑप के रूप में मानें, और केवलDeleteऔरInsertरन को हाइलाइट करें। - यह इंजन सीधे दस्तावेज़ों का डिफ़ नहीं बनाता — तुलना करने के लिए इच्छित टेक्स्ट निकालें (उदाहरण के लिए, किसी पेज या दस्तावेज़ से) डिफ़ बनाने से पहले।
सामान्य समस्याएँ
| समस्या | कारण | सुधार |
|---|---|---|
AssemblySourceText / AssemblyDestinationText आउटपुट मूल के साथ मेल नहीं खाता है | diffs सूची अधूरी है या इसके DiffOperation प्रविष्टियों का क्रम गड़बड़ है | क्रम में प्रत्येक संपादन को शामिल करें, उसी मूल क्रम में जैसा कि संपादन हुए थे |
FindCommonEndParts छोटे, समान स्ट्रिंग्स पर अप्रत्याशित परिणाम देता है | सामान्य प्रत्यय खोज FindCommonStartParts द्वारा पहले से मिलाए गए पाठ के साथ ओवरलैप करती है | FindCommonStartParts द्वारा लौटाई गई लंबाई को startIndex तर्क के रूप में पास करें |
Equals उन संपादनों के लिए false लौटाता है जो समान दिखते हैं | Text मान व्हाइटस्पेस या केस के कारण अलग होते हैं | तुलना करने हेतु DiffOperation मान बनाते समय पहले टेक्स्ट को सामान्यीकृत (ट्रिम / केस-फ़ोल्ड) करें |
| Diff आउटपुट शोरगुल वाला या अनावश्यक रूप से टुकड़े-टुकड़े दिखता है | कच्चे DiffOperation अनुक्रम अभी तक मानकीकृत नहीं किए गए हैं | वर्णित अनुकूलन पास में अनुक्रम को चलाएँ Diff अनुकूलन |
FAQ
डिफ़ इंजन क्या तुलना करता है?
यह टेक्स्ट के क्रम की तुलना करता है और DiffOperation मानों की एक श्रृंखला उत्पन्न करता है जो संपादन का वर्णन करती है — अपरिवर्तित, हटाया गया, या सम्मिलित किया गया टेक्स्ट — जो एक स्ट्रिंग को दूसरी में बदलने के लिए आवश्यक हैं।
Operation कौन से संपादन प्रकारों का समर्थन करता है?
तीन: अपरिवर्तित टेक्स्ट के लिए Equal, स्रोत से हटाए गए टेक्स्ट के लिए Delete, और गंतव्य में जोड़े गए टेक्स्ट के लिए Insert।
मैं कैसे जाँचूँ कि दो संपादन समान हैं या नहीं?
एक DiffOperation इंस्टेंस पर Equals को कॉल करें, या उसके Operation और Text प्रॉपर्टीज़ की सीधे तुलना करें।
क्या मैं एक diff से मूल और संशोधित पाठ वापस प्राप्त कर सकता हूँ?
हाँ — मूल पाठ के लिए DiffOperation मानों की सूची को DiffUtils.AssemblySourceText को पास करें और संशोधित पाठ के लिए DiffUtils.AssemblyDestinationText को पास करें।
क्या यह पेज एक diff को मर्ज करने या साफ़ करने को कवर करता है?
नहीं — कच्चे diff (सन्निकट रन को मिलाना, समानताओं के पार संपादन को स्लाइड करना) को मानकीकृत करना अलग से शामिल है डिफ ऑप्टिमाइज़ेशन.
API Reference सारांश
| क्लास / मेथड | विवरण |
|---|---|
Operation | Enum जो एक संपादन को 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 मानों से संशोधित पाठ को पुनः संयोजित करता है |