表格识别
概述
表格识别(Table Recognition)是将 PDF 中的表格图像还原为结构化数据的技术。核心挑战在于表格变体极多(边框表、三线表、跨行/跨列单元格),且 PDF 中表格以矢量线条或光栅图像两种形式存储。
关键内容
表格的多样性
表格识别远比看起来困难,主要变体包括:
- 简单边框表格:有完整横竖边框线,结构清晰
- 三线表:学术论文常见,仅顶线、表头分隔线、底线,无竖线,列边界靠文字对齐推断
- 跨单元格表格:包含 rowspan/colspan 合并单元格,将复杂度再上一个台阶
PDF 中表格的两种存储方式
| 方式 | 来源 | 特点 |
|---|---|---|
| 矢量线条 + 文字 | 文字型 PDF | 边框是 PDF 路径命令,文字可用 PyMuPDF 提取,但"哪个字属于哪个单元格"未知 |
| 光栅图像 | 扫描件 | 整个表格是一张图,必须用视觉方法识别 |
MinerU 双阶段表格识别框架
MinerU 的表格识别分为两个阶段:
阶段一:表格结构识别
- 模型:TableMaster / RapidTable
- 输入:文档布局检测输出的 table 框裁剪图像
- 输出:HTML 格式的表格结构(含空 <td></td> 占位)+ 每个单元格的 bbox
阶段二:表格单元格填充 - 文字型 PDF:PyMuPDF Span 坐标对应,找到中心点落在单元格内的 Span - 扫描件:OCR 逐单元格识别(加 padding 避免裁剪到边框线) - 输出:含文字的完整表格
跨单元格处理
合并单元格(merged cells)是表格识别最复杂的部分。TableMaster 通过 colspan / rowspan token 表达这种关系。由于 Markdown 不支持跨单元格,MinerU 做降级处理:
- 跨列单元格:复制内容到多个列,用 ↑ 标记重复
- JSON 输出:保留完整 HTML 结构
- 附注:<!-- complex table, see JSON for full structure -->
输出格式
| 格式 | 用途 | 特点 |
|---|---|---|
| Markdown | 通用展示 | 跨单元格降级处理 |
| HTML | 完整结构 | 保留 colspan/rowspan |
| JSON | 机器可读 | 含 bbox、cell_data、page_no、html、markdown |
与同类工具对比
| 工具 | 表格结构还原 |
|---|---|
| pypdf/pdfminer | ❌ |
| Marker | ⚠️ |
| Nougat | ❌ |
| MinerU(TableMaster) | ✅ 专项优化 |
来源
- raw/assets/MinerU/minerU_01_architecture.md — MinerU 深度解析系列 · 第一篇:整体架构全景
- raw/assets/MinerU/minerU_06_table.md — MinerU 深度解析系列 · 第六篇:表格识别系统