首页/AI/RAG 与向量库速查/解析质量抽检与指标

解析质量抽检与指标

批量解析后先做质量抽检:统计空页比例、乱码比例、平均字符数并人工抽样比对原文;发现问题的文档单独走 OCR 或人工修复。

RAG 与向量库速查AI更新于 2026-10-13

为什么要先抽检

批量解析后直接全量入库风险很高:扫描件可能整页空白,字体未嵌入的 PDF 可能输出乱码,双栏排版可能把两栏文字串成一行。抽检先统计可量化指标(空页比例、乱码比例、平均字符数、解析页数与原文是否一致),再分层抽样与原文逐页比对,把有问题的文档单独挑出来走 OCR 或人工修复,避免坏数据混进索引。

基本信息

触发时机每批解析完成后、写入索引之前
量化指标空页率、乱码字符比例、平均字符数、解析失败文档数
抽样方式按来源、格式、页数分层,各层抽固定条数
处理动作问题文档走 OCR、换解析器或人工修复后重新入库

典型使用场景

  • 大批量 PDF 入库前把关:几千份文件先跑脚本,圈出可疑清单再人工看
  • OCR 效果验证:对比 OCR 前后同一批扫描件的空页率与错字情况
  • 解析器升级回归:换版解析库后跑同一套指标,确认没有整体退化
  • 文档质量摸底:向业务方反馈源文件本身的问题(如缺字体、影印不清)
  • 数据回溯:入库报告按文档记录指标,出现坏答案时能快速定位源头

抽检脚本

抽检脚本
import fitz

doc = fitz.open("manual.pdf")
pages = [p.get_text() for p in doc]              # 逐页取文本
empty = sum(1 for t in pages if len(t.strip()) < 20)     # 近空白页计数
mojibake = sum(1 for t in pages if t.count("\ufffd") > 5)  # 替换符过多视为乱码
print(f"共 {len(pages)} 页,空页 {empty},疑似乱码页 {mojibake}")
# 指标写入索引报告:文档 id、页数、字符数、空页数,便于事后回溯

指标与处理动作

指标正常表现异常时的动作
空页比例低于百分之一扫描件缺 OCR,确认是否为图片型 PDF
乱码字符比例接近零字体未嵌入或编码错误,换解析器或走 OCR
平均字符数与文档类型吻合明显偏低说明解析丢内容,检查版面
解析页数等于原文页数缺页时排查分片失败或只读了首页
把抽检指标写入索引报告(每份文档的页数、字符数、空页数),出现坏答案时能按文档回溯到具体是哪一步出了问题。
指标只能发现整体异常,判断内容是否错位仍需人工看样张;建议在报告里直接附上前两页的解析文本片段。

易错点

  • 只看总量不看分布,少量关键页解析失败会被平均值掩盖
  • 乱码页不处理直接入库,检索结果夹杂噪声片段
  • 抽样只看首页,正文中段的排版问题(分栏、表格)漏检
  • 指标不落盘,出问题时无法判断是解析退化了还是源文件换了

数据来源与参考

  • PyMuPDF 官方文档(页面文本)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌