2014-12-08 5 views
11

से पार्स और ट्रैवर्स तत्व हे दोस्तों, मैं पार्स करना चाहता हूं और फिर मार्कडाउन फ़ाइल को पार करना चाहता हूं। मैं xml.etree.ElementTree जैसे कुछ के लिए खोज रहा हूं लेकिन मार्कडाउन के लिए।एक मार्कडाउन फ़ाइल

एक विकल्प HTML में कनवर्ट करना होगा और फिर HTML को पार्स करने के लिए दूसरी लाइब्रेरी का उपयोग करना होगा। लेकिन मैं उस कदम से बचना चाहता हूं।

धन्यवाद।

उत्तर

8

जैसा कि एक और टिप्पणी का उल्लेख किया गया है, पायथन-मार्कडाउन में extension API है और यह हुड के नीचे xml.etree.ElementTree का उपयोग होता है। आप सैद्धांतिक रूप से एक एक्सटेंशन बना सकते हैं जो उस आंतरिक ElementTree ऑब्जेक्ट को एक्सेस करता है और जो भी आप चाहते हैं उसे करें। हालांकि, यदि आप कच्चे एचटीएमएल (एचटीएमएल इकाइयों समेत) और/या कोडेलाइट एक्सटेंशन का उपयोग करते हैं, तो आपको एक अपूर्ण दस्तावेज मिलेगा क्योंकि कुछ पोस्टप्रोसेसर हैं जो धारावाहिक स्ट्रिंग पर चलते हैं। इसलिए मैं वास्तव में आपके इच्छित उद्देश्य के लिए इसे पुनः संयोजित नहीं करूँगा (पूर्ण प्रकटीकरण: मैं पायथन-मार्कडाउन का डेवलपर हूं)।

मार्कडाउन कार्यान्वयन here मौजूद होने पर एक लंबी सूची है। उस सूची में शुद्ध पायथन कार्यान्वयन में, Mistune एकमात्र ऐसा है जिसे मैं जानता हूं कि दो चरणों की प्रक्रिया का उपयोग करता है (चरण एक पार्स पेड़ देता है, चरण दो पार्स पेड़ को क्रमबद्ध करता है - आपको केवल चरण एक की आवश्यकता होती है)। मैंने कभी भी मिस्ट्यून का व्यक्तिगत रूप से उपयोग नहीं किया है और इसकी स्थिरता या सटीकता से बात नहीं कर सकता है, लेकिन यह बहुत अच्छी जावास्क्रिप्ट लाइब्रेरी Marked का पाइथन क्लोन माना जाता है।

यदि आप चारों ओर खोज करते हैं, तो मेरा मानना ​​है कि सी कार्यान्वयन में से कुछ समान पैटर्न का उपयोग करते हैं। उनमें से कुछ में पहले से ही एक पाइथन आवरण हो सकता है। यदि नहीं, तो ctypes के साथ एक रैपर बनाने में बहुत मुश्किल नहीं होनी चाहिए।

यदि आप एक कार्यान्वयन है कि आप एक पूर्ण पार्स पेड़ नहीं देता है उपयोग करने के लिए, तो मैं जिसके परिणामस्वरूप HTML LXML (सी lib का एक अजगर आवरण) या html5lib (शुद्ध अजगर) का उपयोग कर पार्स करने का सुझाव देते हैं चाहते हैं किसी कारण से, जो दोनों एलिमेंटट्री ऑब्जेक्ट को वापस कर सकते हैं और बहुत तेज (विशेष रूप से एलएक्सएमएल) और अमान्य HTML (विशेष रूप से html5lib, जो वास्तविक दुनिया में वास्तविक ब्राउज़र की तरह काम करता है) के अधिक क्षमा कर रहे हैं। याद रखें कि मार्कडाउन में कच्चे HTML हो सकते हैं और अधिकांश मार्कडाउन पार्सर्स इसे केवल वैध, या नहीं के माध्यम से पास कर सकते हैं। यदि आप इसे एक्सएमएल आधारित पार्सर (जैसे xml.etree) या सख्त एचटीएमएल पार्सर (मानक lib में html.parser की तरह) के साथ पार्स करने का प्रयास करते हैं, तो एक अवैध टैग HTML पार्सर को क्रैश कर सकता है।

2

मार्कडाउन पार्सिंग मॉड्यूल हैं, लेकिन एक्सएमएल और एचटीएमएल प्रोसेसिंग मॉड्यूल के विपरीत, वे मार्कटाउन रेंडरिंग पैकेज के भीतर एम्बेडेड होते हैं, बजाय मनमाने ढंग से मार्कडाउन पार्सिंग काम के लिए प्रस्तुत किए जाते हैं।

तो विकल्प एक पाइथन में मार्कडाउन प्रोसेसर को देखना होगा, जिसमें से there are a ton, पार्सर को सबसे अधिक पसंद करें, और इसे अपनाने के लिए।

जो आप पूरा करना चाहते हैं उसके आधार पर, हालांकि, मार्कडाउन प्रोसेसिंग मॉड्यूल को ढूंढना आसान हो सकता है जो पहले से ही एक्स्टेंसिबल है, और प्रोसेसिंग एक्सटेंशन का निर्माण कर सकता है। पायथन-मार्कडाउन, उदाहरण के लिए, an complete extension mechanism है।