资讯详情

扫描版PDF复制出来一堆错字?先查隐藏文字层

📅 2026/9/15 7:58:40 | 华诺云谱 👁 阅读
扫描版PDF复制出来一堆错字?先查隐藏文字层
这周在攒 PDF 入库预处理的测试样本从 Internet Archive 下了一份《简化字总表》1986 年新版的扫描件页面标注是公有领域。打开能选中文字复制出来也是成段的中文乍看没毛病。我拿第 2 页那篇「关于重新发表《简化字总表》的说明」和原页逐字对了一遍这一页 556 个字复制出来的文字有 52 处对不上接近每 10 个字错 1 个。最离谱的一句原文「读“liào”(瞭望)时作“瞭”」复制出来是「读“lioo”(上因望)时作“上”」「啰」成了「咖」同一个「囉」字在三处分别变成「喔」「唆」「哩」。这些错不会触发任何报错文件照样能打开、能切片、能进向量库一路绿灯直到有人搜「瞭望」搜不到。扫描件为什么能复制出字扫描件每一页本质上是一张图图里的字是像素本来是选不中的。能选中是因为有人事先给图跑过一遍 OCR把识别结果按坐标写回 PDF渲染模式设成不可见正好盖在图上。眼睛看到的是图鼠标选中和程序读到的是那层看不见的字两者可以完全不一致。这份《简化字总表》的文字层是 archive.org 用 tesseract 批量生成的没有人校过。那层字的好坏只取决于当年那次识别和你现在看到的原图清不清楚没有关系而复制出来的文本也不会注明它是识别出来的。用 pypdf 读出来还能看到一个痕迹字和字之间夹着空格比如「关于 重新 发 表 《 简 化 字 总 表」这是 OCR 按词框写回留下的。我现在的四步检查第一步确认有没有隐藏文字层。在阅读器里全选一下就能看出大概纯图片扫描件什么也选不中有隐藏层的会一行行高亮在图上。想看得更确切就去看页面内容流里文字绘制前的渲染模式3 Tr表示只占位、不画出来。这份样本第 2 页一共 661 条文字绘制指令全是模式 3可见文字 0 条也就是说页面上你能读到的每一个字都来自图片能复制的每一个字都来自那层隐藏的 OCR。第二步抽一页和重新识别的结果对照。不用全本比挑一页字最密的把页面当图片重新跑一次 OCR再和复制出来的文字对着看。零星几处差异文字层还能凑合用成片对不上就别想着逐个修了整份丢掉文字层更省事。这份样本上同一页 556 字自带文字层 52 处对不上渲染成图后重新识别只剩 1 处漏了偏旁「讠」。第三步确认你用的工具真的重新识别了。这一步是我自己撞上的。我先把这两页丢进图映的 PDF 内容提取工作台上写着文件只在当前浏览器读取、不上传勾着「识别图片内文字」跑一遍取消勾选再跑一遍两次导出的文本逐字相同「上因望」「咖」原样都在输出里也没有「图片文字识别」的标注。回头一看左侧原 PDF 的预览是一片空白。问题出在页面图的编码上。我拆开这份 PDF 看了一下每页是一张 JPEG 2000 底图再叠一张 JBIG2 编码的蒙版。这两种编码在扫描归档里很常见我做了几年编解码对它们不陌生但 Chromium 系浏览器都不原生解码。浏览器里的工具如果不自带解码器就拿不到这张图的像素OCR 没有东西可认只能用 PDF 里现成的那层字。这次界面和导出文件里都没有提示要不是预览空白我大概会以为它识别过了。所以我现在看两个信号输出里有没有识别标注开关 OCR 各跑一次结果是不是一模一样。一模一样就说明图片根本没被读到。顺带说一句看到 JBIG2 我会条件反射地多看两眼2013 年有位德国工程师查出施乐复印机用 JBIG2 的符号替换模式扫描时把文件里的数字 6 换成了 8。这份样本里的 JBIG2 只当蒙版用和那件事没关系只是这个编码让我对扫描件里的数字天然不太放心。第四步换一个能解码的渲染器把页面转成纯图片再识别。我用的是 macOS 自带的 sips它走系统的 Quartz 渲染能正确解出这两种编码出来的 PNG 和原书一致。把两页渲染图拼成一个只有图片、不带文字层的 PDF再交给图映用专业档识别这次输出开头带着「图片文字识别」标注前面那 52 处只剩 1 处。表格页的差距更大。第 3 页是简化字对照表自带文字层基本不能用出来的是「邓【〔痢」这种东西重新识别大体能读但也不是全对比如「肮」后面括号里的繁体被认成了「航」。所以重新识别之后表格还是要人扫一眼。「雠」这个字原页印得也不太清楚我是按识别结果算它对的要是它其实认错了重新识别那边就是 2 处这个我没法百分之百确定。文字层和重新识别打架怎么办有些工具会把文字层和图片识别合并输出。我拿自己做的一页测试文件试过合并的行为扫描图上写的是「门店 42 家」隐藏文字层故意写成「24 家」另外漏掉第四条。合并结果里两边一致的标题和第二、三条只出现一次「42 家」和「24 家」两句同时保留补回来的第四条排在了标题前面。重叠的去重、对不上的留着给人核对这个处理我认为是对的宁可多留也别替你挑一个但它意味着输出里同一件事可能有两个数字入库前得有人把冲突行挑出来。我现在的顺序就是上面这样扫描件入库前先查隐藏层有就抽一页和重新识别比差异成片就整份丢掉文字层渲染成图重新识别识别完确认输出里有识别标注。数字核对这件事没法省能省的只是别让一层错字悄悄进库。文中用到的 PDF 内容提取用的是图映ImgIng的免费图片处理工具平台大家可以试试看。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。