先看一个教学场景。
用户打开一份扫描 PDF,页面清清楚楚,文字、表格和印章都看得见。系统也显示文件上传完成。可程序读取页面时,只拿到几个页码或一段水印,正文几乎为空。后面的分块、向量化和入库没有明显报错,用户提问时却一直搜不到材料里的答案。
问题不在大模型,也不一定在向量库。真正的原因是这份 PDF 没有可用字符层,页面本质上是一张张图片。
于是面试官会继续问:
你怎么判断一页 PDF 需要 OCR?识别完成后为什么不能直接把文字塞进向量库?遇到模糊页、表格页和失败页又怎样降级?
如果回答只有“调用 OCR 接口提取文字”,很快就会遇到下一层追问。因为 OCR 只是把像素变成文字候选,距离可检索、可引用的内容还差版面、顺序、结构、位置和质量控制。
先判断:这一页真的需要 OCR 吗?
页面判断不能只做“字符串为空”这一项检查。扫描页常见的误导信号是:页码、页眉或水印能够被读取,于是结果并非空字符串,但真正占据正文区域的内容仍然是一张图。
更实用的做法,是把页面先分成三类。
第一类是可直接使用页。有效文字框覆盖正文区域,阅读内容与程序提取结果基本一致,这类页面不需要额外 OCR。
第二类是需要识别页。正文区域主要由大图覆盖,已有文字只集中在页眉、页脚或少量标签,页面应进入 OCR 与版面恢复。
第三类是可疑页。页面既有字符层又有大块图像,或者提取结果与视觉内容明显不匹配。它不能只因为“有字”就放行,也不应该在没有检查时直接覆盖原字符层。系统需要保留两种候选、记录判断原因,再由代表性样本确定采用哪条路线。
判断信号可以来自有效文字数量、文字框在正文区域的覆盖、重复页眉特征、页面图像占比,以及提取文字与视觉区域是否对应。它们共同回答的是“正文有没有被程序拿到”,而不是给 PDF 贴一个永久标签。
阈值会受字号、语言、页面尺寸和文档类型影响。上线前需要用实际页面校准,并把误判页留在回归集中;这里没有一个能跨资料直接照搬的数字。

先在页面级区分可用字符层、扫描图像和混合内容。电子文本优先保留原信息,需要时才进入 OCR。
页面级判断的产物不应只有一个布尔值。最好同时记录分类、判断信号、采用的文字来源和是否需要复核。后面发现漏字时,团队才能知道是 OCR 本身失败,还是页面一开始就被分到了错误路线。
OCR 之后,还有哪几步才能进入 RAG?
一条完整的 PDF 解析流程,会包含图像、文字识别、版面、表格和文本合并等环节。放到扫描件上,可以按下面的顺序理解。
第一步,渲染和预处理页面。
系统把目标页转成适合识别的图像,并检查方向、倾斜、清晰度、对比度和噪声。旋转页如果方向不对,后面的文字识别很可能整页失败。低清页面可以受控提高渲染质量,但不能无限放大,因为处理时间和资源占用也会增加。
第二步,执行文字识别。
如果选用的 OCR 服务能够返回文字框,系统应尽量保留文本、坐标和置信度,而不是只保存一段拼接后的字符串。坐标决定后面怎样恢复阅读顺序,也支持引用时回到原图区域。OCR 置信度可以帮助系统识别风险页面,但它不是最终正确性的证明。
第三步,做版面区域分类。
标题、正文、表格、图片说明、页眉页脚需要区分。不同区域的清洗和切分方法不同。页眉页脚可能在每页重复,表格不能按普通段落处理,图片说明也不应和无关正文随意合并。
第四步,恢复阅读顺序。
OCR 数组返回顺序不一定等于人类阅读顺序。侧边说明、表单标签和正文可能被混在同一列表里,页脚也可能插到正文中间。系统要结合坐标、区域类型和间距重新组织,不能简单按识别结果的数组顺序拼接。
第五步,处理特殊结构。
表格需要继续恢复行、列和单元格关系。代码块需要保留换行、缩进和符号。图片中的文字可以被识别,但箭头、连线和图表关系不能靠普通 OCR 自动还原。无法可靠恢复的内容应该保留原图引用和风险标记。
第六步,输出结构化内容。
扫描页除了正文、页码和来源文件,还应保留文字框、原图区域、方向与预处理记录、识别质量和复核状态。标题路径与内容类型用于后续切分,原图与文字框用于核验,处理记录则帮助判断错误发生在图像预处理、OCR 还是版面恢复。具备这些信息后,结果才适合进入清洗、切分、向量化和索引。

OCR 位于链路中间。文字识别之后仍要恢复版面、顺序和结构,最后才能得到可检索内容。
这条链路说明一个关键点:识别到字不等于恢复了知识。
为什么 OCR 文字不能直接当最终正文?
先看一张扫描表单。
页面上有“是否需要复核”这一标签,旁边是“是”和“否”两个选项框。OCR 可能把三个词都识别正确,却没有保留哪个框被勾选。最后只剩“是否需要复核、是、否”,文字齐全,结论却不存在。
编号和金额也有类似风险。字符 0 与字母 O、数字 1 与字母 I 在低清扫描里容易混淆。整页平均质量看起来不错,恰好出错的关键字段却可能改变查询结果。把这类文字直接切片入库,只会让下游更难发现错误。
还有页眉页脚。扫描材料常带固定页眉、页码、水印或扫描设备标记。如果不清洗,重复内容会进入每个页面片段。检索时它们可能因为频繁出现而制造噪声,也会浪费后续上下文。
所以 OCR 后处理至少要回答三个问题:内容属于哪个区域,应该按什么顺序阅读,内部关系是否完整。任意一项答不上来,都不能只用“识别成功”概括结果。
四类 bad case,应该怎样处理?
以下 bad case 均为教学场景,不代表某个真实项目已经完成了对应优化。
第一类,页面方向或倾斜错误
一页横向扫描材料被当成竖向页面处理,文字框大量缺失,质量信息也明显异常。
排查这个教学场景时,可以先看原图方向和文字框分布,再决定是否旋转或纠偏后重试。这个问题发生在 OCR 之前,调整分块长度和向量模型没有意义。
第二类,印章、水印或污渍遮挡正文
印章与文字重叠时,字符可能被拆错;浅色水印又可能被当成正文反复识别。对低质量扫描页可以尝试去噪、对比度增强、纠偏等预处理,但要用样本验证处理效果,同时记录质量与异常类型。
处理时要保留原图,先判断遮挡区域是否真的影响关键内容。图像增强或去除遮挡都可能误伤正文,因此不能把处理后的结果直接视为事实,还要抽检关键页面。
第三类,关键编号或选项框局部不可靠
整页质量信息可能很高,编号、金额或勾选区域却恰好模糊。排查时要回到关键区域,比较文字框、候选字符和原图,而不是用页面平均值替代局部判断。无法确认的字段可以保留候选与原图并标记待复核,不能自动选择一个看起来最像的答案。
第四类,页面极模糊或识别服务失败
网络超时、临时服务异常可以有限重试。低分辨率可以尝试受控提高渲染质量或切换适合的识别路线。但文件损坏、严重模糊、版面类型不支持等确定性问题,需要终止重复重试,记录原因并进入复核。

方向、遮挡、表格和严重模糊发生在不同阶段。降级要依据失败原因,不能对所有异常重复执行同一个动作。
bad case 处理的关键不在“有备用模型”,而在每次变更都留下证据。需要记录使用了哪张原图、执行过什么预处理、哪一次识别结果被采用,以及是否仍有待复核区域。
OCR 失败时,怎样选择重试、降级和复核?
OCR 异常不能统一执行“再跑一次”。先判断失败属于哪一种。
服务超时、临时限流属于执行异常,可以在有限次数内重试。页面方向错误、对比度过低属于输入可修复问题,需要先调整图像,再重新识别。编号、金额或选项框存在多个候选时,问题不是服务有没有响应,而是结果无法确认,应保留原图与候选进入复核。
严重模糊、文件损坏或版面不受支持属于确定性边界。如果没有新的输入或新的处理能力,重复调用同一路线不会增加信息,只会占用队列。此时应停止自动重试,记录失败区域与原因,并让文档明确显示内容不完整。
降级也不等于随便选择一个低质量结果。可以返回原图供人工查看,可以暂缓关键区域入库,也可以只放行已经核验的页面;具体动作取决于缺失内容的风险。空白页和关键条款页不能用同一条规则处理。
每次处理都要保留页面、区域、预处理动作、识别器版本、候选结果和最终决定。后续发现错误时,才能区分是图像质量、识别服务还是人工放行规则出了问题。
识别器或预处理规则升级时,也不能直接覆盖当前索引。可以先让候选版本在同一批固定页面上运行,逐页比较文字、区域、阅读顺序和来源位置。普通正文看起来略有改善,但金额、编号、表单勾选或旧坏样本发生退化时,仍然不应该放行。
对比结果要区分“内容真的改变”和“输出表达改变”。例如坐标精度、区域编号或文字框合并方式变化,可能让所有内容 ID 跟着变化,但页面语义并没有变。适配层需要先把两版结果映射到同一内部结构,再判断哪些 Chunk 应替换。否则一次工具升级会制造大量重复向量和失效引用,排查时却只看到入库数量突然增加。
发布前还应确认失败页面的处理决定没有被新版本抹掉。原本标记为待复核的关键区域,不能因为新版返回了非空字符串就自动转为可用;已经人工确认的修正,也不能被一次全量重跑静默覆盖。候选结果、人工决定与最终入库内容需要分别留痕,才能说明系统为什么采用了这一份文字。
混合页面还会遇到原生字符层与 OCR 结果冲突。不能默认把两份文字全部拼接,也不能不经比较就让 OCR 覆盖字符层。可以先按页面区域对齐两种结果:原生文字完整且位置可靠的区域继续使用原生内容;只有图像的区域补充 OCR;两者文字或位置明显冲突的区域则保留候选和原图,进入复核或专项规则。
对齐时要关注的不只是字符相似。一个数字、日期或否定词发生差异,可能比普通描述少几个字更重要。关键字段应单独标识风险,避免整页平均质量掩盖局部冲突。最终采用哪份结果,也要写进内容单元的来源字段,让后续排查知道这段文字来自原字符层、OCR 还是人工确认。
回归样本中应同时存在纯电子页、纯扫描页和混合页。这样修改页面路由时,才能发现是否把原本可靠的字符层误送 OCR,或者漏掉只存在于图片区域的关键说明。只测纯扫描件,会让页面分类错误长期藏在识别准确率之后。
OCR 结果进入 Chunk 前,还要保留什么?
扫描页恢复出结构以后,不能只把正文交给切分器。
每个内容单元还要带上来源文件、页码、页面区域、内容类型、标题路径和解析状态。页码回答“来自哪里”,页面区域回答“在这一页的什么位置”,内容类型告诉后续流程它是普通正文、表格还是图片说明,解析状态则提醒系统这段内容是否经过降级或仍需复核。
这些信息会直接影响后面的两个动作。
第一个动作是切分。普通正文可以优先沿自然段或句子边界拆分,表格需要保护表头与数据关系,图片说明需要和原图标识绑定。若所有内容都只剩一个字符串,切分器无法知道哪里不能随意切开。
第二个动作是引用。用户看到答案后,应能回到原文件和具体页面。对于扫描文档,必要时还要回到页面区域进行核对。OCR 偶尔会把相似字符识别错,原图位置能让读者检查模型引用的究竟是什么。
元数据也不能替代正文质量。给一段乱码补上页码,它仍然是乱码。正确顺序应该是先确认内容和结构可用,再附加能够支持切分、过滤、引用与排错的字段。
OCR 解析质量怎么验?
不能只随机打开一页,看起来差不多就结束。
第一层是文字层。
从不同文档类型抽取代表页,准备人工校对文本,比较漏字、错字和多余字符。可以使用字符错误率帮助统计,但不要只汇报一个总数。标题、金额、编号和专业术语出现一个字符错误,影响可能比普通描述中的错字更大。
第二层是结构层。
检查标题与正文是否保持关系,表单标签与选项是否对应,侧边说明有没有混入正文,代码换行和缩进是否保留。结构错误常常不会反映在字符数量上,却会直接改变原文含义。
第三层是位置层。
抽取识别结果,确认页码和坐标可以回到原始页面。引用如果指错页,或者只能定位到整份文件,用户很难核验证据。
第四层是检索层。
为扫描文档准备固定问题、参考答案和正确证据位置。检查正确内容是否进入切分结果,是否能够被召回,返回片段是否保留完整字段关系。检索失败后再回看是 OCR 漏字、顺序错乱、切分破坏,还是检索本身的问题。
第五层是失败层。
主动加入旋转页、模糊页、带印章表单和混合字符层页面,确认路由、重试、降级和告警是否按预期工作。系统只在理想样本上表现正常,不能证明它能处理真实知识库。

文字、结构、位置、检索和失败处理需要分别验收。OCR 置信度只能提供线索,不能代替最终核验。
所有评测都应记录样本版本、解析配置和失败页面。否则调整预处理或识别器之后,即使结果变化,也很难定位改善发生在哪一类页面。
OCR 追问来了,按“页面—区域—证据”回答
后续问题看似分散,实际都在检查三件事:是否正确判断需要 OCR、局部风险是否被整页平均值掩盖,以及最终文字能否回到原页核验。
为什么不对所有 PDF 都做 OCR?
已有字符层通常更直接,也更容易保留文字位置。重新转图识别会增加开销,还可能引入新的错字。OCR 应该处理正文主要存在于图像中的页面,而不是替代所有原生解析。
怎样判断页面只有页眉可读,正文仍需 OCR?
不能只看字符串非空。还要看有效文字分布、正文区域的文字框数量、重复页眉特征以及页面图像覆盖。判断规则要用自己的代表性页面验证,并保留误判样本。
OCR 质量信息很高,为什么仍可能不能入库?
OCR 置信度通常描述字符识别把握,不保证阅读顺序、表格关系和标题层级正确。字都识别对但结构错,仍然会生成错误证据。
只有局部区域质量很低,要不要整页重跑?
先确认问题是否集中在编号、金额、选项框或印章遮挡区域。若 OCR 支持区域级识别,可以保留其余可靠结果,只对目标区域调整渲染、预处理或识别路线;如果区域关系本身无法恢复,再升级到整页复核。无论采用哪种方式,都要保留原图和处理记录,避免局部修复覆盖可靠正文。
页面降级后,还能不能直接对外检索?
取决于降级后是否仍能提供可核验内容。若只是改用另一条可靠解析路线,可以经过验收后入库。若只保留了不完整文字或原图占位,应明确标记风险,并根据业务要求进入复核,而不是默认可用。
怎样区分 OCR 问题和切分问题?
先查看 OCR 结构化结果。如果正确文字、顺序和字段关系在切分前已经错误,问题属于识别或版面处理。如果中间结果正确,进入 Chunk 后才断开表头、标题或句子,再检查切分策略。
用“路由、恢复、验收”讲完整 OCR
现场完整展开时,先说页面怎样分流,再说识别失败怎样隔离,最后落到文字、结构、位置和检索的分层验收:
扫描 PDF 的页面看得见文字,不代表程序已经取得正文,所以我会先在页面级检查有效文字框、正文区域覆盖、重复页眉和图像占比,把页面分成可直接使用、需要 OCR 和待复核三类。OCR 不是终点,识别结果还要带文字框坐标和质量信息,经过方向校正、版面分类、区域关系恢复以及表单与关键字段检查,最后输出正文、内容类型、页码、位置、标题路径和解析状态。失败时按页或关键区域隔离,临时异常受控重试,结构不支持或质量不足的内容采用降级或复核,并让文件显示部分成功而不是伪装完整。质量验收会分文字、结构、位置和检索几层进行,再用固定问题确认正确证据能否被找回并回到原页。这样才能避免系统安静地索引一份空白或错乱的材料。