开篇:学术论文 PDF 的版面为什么难解析
一篇双栏 IEEE 论文的典型页面里,你能找到至少六种不同的内容元素:左栏正文与右栏正文并排排列,一张浮动 Figure 横跨两栏插在文字中间,公式独占一行居中对齐并带编号,页眉标注着会议名称和页码,页脚是作者邮箱与资助声明。这些元素在视觉上层次分明,但在传统 PDF 解析流程中情况完全不同。
多数 PDF 提取工具按页面物理坐标从上到下、从左到右逐行抽取文本。对于单栏排版的白皮书或商业报告,这种方式足够应付。但学术论文的版面设计------双栏/多栏排版、跨栏标题(spanning header)、浮动图表、脚注与尾注、页眉页码------正是为打破这种线性顺序而存在的。一个典型的后果是:一段右栏正文在提取结果中出现在左栏片段之后、Figure 标题之前,阅读顺序完全错乱。这不是 OCR 准确率的问题,是版面分析的问题。
学术论文的版面复杂性可以归结为几个相互交织的维度。多栏排版要求解析引擎识别每一栏的边界,而不是把两栏文本混作一串。浮动图表(Figure 和 Table)不固定在特定位置,它们可能出现在页面的任意位置------甚至跨页------而它们的标题(caption)和正文引用之间存在语义绑定。至于脚注、页眉、页码,这些辅助信息在语义上与正文无关,嵌入到输出中只会干扰下游的检索和切分。
传统方案在这些场景下暴露的核心痛点,是阅读顺序错乱 导致的结构破坏。没有一份正确的阅读顺序,Markdown 输出就无法保留文档的层次结构,表格与公式的提取也就失去了上下文锚点。MinerU 从布局分析入手,先识别每个内容块的类型(text、title、figure、table、equation 等)和空间位置,再根据类型和坐标重新排列输出顺序,从而还原论文本来的阅读顺序 。这种版面自动还原 能力,使学术 PDF 的深度结构化提取------包括公式识别 、表格提取、语义检索------成为可能。
多栏排版的自动识别与阅读顺序还原
双栏排版的本质是页面空间被垂直分割为两个独立的文本流。MinerU 的布局检测模型(以 MinerU2.5-Pro 为例,采用解耦的粗到细架构,1.2B 参数)在页面图像上预测每个内容区域的边界框和语义类别。对于双栏页面,模型会在左右两列分别检测出多个 text 块,并给每个块分配一个阅读顺序索引。
这个索引的含意在 layout.pdf 中一目了然。每一页的布局分析可视化结果中,每个检测框的右上角标注着一个数字------这就是该内容块在最终输出中的阅读顺序编号。编号规则遵循自然阅读方向:对于从左到右排版的论文,先左栏从上到下编号,再右栏从上到下编号。跨栏标题(如论文标题、作者列表)由于在物理位置上跨越两栏,模型的布局检测会将其识别为一个独立的 title 块并赋予较低的索引值,确保它在输出中最先出现。
你可以通过两种方式拿到 layout.pdf:云端用户调用 result.save_all(),下载到的 zip 包内直接包含该文件;本地部署用户则在输出目录中直接得到 {原文件名}_layout.pdf。打开后,不同颜色的矩形框标注着不同类型的内容------text 块、title 块、figure 块、equation 块各有独立颜色------右上角的数字就是阅读顺序。
这套阅读顺序分配的效果可以用量化指标衡量。在 MinerU2.5-Pro 技术报告中,OmniDocBench v1.6 Full 子集上的 Reading Order Edit Distance 为 0.120 ,端到端文档解析 Overall 分数达到 95.69。前者衡量预测阅读顺序与真值之间的编辑距离,后者评估整体解析质量------两项指标在同一基准上测得,说明 MinerU 在学术论文复杂版面上已达到实用水平。
处理跨栏标题的具体逻辑值得展开。当一个标题块(title 类型)的边界框横跨页面左右两侧,模型将其标注为 title 而非普通的 text,并在阅读顺序中给予较低编号。这使得跨栏标题在 Markdown 输出中以 # 或 ## 标题格式出现,其下的正文按栏分别排列。一个 IEEE 论文中常见的 Section 标题之后紧跟双栏正文的结构,在输出的 Markdown 中表现为一个标题 + 两段文本的排列,而非标题后跟左栏文本再跟右栏文本这种混乱结构。
浮动图表(Figure / Table)的定位与标题绑定
学术论文中的图表有一个关键特征:浮动。它们不固定在文字流中的特定位置,而是根据排版引擎的算法放置在最适合的位置------可能出现在页面的顶部、底部,甚至横跨两栏。对于解析引擎来说,这意味着两个挑战:第一,在页面中准确定位图表本体(body)与标题(caption);第二,将本体与标题正确绑定,确保输出中标题紧跟在图表之后而非被其他文本隔开。
MinerU 通过内容块类型系统处理这一需求。在 content_list.json(SDK 中对应 result.content_list)中,图表相关的内容块包含以下字段结构:
image类型 :包含img_path(指向 zip 包内images/目录的图片文件)、image_caption(字符串数组,存储图标题)、image_footnote(字符串数组,存储图脚注)。table类型 :包含img_path、table_body(HTML 表格字符串)、table_caption(字符串数组)、table_footnote(字符串数组)。chart类型 :结构类似,包含chart_caption和chart_footnote。
caption 与 body 的绑定逻辑基于布局检测阶段的空间关系分析。当一个 image_caption 块在空间上紧邻(上方或下方)某个 image_body 块,且排版距离小于阈值,模型将二者绑定为同一个 image 类型的内容块。table_caption 与 table_body 的绑定同理。这种绑定策略避免了纯文本解析中 caption 与 body 分离的问题------比如 Figure 标题在上一页末尾而本体在下一页开头时,传统工具会将其当作无关文本。
实测中,SDK 返回的 result.content_list 没有独立的 image 类型------所有视觉元素要么以 table/equation 类型出现并附带 img_path,要么被整合到相邻文本块中。因此提取全部图表时,应遍历 content_list 中所有 type 为 table 或 equation 且包含 img_path 的项。注意 table_caption 和 image_caption 可能为空数组 [],代码应处理这种情况。
image_footnote 和 table_footnote 字段记录图表下方的附属说明(如数据来源、版权声明),与对应图表块绑定,不会混入正文流。
如果图表的物理位置跨越了两栏------一个宽表格可能占满两栏宽度------MinerU 的布局检测将其识别为一个块,而非两栏各一半。阅读顺序编号将其置于当前页适当位置,不拆分到两栏的编号序列中。
公式区域的精准识别与 LaTeX 输出
学术论文 PDF 中的公式区域分为两类:行间公式 (interline equation)和行内公式(inline equation)。前者独占一行,居中排列,通常带编号,需要完整提取为 LaTeX 块格式;后者嵌入在文本行中,仅需保留符号或 LaTeX 片段。
MinerU 在 middle.json 和 content_list.json 中通过不同的类型标识区分二者。在 content_list 中,行间公式的 type 为 equation,其 text 字段包含完整的 LaTeX 表达式,格式如 $$\n E = mc^2 \n$$,text_format 标记为 "latex"。行内公式则作为文本块中 span 级别的 inline_equation 类型存在,嵌入在 text 块中。这种双层结构使得下游处理可以直接提取所有行间公式做批量渲染或索引,同时保留行内公式在文本上下文中的位置。
行间公式与行内公式的区分完全由布局检测阶段的空间分析决定:如果检测到一段数学表达式垂直方向上的前后间距明显大于行间距,且内容居中对齐,模型将其归类为 interline_equation;反之,如果表达式嵌入在一行文本中,则归类为 inline_equation。这种区分对后续的 Markdown 渲染质量影响直接------行间公式用 $$...$$ 包裹,行内公式用 $...$ 或直接保留符号,输出效果天壤之别。
公式识别的准确性在 MinerU2.5-Pro 技术报告中用 CDM(字符检测匹配) 指标衡量。在 OmniDocBench v1.6 Full 子集上,MinerU2.5-Pro 的 Formula CDM 达到 97.29,是该项指标在所有参测模型中的最佳分数。CDM 从字符级匹配评估公式识别质量,对 LaTeX 输出的空格、换行、定界符等细节敏感,比 BLEU 更能反映真实的公式识别精度。值得注意的是,端到端评估中公式 CDM 的高分位于 9 个基准子集上测试得出,覆盖了学术论文、教科书、手写公式等多种来源。
对于多行公式(如 \begin{align}...\end{align})和复杂矩阵,MinerU2.5-Pro 采用解耦逐行分析策略。布局检测先将整个公式区域识别为一个 interline_equation 块,然后公式识别子任务逐行解析 LaTeX 结构。相比需要在单次传递中生成整个方程组的端到端方法,这种解耦处理降低了多行公式中的结构错误概率------例如每行对齐标记 & 的丢失、\\ 换行符的遗漏、\tag{...} 方程编号的缺失。
脚注、尾注与页眉页脚的识别与分离
学术论文的页面上充满了与正文语义无关的辅助信息。页眉标注着期刊名称和卷号,页脚显示页码和版权声明,页面脚注包含作者邮箱、资助声明和通讯地址。这些元素在印刷版面上有固定的空间位置(页眉靠近页面顶部、页脚在底部、脚注在正文区底部),但在线性文本提取中,如果不主动分离,它们会随机插入正文流------页脚文本可能出现在最后一行的下方,脚注可能紧跟在某段正文之后,阅读体验灾难性的混乱。
MinerU 的 VLM 后端定义了一组完整的页面辅助块类型 ,专门处理这些非正文元素。在 content_list.json 中,这些类型的清单包括:
| 类型 | 说明 | 典型内容 |
|---|---|---|
header |
页眉 | 期刊名称、卷号、论文标题缩写 |
footer |
页脚 | 版权声明、出版信息 |
page_number |
页码 | "1"、"Page 1 of 10" |
aside_text |
装订线旁注 | arXiv 竖排论文编号、审阅备注 |
page_footnote |
页面脚注 | 作者邮箱、资助声明、通讯地址 |
这些块在解析后的输出中被归入 discarded_blocks (middle.json 中)或在 content_list.json 中以独立的辅助类型呈现。discarded_blocks 的设计意图很直接:布局检测阶段识别出这些与正文语义无关的元素后,将其移出正文流,避免干扰 Markdown 输出的连贯性。但这不意味着数据丢失------如果下游处理需要这些信息(如提取邮箱),仍可从 discarded_blocks 或对应 page_footnote 条目获取。
一个典型的场景是 Elsevier 或 IEEE 论文中常见的页面脚注:页面底部有一行小字标注着通讯作者邮箱和 ORCID。传统提取结果中,这句话出现在正文结尾后。MinerU 将其标记为 page_footnote,在默认 Markdown 输出中移出正文,保留在结构化数据中供查阅。
实际应用中,布局检测的准确率受文档质量影响------扫描件中页眉页脚与正文的边界可能模糊,此时 header 类型可能被误判为 text。layout.pdf 是检查这类误判的最直接工具:在可视化页面上,不同颜色的块能让你快速定位到被误分类的元素。
layout.pdf 可视化调试指南
当解析结果出现异常------比如某段正文在 Markdown 中丢失、图表描述张冠李戴、阅读顺序跳来跳去------第一件事不是修改参数重跑,而是打开 layout.pdf 看一眼。
云端用户通过 result.save_all() 下载的完整 zip 包中,layout.pdf 就是布局分析的可视化快照。本地部署用户直接在输出目录中找到 {原文件名}_layout.pdf。每一页的原始 PDF 被叠加了一层色块覆盖:
- 每个彩色矩形框对应一个被检测到的内容块
- 框的颜色代表内容类型:例如蓝色可能表示正文文本,绿色表示标题,橙色表示图像,红色表示公式,灰色表示页眉页脚
- 每个框的右上角数字是分配给该块的阅读顺序编号
有了这张图,两个最常见的调试场景变得格外直观。
场景一:阅读顺序错误。 你发现 Markdown 输出中"3. Methodology"出现在"2. Related Work"之前。打开 layout.pdf,找到对应的页面,检查每个框右上角的数字顺序。如果发现第 7 号和第 8 号框正好对应这两节的标题,但它们的空间排列与阅读顺序不匹配(例如右栏的标题却在左栏标题之前),说明布局检测在双栏边界识别上出了问题。解决方案通常涉及调整 PDF 输入的分辨率或检查 PDF 是否是扫描件(非扫描件准确率更高)。
场景二:元素类型误判。 一段 LaTeX 公式在输出中变成了纯文本。在 layout.pdf 上找到对应位置,看它的色块颜色------如果它被标成了普通 text 的蓝色而非公式的红色,说明布局检测阶段将其误分类。这种情况在公式排版风格非标准(例如某些会议模板的公式编号位置特殊)时更常见。你可以通过提升预览分辨率或尝试 VLM 后端来改善。
颜色编码的具体映射因 MinerU 版本略有不同,但核心原则一致:每种内容类型有独立颜色,阅读顺序清晰可见。熟练使用 layout.pdf 调试,是将 MinerU 解析质量从"差不多"推进到"精确可控"的关键步骤。
实战:一篇双栏 IEEE 论文的完整解析流程
一篇典型的 IEEE 双栏论文可以检验 MinerU 在实际场景中的综合能力。以一篇 2025 年的会议论文为例,它的版面特征包括:标题和摘要横跨两栏,Introduction 和 Methodology 分列双栏,一张 Figure 浮动在右栏顶部并跨到左栏,Table I 占据了底部两栏的宽度,每页页脚有页码和会议信息。
用 MinerU SDK 处理这篇论文的代码如下:
python
from mineru import MinerU
client = MinerU(api_key="your_api_key")
result = client.parse(pdf_path="ieee_paper_2025.pdf")
# 1. 下载完整解析结果(zip 包含 layout.pdf、content_list.json 等)
result.save_all("output_ieee/")
# 2. 遍历 content_list 提取所有图表与公式
for item in result.content_list:
if item.type == "table":
print(f"[Table] Page {item.page_idx}")
if item.table_caption:
print(f" Caption: {item.table_caption[0]}")
if item.table_body:
print(f" HTML table: {item.table_body[:80]}...")
elif item.type == "equation":
print(f"[Formula] Page {item.page_idx}")
print(f" LaTeX: {item.text[:60]}...")
# 3. 提取完整 Markdown
print(result.markdown[:500])
这段代码的产出是:一份结构完整的 Markdown 文档(正文按阅读顺序排列,标题带层级标记,公式以 LaTeX 块呈现,表格以 HTML 字符串保留),一个包含 layout.pdf 和 content_list.json 的 zip 包,以及可单独遍历的图表与公式列表。
对比输入 PDF 和输出 Markdown,还原效果一目了然。Markdown 的开头是论文标题自动识别为一级标题,接着是 ## Abstract、## I. Introduction,两栏正文按阅读顺序先左后右排列。浮动 Figure 被提取为独立图片文件,在 Markdown 中以  形式出现;Table I 保留为 HTML 表格字符串。打开对应页面的 layout.pdf,可以看到标题区被标注为独立色块并编号 1,左栏正文编号 2-5,右栏编号 6-9,跨页 Figure 的色块横跨两栏。如果这些检查点全部通过,那么这篇论文的版面自动还原就完成了。
MinerU 的开源仓库在 https://github.com/opendatalab/MinerU,在线体验和 API 文档见 https://mineru.net。本地部署和云端调用两种方式都可以完成上述流程------选择取决于你对数据隐私和计算资源的要求。
结尾:从版面分析到结构化理解
学术论文 PDF 的版面自动还原,本质上是将视觉排版信息翻译为结构化语义的过程。版面分析 确定每个元素的位置和类型,阅读顺序 恢复文本的逻辑流,多栏排版 的识别保证双栏文档不被当做单栏处理,公式识别 和表格提取将非文本内容转换为机器可读的结构。这些能力共同构成了复杂 PDF 版面解析的核心竞争力。
MinerU 在这一场景中的数据表明,通过系统化的数据工程和布局分析模型,即使参数规模有限的模型也能在学术论文的复杂版面上达到实用水平。对于需要批量处理论文、技术报告、研究手稿的研究人员和开发者来说,MinerU 提供了一条从 PDF 到结构化数据的通畅路径。
GitHub: https://github.com/opendatalab/MinerU
官网: https://mineru.net