markdown文档格式分析,再使用python对md文件进行结构化拆解

news/2025/12/6 18:28:19/文章来源:https://www.cnblogs.com/xiaojp65536/p/19316355

一、markdown文档

Markdown 文档本质上是:一个树状结构(Block 级) + 行内结构(Inline 级)

Block 级元素(结构):

  • heading_open → inline → heading_close

  • paragraph_open → inline → paragraph_close

  • list_open → list_item_open → inline → list_item_close

  • blockquote_open → ...

  • fence(代码块)

Inline 级元素(在一行内出现):

  • text

  • image

  • link_open → inline → link_close

  • strong_open / strong_close

  • em_open / em_close

md文件结构规律

一个 block 总是成对出现

MarkdownToken
# 标题 heading_open → inline → heading_close
段落 paragraph_open → inline → paragraph_close
列表项 list_item_open → inline → list_item_close

 

content 只用于“行内”文本,不用于结构 token

typecontent
heading_open ""
inline 整行文本(包含 md 语法)
text 文本内容
image alt 文本(即 ![alt] )

 

二、python包:markdown-it

1. markdown-it 将 Markdown 文档解析成一个扁平化的 Token 列表,每个 Token 都有下列属性:

type—— “语法元素类型”(关键),决定 Token 代表哪种 Markdown 结构,常见type包括:

语法 type
# 标题 heading_open, heading_close
段落 paragraph_open, paragraph_close
行内内容 inline
图片 ![]() image
列表 - item bullet_list_open, list_item_open

 

tag —— 对应 HTML 标签名称(比如 h1, p, img)

类型 tag
heading_open(###) h3
paragraph_open p
image img

content —— 文本内容(只有 inline 或 text 子 Token 才有)

  • 对于 inline → content 是整行的原始文本(如 "docker images"

  • 对于 text → content 是纯文字(真正的文本节点)

  • 对于 image → content 是 alt 内容(比如 "image-2025..."

attrs —— HTML 属性(图片的 src/alt/title 全在这里)

2. Markdown → Token 映射

假设有markdown原文:

### 语法

docker images![image-2025xxxx](docker学习-use-images/image-2025xxxx.png)

使用代码将文档进行拆解:

from pathlib import Path
from markdown_it import MarkdownItmd = MarkdownIt()md_path = Path(r"./docker学习.md")
md_text = md_path.read_text(encoding="utf-8")tokens = md.parse(md_text)for t in tokens:print(f"type: {t.type}, tag: {t.tag}, content: {t.content}, attrs: {t.attrs}")

得到语义树:

heading_open  (tag h3)inline -> text("语法")
heading_close (tag h3)paragraph_openinline -> text("docker images")
paragraph_closeparagraph_openinline -> image (alt="image-2025...", src="docker学习-use-images/...")
paragraph_close

这套结构适合用代码进行文档分析。

3. markdown-it的一些用法

简要示例

from markdown_it import MarkdownIt# 安装 & 创建解析器
md = MarkdownIt()# 将文本渲染成html格式字符串
text = """
### 标题这是一个段落,包含 **粗体** 和 *斜体*。![图1](images/img1.png "图1标题")
"""html = md.render(text)
print(html)# 将文本解析成token列表,需要先将md文档逐行读取到变量里面
md_path = Path(r"./docker学习.md")
md_text = md_path.read_text(encoding="utf-8")tokens = md.parse(md_text)for t in tokens:print(f"type: {t.type}, tag: {t.tag}, content: {t.content}, attrs: {t.attrs}")

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/990446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMake Uninstall

CMake does not provide a built-in uninstall command, but you can implement an uninstall process manually using the install_manifest.txt file generated during installation. Below are the steps to add an…

实用指南:通过约束编程优化医疗智能系统的伦理风险降低(下)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【Java 开发日记】大家来说一下 Mybatis 的缓存机制

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Day12-20251206

本文介绍了Java中的运算符使用和优先级规则。主要内容包括:1) IDEA快捷键Shift+Enter换行和Shift+Ctrl+Enter自动补全;2) 自增自减运算符++/--的前置和后置区别;3) 逻辑运算符&&、||、!的用法;4) 位运算符…

悬架设计计算工具:开启悬架设计学习与实践的钥匙

悬架设计计算工具:开启悬架设计学习与实践的钥匙pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

Solon AI 开发学习17 - generate - 使用复杂提示语

本文介绍了两种使用GeneratePrompt接口的方法:快速方法和定制提示语结构体。快速方法通过键值对直接构建请求,适用于简单场景;定制方法通过定义结构体类实现更规范的参数管理。两种方法都演示了如何调用阿里百炼API…

别再发愁!对比多款后锁定这6个型号,挑选高中学习机,不花冤枉钱

高中阶段的学习节奏快、知识点密集,不少家长希望通过学习机为孩子提供辅助,但面对市场上琳琅满目的产品,很容易陷入“选贵的就是好的”误区。事实上,适合高中学习的核心在于知识点覆盖的精准度、错题体系的实用性、…

[UVA1316 Supermarket]

UVA1316 Supermarket题目大意给一些物品,有过期时间和收益,让你安排卖出的顺序,使得最后的收益最大。对于每件物品,我们考虑贪心思路,每个物品我们尽量让其在接近过期的时候将其卖掉,这样的话,我们在排序的时候…

使用typora来写md文件时配置文件存放图片的路径

前言 当前typora写md文件,存放文件,如果是windows系统则默认存放在c盘的默认绝对路径中,这个时候如果想发送md文件给其他人,很容易造成图片的遗漏。 所以我们需要设置,让文件所处位置相对简单,然后提升发送md文件…

靠谱厂房拆迁法律机构排行榜 2026:专业解析与高性价比解决方案

在城市更新与产业升级的浪潮中,企业厂房拆迁纠纷日益频发,涉及土地补偿、停产损失、安置重建等多重复杂权益,一旦处理不当将给企业带来致命打击。北京作为法治资源集中地,汇聚了众多律师、律师事务所及在线律师咨询…

滥用ESC10:通过注册表配置不当实现权限提升的ADCS攻击分析

本文深入分析了Active Directory证书服务(ADCS)中的ESC10漏洞。该漏洞源于两项注册表键值(StrongCertificateBindingEnforcement和CertificateMappingMethods)的错误配置,攻击者可借此滥用Kerberos或Schannel映射…

[NOI2015 程序自动分析]

题目大意给定一些简单的约束关系,即相等和不等关系,让你判断是否合理。简单来说,我们对于 \(x_i = x_j\),说明 \(x_i\) 和 \(x_j\) 属于一个集合,将其合并即可,对于不等关系时,我们只需要判断其是否在一个集合里…

【基础】Unity着色器网格和计算对象介绍

Mesh网格定义与核心概念 顶点(Vertex)的本质与特性 顶点是构成3D模型的基本几何单元,每个顶点在三维空间中具有明确的坐标位置(x,y,z)。在Unity中,顶点不仅包含位置信息,还承载着模型【Unity Shader Graph 使用…

【基础】Unity着色器网格和计算对象介绍

Mesh网格定义与核心概念 顶点(Vertex)的本质与特性 顶点是构成3D模型的基本几何单元,每个顶点在三维空间中具有明确的坐标位置(x,y,z)。在Unity中,顶点不仅包含位置信息,还承载着模型【Unity Shader Graph 使用…

基于大内容的保险数据管理与可视化分析平台

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:C++ 闭散式和开散式的模拟实现

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于先验地图的无人机路径规划

基于先验地图的无人机路径规划 任务1.先验地图数据处理 任务2.路径规划算法实现(A*) 参考已有工作1.基础知识学习 快速补充一些基础知识,后续边做边学:C++基础语法,点云地图处理 C++语法学习主要参考黑马程序员C+…

首单半价对话框的实现

需求分析 我们需要实现一个"首单半价"对话框,具有以下特性:每次用户打开应用时自动显示用户在应用内跳转时不显示可以通过横幅按钮手动触发显示提供良好的视觉体验和动画效果技术实现方案 1. 状态管理kotl…

Anchor宽高比

Anchor宽高比是Anchor的形状参数,与尺寸(Scale)共同决定每个候选框的具体高宽像素值。 通用场景(COCO)yaml 复制# 3种比例覆盖大部分目标 ASPECT_RATIOS: [0.5, 1.0, 2.0] # 0.5: 高大于宽 (人、柱子) # 1.0: 正方形…

SAM3模型来了,手把手带你运行SAM3模型代码,SAM3模型初探!

Meta开源SAM3图像分割模型,支持文本提示精准分割目标。本文提供Windows本地部署详细教程,包含环境配置、依赖安装、权重下载等完整步骤,并解决triton缺失和权重访问等常见问题。通过修改源码加载本地权重文件sam3.p…