Có mô-đun nào có thể phân tích cú pháp cấu trúc lại cấu trúc thành mô hình cây không?Làm cách nào để phân tích cú pháp cấu trúc lại trong python?
Docutils hoặc sphinx có thể thực hiện việc này không?
Có mô-đun nào có thể phân tích cú pháp cấu trúc lại cấu trúc thành mô hình cây không?Làm cách nào để phân tích cú pháp cấu trúc lại trong python?
Docutils hoặc sphinx có thể thực hiện việc này không?
Docutils thực sự chứa các công cụ để thực hiện việc này.
Những gì bạn có thể muốn là phân tích cú pháp tại docutils.parsers.rst
Xem this page để biết chi tiết về những gì có liên quan. Ngoài ra còn có một số ví dụ tại docutils/examples.py
- đặc biệt là kiểm tra chức năng internals()
, có thể là sở thích.
Chỉ cần thêm rằng Docutils là triển khai tham chiếu của reStructuredText và Sphinx được xây dựng trên đầu trang của Docutils. Vì vậy, có, Docutils chắc chắn là công cụ chính xác cho việc này. – Chris
Tôi muốn mở rộng khi câu trả lời từ Gareth Latty. "Những gì bạn có thể muốn là trình phân tích cú pháp tại docutils.parsers.rst
" là điểm khởi đầu tốt cho câu trả lời, nhưng điều gì sẽ xảy ra tiếp theo? Cụ thể:
Làm cách nào để phân tích cú pháp cấu trúc lại trong python?
Dưới đây là câu trả lời chính xác cho Python 3.6 và docutils 0.14:
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
Và tài liệu kết quả có thể được xử lý sử dụng, ví dụ, dưới đây, mà sẽ in tất cả tài liệu tham khảo trong tài liệu:
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
Dưới đây là làm thế nào để chạy nó:
doc = parse_rst('spam spam lovely spam')
visitor = MyVisitor(doc)
doc.walk(visitor)
"Đó là tốt hơn" ý kiến mời, vì vậy tôi đã loại bỏ nó khỏi câu hỏi. –
ý của bạn là gì? –
@IonutHulub http://docutils.sourceforge.net/rst.html –