PDF与MD文档提取切分对比分析

0 阅读3分钟

PDF 与 Markdown 文档提取/切分对比分析

一、PDF 跨页为什么麻烦

PDF 本质是印刷描述语言,不是文档格式:

告诉打印机:在 (x, y) 坐标画这段文字,字号 12,字体 宋体。

同一段落跨两页,PDF 内部长这样:

Page 1:  "这是第一页的内容,继续..."
Page 2:  "这是第二页的内容,结束。"

没有任何东西告诉你这两段是同一段话。需要自己判断:

  • 去掉页眉页脚(header/footer)——但每本书的页眉规则不同
  • 去掉页码
  • 判断 Page 1 末尾的句子是否完整,与 Page 2 开头是否衔接
  • 同一段落可能被分页符、图片、表格、脚注打断
维度为什么难
坐标定位文字位置是绝对的,不是流式的
缺乏语义没有 <p><h1><div> 标签
页眉页脚每一页都可能重复,需要过滤
段落还原需要启发式算法(行距、字体变化)
表格跨页表头可能只在第一页,后续页只有数据行

结论:PDF 是「所见即所得」的终点,不是内容的起点。用它做内容提取,本质上是逆向工程。


二、MD 文件为什么容易切分

Markdown 是语义格式,不是布局格式:

# 第一章
这是第一段。
这是第二段。

## 1.1 小节
特征切分依据
章节###### 等标题标记
段落两个连续换行符
列表- 1. 前缀
代码块` ````包裹
表格| 分隔符和 `------` 分隔线

切分 MD 可以做到 100% 精确,不需要任何猜测:

  • split("\n\n") → 段落
  • 正则匹配 ^#{1,6}\s → 章节
  • 按标题层级构建树 → 结构化文档

这是格式本身的设计意图——MD 就是让人能直接读源码、直接切分的。


三、表格跨页的复杂性

在 PDF 中

Page 1:  [表头 | 列1 | 列2]
         [数据1 | 11 | 12]
         [数据2 | 21 | 22]
         (表格继续到下一页)
Page 2:  [数据3 | 31 | 32]
         [数据4 | 41 | 42]

难点:

  • 表头只在第一页,后续页只有数据行,需要把表头重新拼接回去
  • 行被截断,需要判断上一页最后一行与下一页第一行是否属于同一个表格
  • 表格内的文字可能被分页符打断在单元格中间
  • 表格旁边可能有浮动图片或注释,复杂布局下更难

在 MD 中

MD 表格没有跨页问题(MD 没有「页」的概念),但有新的问题

  • 行数太多的表格,单个 MD 段落太长,切分后会丢失上下文
  • 单元格内容含换行——标准 Markdown 不支持
  • 合并单元格——标准 MD 表格不支持,需 HTML 表格
  • 切分时如果按段落切,表格作为一个整体可能会被错误截断

四、核心对比

维度PDFMarkdown
内容模型固定布局(Fixed Layout)流式文档(Flow Document)
语义有(标题、段落、列表等)
跨页还原需要启发式算法不需处理(没有页的概念)
表格提取需要检测表格区域、合并跨页行直接解析 | 语法
切分精度取决于 PDF 质量和工具可以做到 100%
实用复杂度

核心矛盾:PDF 是「给人看的」,MD 是「给人和机器都能读的」。


五、可能的实际场景

  1. 文档提取/切分工具开发:PDF 处理麻烦,值得优先考虑工具选型(Camelot/Tabula/PyMuPDF)
  2. 跨平台内容发布:来源文档(PDF/Word)提取表格时结构错乱,需规划处理流程
  3. 论文参考资料处理:PDF 参考资料跨页,提取信息时难以还原原文

延伸方向

  • PDF 段落还原的具体算法(行距聚类、字体检测、启发式合并)
  • PDF 表格提取的实用方案(Camelot/Tabula/PyMuPDF 对比和选型)
  • MD 切分的最佳实践(按标题层级切为结构化 JSON)
  • PDF → MD 转换的坑(Pandoc/Marker/MinerU 效果对比)