# Devlog · rtl_03 诊断:整页被装饰边框吞成"假表"——页框否决修复

> 日期:2026-06-10 · 触发:G9a 期间定位的"rtl_03 无文本提取"独立 issue

## 诊断链(两次推翻自己)

1. 初判"字体/编码问题" → **错**:dump 显示 Identity-H+ToUnicode 字体齐全,我方实际抽出 **337 个阿拉伯语 chunk**;
2. 再查 chunks:337 元素 → **只出 1 个 chunk,kind=table,bbox=(25,25)-(571,817) 全页** → 真凶:页面装饰边框 + 几条规则线满足了有框表格的网格判定,**整页被吞成一张 35 行的"表"**,全部文本被表格排除逻辑收走;
3. 参照侧同时澄清:ODL 对 rtl_03 只读出 **12 个词**——该文档的 0 分**主要是参照近空**,任何输出与 12 词的一致度都≈0。

## 修复:页框假表否决(填充率判别)

不能用"覆盖全页"一刀切(bialetti 的真表也近全页)——判别器用**单元格填充率**:有框表格成立后,非空单元格占比 <25% → 判为装饰框,拒绝。bialetti(高填充)无伤,rtl_03 恢复正常 chunk 流。

## 实效

- rtl_03:1 个假表 chunk → 6 个真实 chunks(标题+段落);NID 0.056(参照仅 12 词,上限本就低,如实记录);
- **TEDS vs ODL 0.128 → 0.141**(别处的空假表同样被清掉);NID +0.001;MHS ±0.003 噪声;
- 100 单测、clippy 零 warning、三件套零回归。

## 教训

"0 分"的归因要追到底:一次错归因(字体)、一次中途结论(参照空)之后才到真凶(假表)。诊断三件套——dump 原始数据、查自己输出、查参照——缺一不可。
