2012-10-14 28 views
12

क्या कोई ऐसा मॉड्यूल है जो पुनर्गठित टेक्स्ट को पेड़ मॉडल में पार्स कर सकता है?पायथन में पुनर्गठित टेक्स्ट का विश्लेषण कैसे करें?

क्या डॉकुटिल या स्फिंक्स ऐसा कर सकता है?

+1

"कौन सा बेहतर है" वकील राय, इसलिए मैंने इसे प्रश्न से हटा दिया है। –

+0

पुनर्गठित पाठ से आपका क्या मतलब है? –

+1

@IonutHulub http://docutils.sourceforge.net/rst.html –

उत्तर

15

Docutils में वास्तव में ऐसा करने के लिए उपकरण होते हैं।

क्या आप शायद चाहते हैं क्या शामिल है पर जानकारी के लिए docutils.parsers.rst

पर पार्सर देखें this page है। docutils/examples.py पर कुछ उदाहरण भी हैं - विशेष रूप से internals() फ़ंक्शन देखें, जो शायद रुचि का है।

+1

बस यह जोड़ने के लिए कि डॉकुटिल्स पुन: संरचित पाठ का संदर्भ कार्यान्वयन है और स्फिंक्स डॉकुटिल्स के शीर्ष पर बनाया गया है। तो हाँ, डॉकुटिल्स निश्चित रूप से इसके लिए सही उपकरण है। – Chris

1

मैं गैरेथ लैटी के उत्तर पर विस्तार करना चाहता हूं। "आप शायद क्या चाहते हैं docutils.parsers.rst पर पार्सर" उत्तर का एक अच्छा प्रारंभिक बिंदु है, लेकिन अगला क्या है? अर्थात्:

पायथन में पुनर्गठित टेक्स्ट को कैसे पार्स करें? नीचे दिए गए

import docutils.nodes 
import docutils.parsers.rst 
import docutils.utils 

def parse_rst(text: str) -> docutils.nodes.document: 
    parser = docutils.parsers.rst.Parser() 
    components = (docutils.parsers.rst.Parser,) 
    settings = docutils.frontend.OptionParser(components=components).get_default_values() 
    document = docutils.utils.new_document('<rst-doc>', settings=settings) 
    parser.parse(text, document) 
    return document 

और जिसके परिणामस्वरूप दस्तावेज़, का उपयोग कर संसाधित किया जा सकता उदाहरण के लिए, जो दस्तावेज़ में सभी संदर्भों को प्रिंट होगा:

नीचे अजगर 3.6 के लिए सटीक जवाब है और docutils 0.14

class MyVisitor(docutils.nodes.NodeVisitor): 

    def visit_reference(self, node: docutils.nodes.reference) -> None: 
     """Called for "reference" nodes.""" 
     print(node) 

    def unknown_visit(self, node: docutils.nodes.Node) -> None: 
     """Called for all other node types.""" 
     pass 

यहाँ यह कैसे चलाएं:

doc = parse_rst('spam spam lovely spam') 
visitor = MyVisitor(doc) 
doc.walk(visitor)