这个坑值得记一笔。MinerU 2.1 解析 200 页双栏论文,输出的 markdown 里左栏第一段后面接着右栏第一段,再跳回左栏第二段,表格也被拼进段落中间;同一批 PDF 用 pdftotext -layout 反而是对的,GPU 是 4090,显存 24GB。
刚开始盯着「表格区域被当成正文块参与排序,切断了段落」,折腾了半个多小时,排掉了。
排查方向其实有限,先把可能性排一排。版面模型把双栏识别成单栏,按 y 坐标从上往下排;PDF 里没有分栏标记,只有绝对坐标,模型缺少线索;解析参数没开 layout 模式,走了快速文本流。
动手时先跑一页并导出每个 block 的 bbox
mineru -p paper.pdf -o out --debug-bbox --pages 1
随后看 bbox 的 x 坐标是否分成左右两簇
python -c "import json;b=json.load(open('out/paper/bbox.json'));print(sorted(set(round(x['x0']/50)*50 for x in b))[:10])"
接着换 layout 模式并限制表格识别后重跑
mineru -p paper.pdf -o out2 --mode layout --no-table
和 pdftotext 的输出逐段比对顺序
pdftotext -layout -f 1 -l 3 paper.pdf - | head -60
改完先别撤,确认这几项。导出的 markdown 里同一栏的段落连续出现,左右栏不再交替,表格单独成块,前 3 页的段落顺序与 pdftotext -layout 基本一致。
双栏 PDF 的阅读顺序依赖版面模型,纯文本抽取器反而更稳;如果文档结构固定,可以先用 bbox 聚类分栏再逐栏解析,比调模型参数可靠。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
