为何从 PDF 提取表格比它看起来更难( 以及我们实际上如何做 )

2026年8月19日1 次浏览来源:Dev.to阅读原文

如果你曾经从PDF中复制过一张表格,你已经知道会发生什么。

行倒入一长行文字.

柱相接相接相接.

数字在错误的单元格中降落,或者根本没有单元格。

页面上的表格看起来结构完美,但PDF并没有"表"的真正概念.

它只知道个人角色的页面位置.

每一个提取工具,包括我们的提取工具,都必须从头重建表格,只使用每个字的位置. "看起来像一个表格"和"是结构化的数据"之间的差距几乎是每个免费的PDF工具相去甚远的地方.

这就是我们如何处理它,什么是实际可行的, 和它仍然没有的地方。

两个不同的工作,两个不同的工具PDFHaul将这个分成两个不同的工具,因为它们解决了不同的问题.

PDF 到 Excel 将整个文档重建为单个电子表格,按页面上显示的顺序排列:窗体标签,密钥-值对,节标题,和表格全部.

这是要文件的全部内容, 不仅仅是数字, 诸如发票、时间单和报告。

提取表则相反。

它忽略了所有不是桌子的东西 每张桌子拿回一张干净的床单,别的东西 对于那些想要整理数据的人来说, 这两种工具都具有相同的基本几何引擎.

分别是各所持而所弃去.

解析表如何决定表是什么 取表的核心问题是"看表"和"是表"不同.

一个矢量图的轴框,一个表格的被概括的签名字段,以及一个两栏的过敏物名列表,都产生了一个天真的提取器会快乐地读作格子.

没有一个是表。

我们的管道分四个阶段处理, 所有事情都写在电子表格之前: 第1阶段:对页面进行分类。

每页被打分为边框(有统治行或填充-矩形网格行),流(没有边框,但行明显地横跨一列间隙的两侧),柱子(从未相互作用的独立平行列表),或纯文本.

第二期和第三期:为布局运行右取出器.

相接的页面通过 Camelot 的纹章模式。

无边界但结构化的页面通过Camelot的流模式.

这两种结果都是盲目的。

阶段4: 抓住第一个通道错过的东西, 并打开一切。

这一点很重要。

每个候选表格,无论是来自Camelot,来自一个明显的矩形网格,还是来自我们自己的以区域为基础的字词提取,都必须通过一个分类器,然后才算作一个表格。

分类者检查列数,行密度,以及单元格内容的数值或短数。

窗体字段的大纲框或图表的轴线会辜负这个检查,被降为纯文本,而不是成为双单元格"表".

没有这个门,卡美洛自己的假阳性,网格形状的图表元素,形式大纲,就会被算作取出表.

有了它,只有真正的桌子才能通过。

所有四个阶段都有一个共同的几何层来进行实际的测量:它通过选择最平均地分割文本的分出点(不仅仅是最宽的分出点,表格本身的标签和价值差距可能比它大)来找到分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分 横跨分页的表格也会被缝合起来。

如果相邻的两页生成与同列计数相邻的表格,而第二页的第一行则看起来像是一页标题的重复(fuzzzy-compared,因此"Week No"和"Week Number"仍然作为同列标题计数),它们被合并为一

分享