Appearance
L02-03 文档解析:PDF 是最难啃的骨头
全局中心内容:解析输出是后面所有步骤的唯一输入。 全局讲解主线:一个量化证据开场 → 格式难度分级 → PDF 的三条启发式 → 扫描件必须报错。
P1 · 产出页
中心内容:四种格式都能解析,且失败时不静默。
- 讲解技巧
- 用一个数字开场:「只换解析器,评测集召回率从 61% 到 84%。没动模型、没动向量库、没调参数」。
- 这句话能立刻让学员重视这个「不酷」的环节。
- 时长:20s
P2 · 量化证据页
中心内容:解析质量决定 RAG 上限。
页面内容:五个解析问题 → 各自的下游表现
讲解技巧
- 逐条对照讲:表格乱 → 模型读不懂;标题丢 → 切分切不好;页眉污染 → 向量偏移;双栏交错 → 句子打散;扫描件 → 静默丢文档。
- 强调最后一条最危险:不报错、不告警,文档「灌进去了」但是空的。
时长:3min
P3 · 难度分级表
中心内容:PDF 难在它只有坐标,没有结构。
页面内容:MD ★ / HTML ★★ / Word ★★★ / PDF ★★★★★
讲解技巧
- 讲清 PDF 的本质:它记录「在 (100,720) 画一个 A」,不是「这是二级标题」。所有结构都要靠启发式反推——这就是解析器的价值。
- 给各格式的推荐方案(Jsoup / POI / PDFBox)。
时长:3min
P4 · PDF 三条启发式
中心内容:页眉页脚过滤是性价比最高的一条。
页面内容:字号+加粗判标题 / x 坐标聚判分栏 / 跨页高频行判页眉页脚
讲解技巧
- 强调第三条收益极高且实现简单:跨页出现 ≥80% 的行判定为噪声。它对召回率的提升常超过调参。
- 第一条给具体阈值(字号 > 正文 × 1.15),学员需要能直接抄的数。
时长:4min
P5 · 扫描件:唯一的硬门槛
中心内容:抽不到文本必须报错,不能返回空。
页面内容:每页字符数 < 50 → 判定扫描件 → 抛异常
讲解技巧
- 明确建议不要承诺「所有 PDF 都能灌」:遇到大量扫描件的项目,先做样本评估再报价。这是商业建议,学员会很受用。
- 给判断方法(抽样统计字符数),而不是靠肉眼看。
时长:3min
P6 · 编码:统一接口
中心内容:返回 Section 列表,切分章节要用。
页面内容:
DocumentParser接口、ParsedDocument(text, sections, attrs)讲解技巧
- 讲清为什么要返回 sections:02-04 的结构感知切分依赖标题层级,解析阶段丢了就只能靠正则猜。
- 这是一个「为下游设计接口」的实例,值得展开 30 秒。
时长:4min
P7 · 编码:PDF 解析器
中心内容:三步:扫描件检测 → 去页眉页脚 → 还原层级。
页面内容:isScanned / removeHeaderFooter / detectSections
讲解技巧
- 现场跑一份带页眉页脚的 PDF,对比过滤前后的文本。视觉差异比讲解有力。
- 强调
removeHeaderFooter的实现逻辑(跨页高频行),让人知道它不是黑魔法。
时长:5min
P8 · 编码:编排与失败处理
中心内容:空文本必须抛异常,不能静默通过。
页面内容:ParserRegistry 按扩展名分发 + 空文本校验
讲解技巧
- 这一页是本节的职业素养体现:静默返回空 = 文档看起来灌进去了 = 用户问不到 = 你无从排查。
- 给出做法:解析后强制校验长度,为空直接失败并把文件挪到失败目录。
时长:4min
P9 · 验证与小结
中心内容:扫描件必须抛异常,这是本节最重要的验收点。
页面内容:五类测试文档各自的通过标准
讲解技巧
- 现场放一个扫描件进去,看到异常抛出。这个「报错」是本节成功标志,要庆祝一下。
- 结尾引出:表格被解析成乱码怎么办?——02-04 结构感知切分。
时长:2min
讲师备忘
| 项 | 内容 |
|---|---|
| 课前必做 | 准备四类测试 PDF(普通/带表格/带页眉页脚/扫描件) |
| 最容易超时处 | P4 的三条启发式,容易展开讲版面分析算法——给阈值就收 |
| 学员最常问 | 「有没有现成的 PDF 解析库?」答:PDFBox 是基础,结构还原要自己做 |
| 现场备用 | 找不到扫描件样本 → 用图片转 PDF 现造一个 |