OCR认字和还原版面,是两件事
第一次拿 OCR 处理一张带表格的截图,字基本都认对了,结果贴出来傻眼:整张表塌成了一长串文字,行和列全没了。那次我才意识到,OCR 这件事被「识别文字」这个名字骗了——认字只是第一步,真正难、也真正有用的是第二步:把版面还原回来。
认字和还原版面,是两个不同的工程问题。认字是「这个字符是什么」,模型给你一堆文字框,每个框里是识别出的字和一个置信度。到这一步,你手上是一地散落的文字块,它们在原图哪一行、属不属于同一段、是不是一张表格的同一列——模型的识别输出里并不直接包含这些。

还原版面靠的是文字框之间的几何关系。图映这块的做法是,根据文字框的重叠、行高、横向间距和纵向留白,去恢复视觉上的行、段落和表格列。这不是识别模型干的活,是识别之后一层单独的重建逻辑:哪些框在同一条基线上算一行,行与行之间留白多大算换段,横向几个框对齐算表格的几列。认字认得再准,这层逻辑错了,输出照样是塌的。
重建之后,输出才有意义。它给了四种:复制版面保留原图的行列,TXT 用换行保留行、表格列用 Tab 分隔,Markdown 在列结构稳定时直接生成表格,还有坐标 JSON 带着每个块的位置和置信度。为什么要四种,是因为下游要的东西不一样——贴进 Excel 要的是 Tab 分隔,写进文档要的是 Markdown 表格,做二次处理要的是坐标 JSON。这些全是「还原版面」这步的产物,认字那步给不出来。
说个我踩过的细节:表格列为什么用 Tab 分隔,而不是空格。空格在原文里本来就有——字与字、词与词之间都是空格,拿它当列分隔符,内容里一带空格就乱套。Tab 在正文里几乎不出现,用它当列的边界,粘进 Excel 时每个 Tab 正好跳一格,列就对齐了。这种看着不起眼的选择,正是版面重建这层要操心的事,认字模型根本不管你后面往哪贴。
反过来说,也不能把版面重建吹成万能。它是靠几何规则推的,遇到跨行合并的单元格、嵌套表格、任意复杂的表格关系,规则就不够用了,图映自己也把这些划在承诺范围之外,界面会提示核对跨行合并和低置信度的地方。这条边界恰恰印证了前面的判断:版面重建是个独立且困难的问题,不是「认字准了就自动对」。
所以评估一个 OCR 工具,别只看它认字准不准——那是入门门槛。真正拉开差距的是它把版面还原成什么样、给不给你能直接用的结构化输出。认字是第一步,还原版面才是这件事真正的难点,也是它值不值得用的分界线。 我现在试一个 OCR,都是直接丢张带表格的截图进去,看它吐出来的是一张能贴的表,还是一地散字。
浙公网安备 33010602011771号