2012-09-29 19 views
18

मैं क्या हासिल करने जा रहा हूँ का वर्णन का निर्माण:एक HTML Diff/पैच एल्गोरिथ्म

  • इनपुट 2 (एन आवश्यक नहीं है) HTML दस्तावेज़।
  • एचटीएमएल प्रारूप
  • दो दस्तावेज़ों को डिफाई करें - बाहरी शैलियों महत्वपूर्ण नहीं हैं लेकिन दस्तावेज़ में कुछ भी इनलाइन शामिल की जाएगी।
  • एचटीएमएल ब्लॉक तत्व स्तर पर डेल्टा निर्धारित करें।

अंतिम बिंदु का विस्तार:

एक ही साइट के दो पृष्ठों कल्पना कीजिए कि दोनों शेयर क्या शायद एक आम पूर्वज कि नकल किया गया/चिपकाया गया है के साथ एक साइडबार। प्रत्येक पृष्ठ में साइडबार में कुछ मामूली परिवर्तन होते हैं। Diff इन परिवर्तनों को प्रकट करेगा, फिर मैं उनके द्वारा साझा किया गया पहला सामान्य ब्लॉक तत्व खोजने के लिए डीओएम "चल सकता है" या केवल <body> पर डिफ़ॉल्ट हो सकता है। इस मामले में, मैं इसे चलना चाहता हूं और उसे ढूंढना चाहता हूं, ओह, वे एक आम <div id="sidebar"> साझा करते हैं।

मैं डेज़ीडिफ से परिचित हूं और आवेदन समान है - सीएमएस दुनिया में।

मैंने Google diff-patch लाइब्रेरी के साथ भी खेलना शुरू कर दिया है।

मैं इस तरह के गैर-विशिष्ट प्रश्न पूछना चाहता हूं कि किसी भी सलाह या मार्गदर्शन की मांग करें जो किसी को लगता है कि सहायक हो सकता है। वर्तमान में यदि आपने मेरे सिर पर बंदूक डाली और कहा "इसे कोड करें" मैं पाइथन में डेज़ीडिफ को फिर से लिखूंगा और इस ब्लॉक-स्तरीय तर्क को जोड़ दूंगा। लेकिन मैंने सोचा कि शायद एक बेहतर तरीका है और Anyone have a diff algorithm for rendered HTML? के उत्तरों ने मुझे गर्म और अस्पष्ट महसूस किया।

+1

संबंधित: http://stackoverflow.com/questions/1576459/generate-pretty-diff-html-in-python। –

+0

मुझे आपके सटीक एप्लिकेशन के बारे में निश्चित नहीं है लेकिन एक डॉम रैंकिंग एल्गोरिदम का उपयोग प्रासंगिक सामग्री निकालने के लिए http://www.readability.com/ जैसी परियोजनाओं द्वारा किया जाता है। यदि आप केवल पृष्ठ के मूल पर भिन्न होना चाहते हैं, तो ऐसा कुछ समझ सकता है –

+0

इस परियोजना के बारे में एक अपडेट सुनना अच्छा लगेगा; यदि आप जो खोज रहे थे उसे ढूंढने में कामयाब रहे और यदि आप इसे खोलने की योजना बना रहे हैं :) – onassar

उत्तर

9

यदि आप खरोंच से शुरू करने जा रहे थे, तो एक उपयोगी खोज शब्द "पेड़ diff" होगा।

here पर एक बहुत ही बढ़िया ब्लॉग पोस्ट है, हालांकि मुझे इसे "डेज़ीडिफ़ पायथन" गुगल करके मिला है, इसलिए मुझे लगता है कि आप इसे पहले ही देख चुके हैं। सभी रोचक सैद्धांतिक सामानों के अलावा, उन्होंने Logilab's xmldiff के अस्तित्व का उल्लेख किया है, जो एक ओपन-सोर्स एक्सएमएल पायथन में लिखा गया है। यह एक सभ्य प्रारंभिक बिंदु हो सकता है - डेज़ीडिफ को लपेटने या पुन: कार्यान्वित करने की कोशिश करने से शायद कम सही हो सकता है, लेकिन शायद उठना और जल्दी से चलना आसान है।

pypi पर भी html-tree-diff नहीं है, मैं इस Quora लिंक के माध्यम से पाया जो: http://www.quora.com/Is-there-any-good-Python-implementation-of-a-tree-diff-algorithm

cstheory.stackexchange पर efficient diff algorithm for trees and Levenshtein distance पर diffing पेड़ के बारे में कुछ सैद्धांतिक सामान नहीं है।

बीटीडब्लू, बस स्पष्टीकरण के लिए, दो डीओएम पेड़ों को अलग करने के बारे में बात कर रहे हैं, लेकिन आवश्यक रूप से diff/किसी विशेष HTML में वापस विलय नहीं करना चाहिए, है ना? (संपादित करें: दाएं।) यहां पर बहुत से समान प्रश्न वाले प्रश्न वास्तव में पूछ रहे हैं, "मैं लाल रंग की रेखाओं को लाल रंग में कैसे जोड़ सकता हूं और लाइनों को हरा जोड़ सकता हूं" या "मैं मिलान पैराग्राफ को दृष्टि से कैसे बना सकता हूं", सही पर छोड़कर सैद्धांतिक कठोर हिस्सा "मैं पहली जगह में दो डोम पेड़ कैसे फैल सकता हूं" और व्यावहारिक कठिन हिस्सा "मैं इससे पहले भी संभवतः एक डीओएम पेड़ में एचटीएमएल को कैसे खराब कर सकता हूं"। :)

+0

यह सही है - इस क्षेत्र में ऐसे लोगों के बारे में शोर का एक टन है जो HTML में एक भिन्नता प्रस्तुत करना चाहते हैं। मुझे इसके बारे में परवाह नहीं है, मैं अलग-अलग पृष्ठों और संस्करणों के बीच मतभेदों के अधिक शक्तिशाली विज़ुअलाइजेशन को चलाने के लिए आउटपुट ब्लॉक-एलिमेंट डेल्टा का उपयोग करने के बजाय अलग-अलग अंतर को प्रस्तुत नहीं करूँगा। अपने इनपुट की सराहना करें, यह ऐसा कुछ नहीं है जैसा मैंने पहले बनाया है और मैं यह सुनिश्चित करने की कोशिश करना चाहता हूं कि मैं इसे सोचने या कुछ भी याद करने में नहीं हूं। –

1

मुझे पता है कि यह प्रश्न अजगर से संबंधित हैं लेकिन आप 3 डीएम - एक्सएमएल 3-मार्ग विलय और अंतरण उपकरण (जावा में डिफ़ॉल्ट कार्यान्वयन) देख सकते हैं, लेकिन यहां http://www.cs.hut.fi/~ctl/3dm/thesis.pdf का उपयोग करने वाले एल्गोरिदम का वर्णन करने वाला वास्तविक पेपर है, और यहां site का लिंक है।

इस पर दोष यह है कि आपको दस्तावेज़ को साफ़ करना होगा और इसे XML के रूप में पार्स करने में सक्षम होना चाहिए।

1

आप दोनों दस्तावेजों को पार्स करने के लिए beautifulsoup का उपयोग करके शुरू कर सकते हैं।

  • उपयोग prettify कम या ज्यादा मानकीकृत HTML और diff उन दोनों के रूप में दस्तावेज प्रस्तुत करने के लिए:

    तो फिर तुम एक विकल्प नहीं है।

  • parse trees की तुलना करें।

उत्तरार्द्ध आपको उदा। तत्वों को त्यागें जो केवल प्रस्तुति को प्रभावित करते हैं, सामग्री नहीं। पूर्व शायद आसान है।

संबंधित मुद्दे