# Devlog · 质量迭代会话总结（参 veraPDF/ODL/Docling + harness 数据驱动）

> 日期：2026-06-09 · 状态：✅ 一批确定性质量改进；已近确定性天花板
> 方法：诊断（dump 真实数据）→ 参考源码算法 → 实现 → `compare_docling.py` 量化 → 提交。每步可证伪。

---

## 1. 与 Docling 同台（born-digital，agreement 非人工真值）总账

| 指标 | 会话起 | 会话末 |
|---|---|---|
| **NID**（阅读顺序/文本，词级）| 0.601 | **0.697** |
| **MHS**（标题）| 0.265 | **0.610** |
| **TEDS**（表格结构，含表子集）| 0.006 | **0.101** |
| **表格检出召回** | 1/6 | **5/6** |
| 速度 | 5MB/<10ms/700页·s⁻¹/零依赖 | 不变（始终领先）|

## 2. 改动清单（各带 devlog + 量化 + 测试）

| 改动 | 参考 | 效果 |
|---|---|---|
| 无框表格检测 | veraPDF wcag-algs | 召回 1/6→3/6 |
| 词距阈值 0.25→0.15em | veraPDF `SPLIT_THRESHOLD_FACTOR` | NID 0.601→0.626 |
| 标题 编号/全大写 | veraPDF + 惯例 | MHS 0.265→0.412 |
| 字重入 IR（bold） | Docling/ODL 数据模型 | MHS 0.412→0.514 |
| 横线 booktabs 表格 | 学术排版 | 召回 3/6→5/6、TEDS×3.6、连带 MHS/NID |
| 旋转 bbox 修正 + 竖排剔除 | — | 修戳子假标题 + 标题词距 |
| 软连字符去断字 | 文本抽取惯例/Docling | NID 0.640→0.697 |

## 3. 诚实的确定性天花板（逐文档诊断确认）

剩余低分项**非确定性可达**——正是路线图 §2"难例外接模型"的设计边界：

| 文档 | 瓶颈 | 性质 |
|---|---|---|
| amt_handbook | 标题与正文**同字体同字号** | 无排版信号，**需版面模型** |
| normal_4pages（韩文）| 解码正确，但**报头 label-value 词序**反（`발행일 2020`↔`2020 발행일`）| 复杂版面阅读顺序，通用修复易回归 |
| 2203/2206/2305 | **表格结构**（多值单元格/多级表头/合并单元格）、表格区域**吞掉部分正文** | Docling **TableFormer 神经领域**；召回↑与 NID 有 precision 取舍 |

每次改动边际收益已降至 ~+0.002，且渐增回归风险。

## 4. 结论与下一步

- **确定性这条路已采到大头**：文本保真、标题、阅读顺序、表格**召回**做到接近 Docling；**表格结构精度**与**非拉丁复杂版面**是剩余大头。
- **达到 Docling 全维度水平需 N3**：把真实模型（表格/版面/OCR）接到 `core::enhance` 边界，难例按页升级——这是架构既定路径，需依赖/模型选型决策。
- **ODL（OpenDataLoader）是确定性系统**，其水平比 Docling 神经表格更可达；但本机无 ODL 输出可同台，量化对比需先取 ODL 结果。
- 速度维度**已超越**两者（神经/JVM 管线无法匹敌单二进制 <10ms）。
