文档 OCR 的整体识别率这些年提升很快,但表格依然是翻车重灾区——单元格文字认出来了,行列关系却乱了,导出的 CSV 对不上账。这篇文章讲表格还原这件事的工程实践:怎么从一张扫描件里拿到「可入库的结构化数据」,而不是「一堆位置正确的乱字」。
很多团队把表格 OCR 当成一个任务来选型,结果怎么选都不满意。拆开看它是三件事:
三件事的能力要求和优化方向完全不同,分开处理比一个端到端模型硬吞要稳得多。
扫描件先做二值化和去噪,表格检测模型(公共模型或云服务内置的版面分析接口均可)输出表格 bounding box。这一步的经验:倾斜矫正要放在检测前做,页面倾斜超过 3 度,检测框就开始漏;分辨率按长边 2000 像素以上准备,表格线在低分辨率下会糊成一片。
主流方案是「表格线检测+逻辑行列推断」两条路并行:有实线的表格按线切;无线或细线表格(很多财务报表风格)靠文字对齐关系推断结构。
合并单元格的处理建议:还原成「主单元格+归属标记」的中间结构,先不要直接展开成规整矩阵——展开时机放在导出阶段,且保留原始归属信息以便人工复核。一步到位展平的做法,后面校验环节查无对证。
# 中间结构示意
cell = {
"row": 2, "col": 3,
"span": {"rowspan": 1, "colspan": 2},
"anchor": True, # 是否合并区主单元格
"text": "华东区域"
}单元格内容识别完,不要直接出表。加一层可计算校验:
我们实测下来,加了校验回环后,人工复核量从「整表逐格看」降到「只看标黄格」,这是结构化 OCR 能不能上生产的分水岭。
校验不通过的表格进人工队列。接口层设计上留好口子:我们用的算邻坊的随心 OCR 接口,单元格级结果带置信度,校验逻辑全部在自己侧实现——引擎给原料、自己建质检线这个分工要从一开始就定好,别指望任何单一接口输出「直接可用」。
量小的场景,云服务的表格识别 API 开箱即用(各家通用表格都不错,复杂合并表是共同短板);量大的场景,成本与延迟的主权在自己手里更稳,检测-结构-识别的链路可以逐环节换模型,哪个环节拉胯换哪个。
表格还原的工程要点:拆三任务分别处理、倾斜矫正前置、合并单元格保留归属信息、可计算校验回环压缩复核面、人工队列兜底。把这套流程搭起来之后,扫描件到结构化数据之间的那段最远的路,才算真正修通了。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。