跳转到内容

文档内容转 Markdown:结构化到可读格式的工程实践

文档内容转 Markdown:结构化到可读格式的工程实践

学习目标

读完本章后,你将能够:

  • 理解文档解析中间表示到 Markdown 的转换流程
  • 掌握多模态 Markdown 与 NLP Markdown 的区别与适用场景
  • 处理表格、公式、图片在 Markdown 中的表达
  • 实现符合人类阅读顺序的文档重组

前置知识


1. 从中间表示到 Markdown

文档解析系统通常采用两阶段转换策略:

中间表示(middle_json)的核心结构

{
"page_info": [{"w": 612, "h": 792}, ...],
"blocks": [
{
"type": "title",
"bbox": [100, 50, 500, 80],
"lines": [{"text": "文档标题", "bbox": [...]}]
},
{
"type": "table_body",
"bbox": [...],
"html": "<table>...</table>"
}
]
}

为什么要用中间表示?

  • 不同解析引擎(Pipeline/VLM/Hybrid)的输出格式不同
  • 统一的中间格式使输出模块可以复用
  • 便于调试、可视化、质检

2. 两种 Markdown 输出模式

2.1 多模态 Markdown(mm_markdown)

保留所有视觉元素的引用,适合多模态模型:

# 文档标题
这是正文段落,包含行内公式 $E = mc^2$。
![figure_caption](images/fig1.png)
| 列1 | 列2 | 列3 |
|-----|-----|-----|
| A | B | C |
$$
\int_{0}^{\infty} e^{-x^2} dx = \frac{\sqrt{\pi}}{2}
$$

特点

  • 图片以 ![](images/xxx.png) 引用
  • 表格转换为 HTML 或 Markdown 表格
  • 公式转换为 LaTeX 格式
  • 保留图片描述(caption)和脚注(footnote)

2.2 NLP Markdown(nlp_markdown)

纯文本模式,移除视觉元素引用,适合文本模型:

# 文档标题
这是正文段落,包含行内公式 $E = mc^2$。
[图片:figure_caption]
[表格:列1=A, 列2=B, 列3=C]
行内公式已保留为 LaTeX。

特点

  • 图片以占位文本 [图片:描述] 代替
  • 表格以自然语言描述
  • 仍然保留行内和行间公式(LaTeX)
  • 适合纯文本 LLM 处理

3. 关键转换策略

3.1 阅读顺序重建

PDF 等格式存储的是页面内的绝对位置信息,不保证阅读顺序。需要根据以下规则重建:

  1. 页面内排序:从上到下、从左到右
  2. 分栏处理:先左栏后右栏
  3. 跨页元素合并:识别跨页表格和连续段落
  4. 页眉页脚过滤:去除重复出现的页眉页脚内容

3.2 表格转换

表格在 Markdown 中有两种表示方式:

方式适用场景示例
HTML 表格复杂表格(合并单元格、嵌套表头)<table><tr><td rowspan="2">...</td>
Markdown 表格简单表格(无合并单元格)| A | B | C |

策略

  • 简单表格 → Markdown 表格(可读性更好)
  • 复杂表格 → HTML 表格(保留结构信息)

3.3 公式转换

公式类型Markdown 表达示例
行内公式$...$质能方程 $E=mc^2$
行间公式$$...$$独立展示的积分公式
公式编号保留在行末$$...$$ (1)

4. 内容列表模式(content_list)

除了 Markdown,许多系统还提供内容列表 JSON 输出:

[
{"type": "text", "content": "正文内容"},
{"type": "table", "content": "<table>...</table>"},
{"type": "image", "content": "images/fig1.png", "caption": "图1 描述"},
{"type": "equation", "content": "\\int_0^1 x^2 dx"}
]

适用场景

  • 需要精细控制每个元素的处理方式
  • 下游系统需要结构化数据而非纯文本
  • 需要对不同类型内容应用不同处理策略

5. 陷阱与对策

陷阱对策
页眉页脚重复出现检测跨页重复的文本块并过滤
分栏文档顺序错乱先检测分栏边界,再栏内排序
跨页表格断裂检测表格延续标记,合并跨页表格
公式转 LaTeX 失败保留原文本,标注转换失败
图片引用路径错误使用相对路径,与输出目录结构匹配

6. 设计权衡

Markdown vs JSON 输出

维度MarkdownJSON 内容列表
可读性人类可直接阅读需要工具解析
结构化弱(半结构化)强(完全结构化)
保真度可能丢失部分信息保留全部信息
下游处理适合文本模型适合结构化处理管线
文件大小较小较大

推荐策略:同时提供两种输出格式,让用户根据下游需求选择。

多模态 vs NLP 输出

维度多模态 MarkdownNLP Markdown
图片处理保留引用路径替换为文本描述
表格处理HTML/Markdown 表格自然语言描述
适用模型多模态 LLM纯文本 LLM
信息量完整有损

参考来源