सभी लेख

Text Diff: टेक्स्ट के अंतर ढूँढने का एल्गोरिदम कैसे काम करता है

हिंदी में एक ही बात लिखने के कई मान्य तरीके होते हैं — जैसे "करने वाला" को कभी जोड़कर तो कभी स्पेस के साथ लिखा जाता है, या अंकों को देवनागरी (१२३) और अरबी अंकों (123) दोनों में लिखा जा सकता है। ऐसे मामलों में लाइन-बाय-लाइन diff यह दिखा देगा कि लाइन "बदल गई", भले ही असल मायने में कुछ नहीं बदला — सिर्फ़ वर्तनी की शैली अलग है।

सबसे लंबा साझा उपक्रम

क्लासिक diff तरीका टेक्स्ट के दो वर्शन के बीच लाइनों के सबसे लंबे साझा उपक्रम (LCS) को ढूँढने पर टिका है। जो लाइनें इस उपक्रम का हिस्सा हैं उन्हें अपरिवर्तित माना जाता है; बाकी को पुराने वर्शन से हटाई गई या नए वर्शन में जोड़ी गई के तौर पर चिह्नित किया जाता है। नतीजा बदलावों का न्यूनतम सेट होता है, न कि कोई भी संभव तरीका।

नतीजे को कैसे पढ़ें

हटाई गई लाइनों को आमतौर पर - चिह्न और लाल रंग से, जोड़ी गई लाइनों को + और हरे रंग से दिखाया जाता है। जो लाइन आम बोलचाल में "बदली" लगती है, तकनीकी रूप से वह पुराने वर्शन की एक हटाई गई लाइन और नए वर्शन की एक जोड़ी गई लाइन के रूप में दिखती है — diff के पास लाइन को सीधे "एडिट" करने जैसी कोई अलग अवधारणा नहीं है।

लाइन-बाय-लाइन तुलना कभी-कभी क्यों धोखा देती है

टेक्स्ट के बीच में एक नई लाइन डालने पर लाइन-बाय-लाइन तुलना आगे की सभी लाइनों को "बदली हुई" दिखा सकती है, क्योंकि एल्गोरिदम हमेशा यह नहीं पहचान पाता कि यह इंसर्शन है, सामूहिक बदलाव नहीं। हिंदी-अंग्रेज़ी द्विभाषी डॉक्यूमेंट या सरकारी अनुवादों की तुलना करते समय यही समस्या और बड़ी हो जाती है, क्योंकि दो भाषाओं की लाइन-गिनती अक्सर मेल नहीं खाती।

यह किस काम आता है

  • यह ठीक-ठीक देखना कि किसी कॉन्फ़िग फ़ाइल या दस्तावेज़ के दो वर्शन के बीच क्या बदला।
  • diff एल्गोरिदम के लॉजिक को समझते हुए कोड रिव्यू करना।
  • रीफ़ैक्टरिंग से पहले और बाद की स्क्रिप्ट आउटपुट की तुलना करके यह पक्का करना कि कोई रिग्रेशन नहीं आया।

लाइन-लेवल बनाम कैरेक्टर-लेवल diff

लाइन-बाय-लाइन तुलना कोड और कॉन्फ़िग के लिए ठीक रहती है, लेकिन गद्य या किसी लंबे वाक्य में सिर्फ़ एक शब्द बदलने पर यह पूरी लाइन को हटाई और फिर से जोड़ी गई दिखा देगी। लाइन के भीतर शब्द या कैरेक्टर-लेवल पर diff यह ज़्यादा सटीक रूप से दिखाता है कि असल में कौन-सा शब्द बदला — इसकी कीमत बड़े टेक्स्ट पर ऊँची कम्प्यूटेशनल जटिलता के रूप में चुकानी पड़ती है।

टूल आज़माएँ