लचीले डीआईएफएफ कार्यान्वयन के लिए अनुमानी दृष्टिकोण


12

मैंने काम पर दस्तावेज़ संशोधन की तुलना करने के लिए एक डीआईएफएफ कार्यान्वयन बनाया है। यह An O (ND) डिफरेंशियल अल्गोरिद्म और इसके वेरिएशन पर आधारित है ।

एक चीज जो महत्वपूर्ण हो गई है वह है परिवर्तनों की सूची लेना और उन्हें मानव पठनीय पाठ में व्याख्या करना। जबकि वर्तमान एल्गोरिथ्म बहुत कुशल है, यह इतना अधिक है कि इस पर विस्तार करना मुश्किल है।

लघु प्रश्न

मैं ए * और एक हेयुरिस्टिक का उपयोग करने की कोशिश के बारे में सोच रहा था जो "मुड़ता" के लिए दंड जोड़ता है। विचार करने के लिए किया जा रहा है बाहर चिकनी अनावश्यक "ऐड,, जोड़ें, हटाएं जोड़ने, हटाने, हटाने" यह पार्स करना अधिक आसान कुछ एक मानव पढ़ सकते में है ताकि। मूल रूप से, मेरी सबसे छोटी पथ समस्या को सरल पथ समस्या में बदल दें।

और निश्चित रूप से आउटपुट न बनाएं जो हमेशा " सब कुछ हटाएं , सब कुछ जोड़ें "

क्या यह आवाज़ उचित है?

क्या डीआईएफएफ कार्यान्वयन में हेयुरिस्टिक का उपयोग करने के लिए कोई पूर्वता है? हेयुरिस्टिक क्या है?

समस्या:

यदि एक लंबा वाक्य हटा दिया जाता है और दूसरा लंबा वाक्य हटा दिया जाता है, लेकिन वे कम से कम एक शब्द साझा करते हैं, तो "साथ" कहें। अकेले सामान्य शब्द को छोड़कर (इसे जोड़ना और हटाना दोनों नहीं) सबसे छोटा रास्ता बनाएगा। हालाँकि, यह वास्तव में परिवर्तन के प्रिंट को पढ़ने की कोशिश करने वाले मानव के परिवर्तन के संदर्भ को बाधित करता है।

वर्तमान DIFF के साथ उदाहरण:

  • पुराना पाठ: स्वच्छ: पॉवरवॉश और दुकान की हवा के साथ सूखी हवा।
  • नया पाठ: स्वच्छ: एसीटोन और एक लिंट मुक्त कपड़े से पोंछें।
  • नोट सूची बदलें:
    • "पावरवॉश और ब्लो ड्राई" को "एसीटोन से पोंछ" में बदलें
    • "दुकान हवा" को "एसीटोन और एक लिंट फ्री कपड़े" में बदलें

नोट: "बदलें" का उपयोग "डिलीट 'शॉप एयर' के बजाय 'एसीटोन' जोड़ें"

जैसा कि आप देख सकते हैं, दूसरा नोट सभी संदर्भ खो देता है और पाठ के पूर्ण पुराने और नए पाठ सेटों को देखने के बिना आप यह नहीं समझ सकते कि इसका क्या मतलब है।

विराम चिह्न के बारे में ध्यान दें:

मैंने अलग-अलग "शब्दों" के रूप में विराम चिह्न को हटा दिया है ताकि मुझे मिल जाए

  • जोड़ें "("

के बजाय

  • "रिपेयर" को "रिपेयर" में बदलें

क्योंकि यह अप्रिय था। हालांकि, इसका मतलब है कि अगर दोनों ग्रंथों में एक अल्पविराम भी है (जैसा कि पिछले उदाहरण में "के साथ" शब्द के विपरीत) एक ही बात होती है।

संभावित समाधान:

मुझे लगता है कि मैं एल्गोरिथ्म खोजने के बजाय एक अलग पथ का उपयोग कर सकता हूं जो मुझे अलग-अलग बदलाव "पथों" में वजन जोड़ने के लिए लचीलापन दे सकता है जो किसी व्यक्ति को अधिक समझ में आ सकता है। हो सकता है, मैं भी विराम चिह्न की यात्रा कर सकता था जिसमें विराम चिह्न का वजन बहुत कम हो (यकीन नहीं कि यह अन्य चीजों को कैसे प्रभावित करेगा)।

फिर मुझे निम्न सूची के लिए पिछला उदाहरण मिल सकता है:

  • नोट सूची बदलें:
    • "पावरवॉश और ब्लो ड्राई विद शॉप एयर" को "वेट विथ एसीटोन एंड लिंट फ्री क्लॉथ" में बदलें

देख! बहुत साफ!

मुझे पता है कि मैं एक प्रदर्शन हिट ले जाऊंगा, और मुझे अपने कार्यक्रम का एक बड़ा ओवरहाल करना पड़ सकता है, लेकिन मुझे जो अंतिम परिणाम चाहिए वह होना अधिक महत्वपूर्ण है।

जमीनी स्तर:

फिर, एक डीआईएफएफ कार्यान्वयन में हेयुरिस्टिक का उपयोग करने के लिए कोई पूर्वता है, और यह क्या है?

अन्य विचार? एक उचित समय निवेश? अन्य विचार? अन्य एल्गोरिदम?

अग्रिम में धन्यवाद!

संपादित करें:

मैंने अपने प्रश्न को स्पष्ट करने / ठोस करने की कोशिश की और अपने प्रश्न को सामान्य करने के लिए अपने एल्गोरिथ्म में एक हेयूरिस्टिक जोड़ने के बजाय सामान्य रूप से ए * का उपयोग करने की कोशिश की। मूल रूप से इस उदाहरण में एक ही बात है, लेकिन मुझे अभी भी अधिक सटीक लगता है। यह पोस्ट आनंदमय था।

जवाबों:


1

आप एक vimdiff जैसे संस्करण में कर सकते हैं:

चरण 1: जोड़े गए, हटाए गए और संशोधित वाक्यों की पहचान करना।

चरण 2: प्रत्येक संशोधित वाक्य के लिए, पहले और अंतिम परिवर्तित शब्दों का पता लगाएं, और इन दो शब्दों के बीच में कुछ भी न काटें।

यदि आपको सुसंगत रूप से अधिक व्याकरण संरचना रखने की आवश्यकता है, तो http://www.languagetool.org/ या इस पोस्ट पर दिखाए गए किसी अन्य के आंतरिक भाग को देखें

प्रस्तुति के बारे में: आप उस वाक्य के दोनों संस्करणों को एक के नीचे एक प्रस्तुत कर सकते हैं। आप प्रत्येक परिवर्तन के लिए संदर्भ दिखाना चाह सकते हैं। प्रेरणा के लिए, लेटेक्सडिफ़ को देखें जो नीले रंग में जोड़े गए पाठ को प्रिंट कर सकता है पाठ के अंतिम संस्करण में अंतिम स्थान है, और हटाए गए पाठ को फ़ुटनोट्स (यहां तक ​​कि संगत भी \usepackage[para]{footmisc}) में।


यह केवल प्रदर्शन के मुद्दों को संबोधित करता है, न कि हेयुरिस्टिक मिलान का मुख्य प्रश्न।
एडम जुकरमैन

क्या आपने मेरा दूसरा पैराग्राफ पढ़ा?
user2987828

मैंने किया। क्या आप समझाने की कोशिश कर रहे हैं कि आप इसका विस्तार कर सकते हैं? मेरी पहली (और दूसरी) रीडिंग ने मुझे यह सोचने के लिए प्रेरित किया कि आप अभी भी यह बता रहे थे कि सूचना को कैसे प्रदर्शित करना है, इसे प्रोसेस नहीं करना है।
एडम ज़ुकरमैन

मैं वर्तमान में HTML का उपयोग करने और जोड़ने को हटाने में सक्षम हूं, स्टैकएक्सचेंज एडिट व्यूअर ने मुझे प्रेरित किया है। यह मेरा मुद्दा नहीं है।
ptpaterson

1
मुझे बेहतर तरीके से समझने की जरूरत है कि मतभेदों को खोजने के लिए मैं एक अलग ग्राफ खोज विधि का उपयोग कैसे कर सकता हूं। मेरे पास मूल रूप से प्रभावी रूप से सभी किनारों के बराबर वजन के साथ एक ग्राफ बनाता है और सभी को जोड़ने / हटाने / अंत तक चलने रखने के लिए एक गहराई से पहली खोज करता है। मैं किनारों को अलग-अलग वजन जोड़ने और एक हेयुरिस्टिक जोड़ने पर विचार कर रहा हूं।
ptpaterson
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.