# REPORT-TEXTFID — PDF 文本层对「排版元素」的转写保真度测量 - 任务:测量**已有判据**(文本层 vs 600dpi 目视)在排版元素上的表现。不提名新变量、新分类轴。 - 预读:`/tmp/vi-agents/PITFALLS.md` 全文,行数 **1316**(`wc -l` 与读到的末行一致)。 - 落盘纪律:只用 `cat >>`,每节完成即追加并 `wc -l` 核对递增。 ## 0. 主结论一句话 (待填) ## 1. 方法与取样 (待填) ## 2. 按元素类拆开的零差异率表(7 类,每格带 n) (待填) ## 3. 补字清单(逐条原文照抄,标注是否限定语) (待填) ## 4. 对项目纪律的影响:文本层能不能用来定位排版元素候选 (待填) ## 5. 这份结论自己有什么洞 (待填) ## 6. 落盘与验证记录(渲染次数 / 零字节产出数 / fontcheck 结果) (待填) --- ## 0-bis. 预读记录(纪律留痕) | 文件 | `wc -l` | 读到末行 | 用途 | |---|---:|---:|---| | `/tmp/vi-agents/PITFALLS.md` | **1316** | **1316** ✅ 一致 | 全 87 条读完(分三块 1–340 / 341–680 / 681–1020 / 1021–1316) | | `/tmp/vi-agents/REPORT-DPI200.md` | 836 | 836 | 广发条逐字 diff 写法(§2.2)与「文本层 vs 渲染」边界声明(§6/§7) | | `/tmp/vi-agents/REPORT-FONTAUDIT.md` | 542 | 读 §5(328–377) | 7 条清单来源 | **从 PITFALLS 里直接继承、且本轮会踩到的编号条目**: - **63** 文本层统计先打印前 200 字符;百度VI 是符号密文,`\x01\x02○` - **67** 200dpi 读出的排版元素即使读对也不得单独支撑高置信 - **21 / 25** 文本层可能是替换密码(斐乐 `0GýDJBM`=`Official`) - **28** `pdftotext` 非空 ≠ 有效(<50 字/页是伪影层) - **69** 中粮 `Blod` 少字母 o —— **转录保留原样,不顺手改对** - **72 / 76 / 75** 「参阅=请+阅+参」;有些「错误」是伪造的;订正链自我继承 - **77** 断言「拼接/伪造」必须给坐标或渲染图 - **78 + 78修正** 豆腐块真判据是 **`CID`+`Identity-H`**,不是 `emb=no`;脚本报异常比例先验脚本 - **79** 「X 份里 Y 份」必须同句写清 X 怎么选出来的 - **80** 可打印率测不出它被设计来测的东西(替换密码的可打印率恒为 1.000) - **83** 「空着的栏」会被模板稳定命中 - **PITFALLS 66** 骨架先行、只用 `>>`、每节 `wc -l` 核对 **与前序报告的接口**:REPORT-DPI200 §2.2 记「广发页脚」那条是**唯一实质错读**, 其 §1.4 同时给出**文本层独立第二证据线且与 600dpi 逐字一致**—— 即在那一个案例上文本层是**对的**,而 200dpi 目视是**错的**。 本任务测的是相反方向的问题:**文本层自己什么时候会错**。 --- ## 1. 方法与取样 ### 1.1 样本来源:**硬未读池**(REPORT-ACCEPTANCE v4 口径的有效分母 109 份) 取自 `/tmp/vi-accept/italic_hard.json` 的 `eff_files`(**109 份**)。 该池由 REPORT-ACCEPTANCE 定义:v4「品牌 token 出现过即算已读」→ 已读 1,431 / 未读 **130**, 再剔除 9 份未抽取 + 4 份页面伪影(<50 字节/页)+ 8 份符号密文 → **有效分母 109**。 **本轮不重新推导这个口径**,直接沿用,以免与前序报告的分母打架(PITFALLS 79)。 ### 1.2 筛选链(每一层都报数,分母可追) | 层 | 判据 | 剩余 | |---|---|---:| | 硬未读有效池 | ACCEPTANCE v4 口径 | **109** | | `pdffonts` 字体行数 > 0 | 排除纯图像件(PITFALLS:0 行=无字体信息,不等于无内容) | **109**(0 份为 0 行) | | `pdftotext` plain ≥50 字符/页 | PITFALLS 28「非空≠有效」 | **107** | | **横版**(任一页 w > 1.05h) | 任务书「横版或含明显排版元素栏位」 | **85** | | **MD5 去重** | PITFALLS 3/81:同一文件被收录多次,不能当多份证据 | **76** | | **本轮取样** | 跨语言跨品类跨页数,覆盖 7 类元素可得性 | **30** | **口径声明(PITFALLS 70)**:文本层计量一律为 **`pdftotext` plain 模式的字符数**(`len(str.strip())`), 不混用 `-layout` 与字节数。 ### 1.3 fontcheck 门禁(渲染前必做) 30 份**逐份实跑** `/tmp/vi-agents/fontcheck.sh`,**退出码全部为 0**, 无一份命中 `CID`+`Identity-H` 真豆腐块判据。逐份明细: | # | 件 | FONT_ROWS | NON_EMB | # | 件 | FONT_ROWS | NON_EMB | |---|---|---:|---:|---|---|---:|---:| | 1 | Budweiser-2021 | 16 | 0 | 16 | 韩束VIS系统 | 17 | 0 | | 2 | alberta | 208 | 0 | 17 | browardcollege | 93 | 0 | | 3 | FloSports | 41 | 0 | 18 | QQVIP | 19 | 0 | | 4 | 3m_visual_guidelines | 11 | 0 | 19 | HK-guidelines | 161 | 1 | | 5 | klarna | 263 | 0 | 20 | 闪咖 | 17 | 0 | | 6 | Al-Rehal | 24 | 0 | 21 | Jetruby | 40 | 0 | | 7 | OntarioTech | 259 | 0 | 22 | NintendoSwitch-EU | 24 | 0 | | 8 | pioneers-athletics | 8 | 0 | 23 | SoM_brand_guidelines | 73 | 5 | | 9 | 钉钉 | 24 | 0 | 24 | Sands | 53 | 0 | | 10 | ADBOE | 145 | 0 | 25 | GT_BrandBible | 23 | 0 | | 11 | Seagate | 30 | 0 | 26 | 猫途鹰Tripadvisor | 9 | 0 | | 12 | Evernote | 45 | 0 | 27 | 拜耳VBB | 39 | 0 | | 13 | Networks品牌VI手册 | 57 | 0 | 28 | bentley | 3 | 0 | | 14 | Bellanova | 55 | 0 | 29 | Facebook-Brand-Assets | 33 | 0 | | 15 | Now_Brandbook | 18 | 0 | 30 | AppleLogoStandards | 11 | 11 | **AppleLogoStandards 11 行全部未嵌入但判 OK**——按 PITFALLS 78 的修正判据(形态而非 `emb`), 它们带标准 CMap/简单字体可回退;该件为纯图形件,**目视结果另记**。 ### 1.4 每组比对的四步(按任务书,不增不减) 1. `pdftotext -f N -l N` 抽该页文本层,**先打印前 200 字符**(PITFALLS 63) 2. `pdftotext -bbox` 给该排版元素的逐字坐标,确认它在页面上的**物理位置** (页脚=页底 %、章节标题=字号代理、版权栏=文本命中) 3. `pdftoppm -r 600 -f N -l N` 渲染该页并**按 bbox 裁切**该区域 → **目视** 4. 逐字 diff:文本层写法 vs 目视写法 **差异类型取值域**(固定 7 值):`零差异` / `漏字` / `补字` / `换序` / `断行归一化后可对齐` / `不可比` / `未发现`。 **补字额外分类**:补出的是**限定语**(须/应当/必须/经/后/前)还是普通字。 **(本节填写于 60 组全部完成 600dpi 目视之后;填写前本行为空占位)** 30 份样本、60 组排版元素比对中,**文本层字词转写零差异 52/60(86.7%)**; 6 组差异**全部是「多出」或「断行」,没有一组是「漏字」或「换序」**—— 即文本层可以定位排版元素候选位置并读出其字词,但**不能替代 600dpi 目视**: 抽到的 30 份全部有可用文本层(`pdffonts` 字体行 > 0,`pdftotext` plain ≥50 字符/页), 同时 30 份里有 **6 份出现「文本层多出页面上不存在的字」类问题**(详见 §3), 且 **7 类排版元素中有 3 类(法务小字/页眉/稿件标注)在 60 组里一组都没取到**(详见 §2 脚注)。 --- ## 1-bis. 选点方法的修正(必须先读,否则 §2 的 n 不可信) 第一轮选点用「`y ≥ 90% 页高 → 页脚`」+ 正则命中,在 30 份里**大面积误命中正文与图注**。 60 组初选点名目:f03 `White Icon on black background.`(图注)、f03 `version (remake) of Uni Sans`(正文 y%=27.5)、 f08 `Y100`(色值)、f13 `disaster recovery, and rapid 74% cloud failover`(图表标注)、 f21 `255,86,29`(色值)、f24 `nications department.`(正文断句)、f27 `CMYK:82/30/65/76`(色值而非页脚)。 **改用跨页复现判据**重选:`y ≥ 88% 页高` 的行,按「数字归一 + 去标点」后的文本, 统计它在**本册多少个不同页**上重复出现;重复页数 ≥4 才算真页脚。 结果 30 份里 **24 份直接命中真页脚**,另外 6 份(f03/f05/f16/f23/f26 及个别弱候选)改取章节标题, f07/f08/f12/f22 四份按坐标人工指定。 **这条修正本身是本报告最硬的工程结论之一**: 单靠 `y%` 定位排版元素会把正文和图注当候选;**加上「跨页复现」后误命中才被压下去**。 --- ## 2. 按元素类拆开的零差异率表(7 类,每格带 n) 分母 = 该类实际取到的组数;「零差异」= 文本层字词与 600dpi 目视逐字相同。 | 元素类 | n | 零差异 | 零差异率 | 差异构成 | |---|---:|---:|---:|---| | 页脚 | 24 | 21 | **87.5%** | 补字×1(f07 p3)、断行归一化后可对齐×2(f10 p12、f22 p2) | | 色卡标注 | 19 | 17 | **89.5%** | 补字×2(f19 p20、f20 p19) | | 版权栏 | 7 | 6 | **85.7%** | 补字×1(f11 p46) | | 章节标题 | 9 | 8 | **88.9%** | 补字×1(f03 p42) | | 版本栏 | 1 | 0 | 0% | 补字×1(f22 p2)— **n<5,样本不足,不引用** | | 法务小字 | **未发现** | — | — | 60 组中 0 组 | | 页眉 | **未发现** | — | — | 60 组中 0 组(f26 p26 顶部 `Tripadvisor 26` 属页眉,但本轮未取为计数样本) | | 稿件标注 | **未发现** | — | — | 60 组中 0 组 | | **合计** | **60** | **52** | **86.7%** | 补字×6、断行归一化后可对齐×2、漏字×0、换序×0、不可比×0、未发现×0 | **分母纪律说明** - `版本栏` 只有 1 组,0/1 的比率**不作为结论引用**,只登记事实(f22 p2 `VERSION` 补空格)。 - `法务小字`/`页眉`/`稿件标注` 三类是**「未发现」,不是「零」**:分母不成立,不写 0%。 - `漏字` 与 `换序` 两类的「零」经过反向检索,见 §6。 **反向检索(宣布不存在之前必须做)** 1. **漏字反向**:把 60 组每个排版元素的全部词元(≥2 字符)回灌到该页 `pdftotext` plain 里定位, **57/60 全部命中**。3 处未命中已逐个定位为非漏字: - f10 p12 `10AdobeCorporateBrandGuidelines` —— plain 把页码 `10` 单独成行、页脚串另起一行, `-bbox` 的物理行与页面完全一致 → 判 `断行归一化后可对齐`; - f14 p17 `pantone2766C` —— 页面写作 `PANTONE 2766C`,plain 中 `2766C` 与 `PANTONE` 分处两行; - f18 p24 `PantonePantone` —— 这是**本报告行归组工具**把同一行两处 `Pantone` 合并、 并吞掉中间汉字「属」造成的,属测量工具产物,非文本层失真(页面实为 `(*Pantone属Pantone公司所有。)`)。 2. **补字反向**:30 份整册 plain 全文扫 `U+200B/U+200C/U+200D/U+FEFF/U+2060/U+202F/U+00A0/U+3000/U+2009/U+2007/U+2011` 与控制字符,命中见 §3;扫「字内单字母空格」正则命中 20 处,逐条判定后**只有 1 处落在本轮 60 组内**(f03)。 搜索结果并非空白——反例存在,已如实计入。 **逐组明细(60 组全量)** | 组 | 文件 | 类 | 页 | 文本层(plain 原文) | 差异类型 | |---|---|---|---|---|---| | f01E1 | Budweiser | 页脚 | 113 | `All imagery is for placement` | 零差异 | | f01E2 | Budweiser | 色卡标注 | 68 | `HEX: #FFFFFF` | 零差异 | | f02E1 | alberta | 页脚 | 2 | `Government of Alberta \| Visual Identity Manual \| Edition 25 \| APRIL 2023` | 零差异 | | f02E2 | alberta | 版权栏 | 20 | `Copyright Free License` | 零差异 | | f03E1 | FloSports | 章节标题 | 4 | `Logo Guideline` | 零差异 | | f03E2 | FloSports | 章节标题 | 42 | `F O WRESTLING` | **补字(普通字)** | | f04E1 | 3m | 页脚 | 1 | `March 12, 2015` | 零差异 | | f04E2 | 3m | 色卡标注 | 21 | `registered trademark of Pantone, Inc.` | 零差异 | | f05E1 | Klarna | 章节标题 | 3 | `Introduction` | 零差异 | | f05E2 | Klarna | 色卡标注 | 50 | `CMYK: 42 \| 22 \| 5 \| 0` | 零差异 | | f06E1 | Al-Rehal | 页脚 | 1 | `AZ Tech Solutions` | 零差异 | | f06E2 | Al-Rehal | 色卡标注 | 34 | `PANTONE` | 零差异 | | f07E1 | OntarioTech | 页脚 | 3 | `28\t\x07SIGNATURE IDENTITIES` | **补字(普通字·控制字符)** | | f07E2 | OntarioTech | 版权栏 | 57 | `© University of Ontario Institute of Technology 2019. ONTARIO TECH UNIVERSITY` | 零差异 | | f08E1 | pioneers-athletics | 章节标题 | 2 | `Brand Overview` | 零差异 | | f08E2 | pioneers-athletics | 色卡标注 | 32 | `Pantone` | 零差异 | | f09E1 | 钉钉 | 页脚 | 4 | `DINGTALK VISUAL IDENTITY SYSTEM` | 零差异 | | f09E2 | 钉钉 | 色卡标注 | 51 | `PANTONE Basic Colors` | 零差异 | | f10E1 | ADBOE | 页脚 | 12 | `10` + 换行 + `Adobe Corporate Brand Guidelines \| Adobe Confidential \| 25 October 2010` | **断行归一化后可对齐** | | f10E2 | ADBOE | 版权栏 | 53 | `For more information on copyright` | 零差异 | | f11E1 | Seagate | 页脚 | 10 | `10` | 零差异 | | f11E2 | Seagate | 版权栏 | 46 | `Do not infringe copyright` | **补字(普通字·U+200B)** | | f12E1 | Evernote | 页脚 | 2 | `evernote brand guidelines - 2023` | 零差异 | | f12E2 | Evernote | 色卡标注 | 22 | `PANTONE Cool Gray 8` | 零差异 | | f13E1 | Networks | 页脚 | 2 | `A10 Networks / Brand Guidelines` | 零差异 | | f13E2 | Networks | 版权栏 | 54 | `©2022 A10 Networks, Inc. All rights reserved.` | 零差异 | | f14E1 | Bellanova | 页脚 | 42 | `www.bellanova.com` | 零差异 | | f14E2 | Bellanova | 色卡标注 | 17 | `pantone2766C` | 零差异 ※大小写失真 | | f15E1 | Now | 页脚 | 39 | `7.00 Applications` | 零差异 | | f15E2 | Now | 色卡标注 | 20 | `PANTONE 2413 C` | 零差异 | | f16E1 | 韩束 | 章节标题 | 28 | `会议迎宾牌` | 零差异 | | f16E2 | 韩束 | 章节标题 | 13 | `美白科技专利由韩束独家研发` | 零差异 | | f17E1 | broward | 页脚 | 4 | `BROWARD COLLEGE BRAND GUIDELINES` | 零差异 | | f17E2 | broward | 色卡标注 | 37 | `HEX #A9DEED` | 零差异 | | f18E1 | QQVIP | 页脚 | 33 | `7.00 Applications` | 零差异 | | f18E2 | QQVIP | 色卡标注 | 24 | `Pantone公司所有 。)` | 零差异 ※行归组吞字 | | f19E1 | HK-guidelines | 页脚 | 1 | `二OO三年二月` | 零差异 | | f19E2 | HK-guidelines | 色卡标注 | 20 | `請使用真正的 PANTONE ® 色版,勿以本圖` | **补字(普通字·空格)** | | f20E1 | 闪咖 | 页脚 | 8 | `2.00 Logo` | 零差异 | | f20E2 | 闪咖 | 色卡标注 | 19 | `Pantone公司所有 。)` | **补字(普通字·空格)** | | f21E1 | Jetruby | 页脚 | 2 | `02` | 零差异 | | f21E2 | Jetruby | 色卡标注 | 31 | `CMYK` | 零差异 | | f22E1 | Nintendo | 页脚 | 2 | `0\n2`(页面为竖排旋转 `02`) | **断行归一化后可对齐** | | f22E2 | Nintendo | 版本栏 | 2 | `VE RS I O N` | **补字(普通字·空格×4)** | | f23E1 | SoM | 章节标题 | 13 | `Application on backgrounds` | 零差异 | | f23E2 | SoM | 色卡标注 | 14 | `The primary colour is Pantone` | 零差异 | | f24E1 | Sands | 页脚 | 10 | `10` | 零差异 | | f24E2 | Sands | 色卡标注 | 13 | `Pantone Cool Gray 2` | 零差异 | | f25E1 | GT | 页脚 | 7 | `13` | 零差异 | | f25E2 | GT | 色卡标注 | 9 | `Pantone 109C is the official color of` | 零差异 | | f26E1 | 猫途鹰 | 章节标题 | 26 | `Ratings & Reviews: Dos` | 零差异 | | f26E2 | 猫途鹰 | 色卡标注 | 21 | `HEX #004F32` | 零差异 ※页面用带斜杠零 Ø 渲染 | | f27E1 | 拜耳 | 页脚 | 6 | `Approved for External Use: Vegetables by Bayer Brand Guidelines // July 2021 11` | 零差异 | | f27E2 | 拜耳 | 色卡标注 | 18 | `CMYK: 82/30/65/76` | 零差异 | | f28E1 | bentley | 页脚 | 6 | `10` | 零差异 | | f28E2 | bentley | 版权栏 | 31 | `© BENTLEY MOTORS LIMITED` | 零差异 | | f29E1 | Facebook | 页脚 | 2 | `Facebook Inc. - All rights reserved.` | 零差异 | | f29E2 | Facebook | 版权栏 | 25 | `- Copyrighted content` | 零差异 | | f30E1 | Apple | 页脚 | 2 | `See Logo/Staging` | 零差异 | | f30E2 | Apple | 章节标题 | 12 | `Color Variations` | 零差异 | **※三条必须随表一起读的备注**(不改变 7 值判定,但会在下游造成误判): - **f14E2 大小写失真**:文本层给 `pantone2766C`,页面实际渲染 `PANTONE 2766C`(全大写变体)。 字词序列完全相同,故计 `零差异`;但**凡是要按大小写做检索或替换的流程都会在这里失手**。 - **f18E2 行归组吞字**:本报告的 bbox 行归组把同一行两处 `Pantone` 合并、吞掉中间汉字「属」。 这是**测量工具的产物**,不是文本层缺陷——`plain` 给的 `Pantone公司所有 。)` 与页面一致。 反向提醒:bbox 的**词边界不可信**,**单字边界可信**,行归组只用于定位。 - **f26E2 渲染变体**:页面用带斜杠的零 `Ø` 渲染 `004F32`,文本层给数字 `0`。 这一例里**文本层比渲染更「正确」**,属字体字形变体,不是转写失真。 **⚠ 一条不计入 60 组、但必须单列的发现(f10 p56)** ADBOE p56 的 bbox 在页面 94–99% 区域给出 L42/L49 `simulations using Adobe Captivate® software.` 与 L50 `t%FTJHO DPNQFMMJOH DPOUFOUOP TQFDJBMJ[FE QSPHSBNNJOH TLJMMT SFRVJSFE`(疑似整体移位一格的替换密码)。 600dpi 实拍该区域(`F10v_bot_s0/s1.png`,y=540–610pt)**只看得见真正的页脚 L45 `54 Adobe Corporate Brand Guidelines | Adobe Confidential | 25 October 2010`**, 右栏正文与其下所有行**在页面上不可见**。 因此:**`y%` 落在页脚带,不等于该 token 会被印出来**。 本报告首轮选点正是把 f10 p56 的 L49 当成了页脚并差点计入。 这解释了为什么 `y%` 单判据必须配「跨页复现」,且**仍需目视确认**。 --- ## 3. 补字清单(逐条原文照抄,标注是否限定语) 判为 `补字` 的共 **6 组 / 60**。**补出的字符逐条核对后全部是空白或控制类,没有一条是限定语。** | # | 组 | 页 | 文本层原文(照抄,`repr`) | 页面上实际写法(600dpi 目视) | 补出的字符 | 是否限定语 | |---|---|---|---|---|---|---| | 1 | f03E2 | 42 | `'F O WRESTLING'` | `FLOWRESTLING`(全大写斜体,无空格) | 半角空格 ×1(`F` 与 `O` 之间) | **否(普通字)** | | 2 | f07E1 | 3 | `'28\t\x07SIGNATURE IDENTITIES'` | `28 SIGNATURE IDENTITIES` | 制表符 `\t`(0x09) ×1、BEL `\x07`(0x07) ×1 | **否(普通字)** | | 3 | f11E2 | 46 | `'Do not infringe copyright'` | `Do not infringe copyright` | U+200B 零宽空格 ×1 | **否(普通字)** | | 4 | f19E2 | 20 | `'請使用真正的 PANTONE ® 色版,勿以本圖'` | `請使用真正的 PANTONE® 色版,勿以本圖` | 半角空格 ×1(`PANTONE` 与 `®` 之间) | **否(普通字)** | | 5 | f20E2 | 19 | `'Pantone公司所有 。)'` | `Pantone公司所有。)` | 半角空格 ×1(`所有` 与 `。` 之间) | **否(普通字)** | | 6 | f22E2 | 2 | `'VE RS I O N'` | `VERSION` | 半角空格 ×4 | **否(普通字)** | **限定语补字:未发现(不是「零」)** - 正向:上表 6 条补字补出的字符逐条核对,无一条属于 `须/应当/必须/经/后/前`。 - 反向:60 组所在页的文本层里确实检出了限定语——f09 p4 `经`×1、f15 p39 `须`×3、f15 p20 `须`×2、 f16 p13 `须`×1 与 `必须`×1、f18 p24 `须`×2、f20 p19 `须`×2,**共 5 份 10 处**。 但逐行坐标核对后,**这 10 处全部落在 y%=26–41% 的正文条文里**,不在本轮计数的 60 个排版元素上 (例如 f20 p19 被计的元素是 L52 `Pantone公司所有。)`@y%=49.4,而 `须` 在 L30/L37@y%=35.4/39.2)。 **这些正文条文按任务纪律本就不入分母**,故限定语补字在本轮口径下写「未发现」。 - 含义:**若下游流程要把限定语当硬约束使用(如「须/必须」的合规检查), 本轮没有拿到任何证据表明文本层会凭空造出限定语**——但也**没有证据表明它不会**, 因为分母里没有一组限定语密集的排版元素。这个洞记在 §5。 **补字在全池的分布(反向检索的补充证据)** | 形态 | 命中 | 判定 | |---|---|---| | U+200B 零宽空格 | 仅 f11 Seagate 1 份,**33 处** | 是文件级系统性问题,不是偶发 | | U+00A0 不换行空格 | 仅 f14 Bellanova,1 处 | 偶发 | | BEL `\x07` 控制字符 | f07 557、f04 31、f27 11、f23 10、f17 2 | 文件级系统性 | | SOH `\x01` 控制字符 | 仅 f10 ADBOE,7 处 | 文件级系统性 | | FF `\x0c` 换页符 | 30 份全部命中(1,781 处) | 分页符,非失真,不计 | | 字内单字母空格(`V E R` 式) | 20 处命中,其中 17 处是**字体样张/字标**(`A B C D E F`、`C L I N I C`、`F O L D E R`、`E D U C`) | 良性,不计 | | 字内单字母空格(可疑) | f03 `R E S T L I N G`(本轮 f03E2)、f10 `C O M M U N I C A T I O N S` / `T H O R I Z E D` / `E D I N S T` 等 | f03 已计入;f10 的这些位于不可见隐藏文本区(见 §2 末尾) | **关键工程含义**:这 6 条补字**全部不改变字词序列**。 也就是说,文本层可以放心用来做**字词级检索与定位**; 但**不能直接拿文本层做逐字节串比对、精确替换、或正则锚定**—— `VERSION` 在 plain 里是 `VE RS I O N`,`FLOWRESTLING` 是 `F O WRESTLING`。 --- ## 4. 对项目纪律的影响:文本层能不能用来定位排版元素候选 **条件式回答:能,但只在下面三条同时成立时成立;任一条不成立就必须退回 600dpi。** | # | 条件 | 本轮证据 | 强度 | |---|---|---|---| | 1 | 该 PDF 有可用文本层(`pdffonts` 字体行 > 0 且 `pdftotext` plain ≥50 字符/页) | 30/30 份满足;`fontcheck` 退出码全 0,无 `CID`+`Identity-H` 豆腐块 | **强**,可作前置门禁 | | 2 | 定位用「跨页复现」,不是只用 `y%` | 只用 `y%≥90%` 时 60 组里至少 7 组误命中正文/图注(`White Icon on black background.`、`version (remake) of Uni Sans`、`Y100`、`255,86,29`、`nications department.`、`CMYK:82/30/65/76`、`disaster recovery, and rapid 74% cloud failover`);改用「`y%≥88%` + 同文本在 ≥4 个不同页复现」后 24/30 份直接命中真页脚 | **强**,可直接成为流水线规则 | | 3 | 候选文字只用于**定位与字词级检索**,结论仍由 600dpi 目视出 | 60 组零差异 52(86.7%);6 组补字全部是空白/控制字符,字词序列不变 | **中**:字词可信,字节不可信 | **三条必须写进纪律的反例** 1. **`y%` 落在页脚带 ≠ 会被印出来。** f10 ADBOE p56 的 bbox 在 y%=97.2% 给出 `simulations using Adobe Captivate® software.`,600dpi 实拍该位置**没有任何字**; 同页真正的页脚在 y%=93.6%(L45)。**纯位置判据会把不可见的隐藏文本当成页脚候选。** 这条只有目视能拦,「跨页复现」也拦不住(隐藏文本在同册也复现)。 2. **`-bbox` 的词边界不可信,单字边界可信。** f18 p24 的行归组把两处 `Pantone` 合并并吞掉汉字「属」, 产生 `PantonePantone` 这种**看似文本层补字、实为工具产物**的假象。 3. **`plain` 与 `-bbox` 的行切分不一致。** f10 p12 页面明明是一行 `10 Adobe Corporate Brand Guidelines | Adobe Confidential | 25 October 2010`, `plain` 把它拆成 `10` + 整串两行,`-bbox` 才给出正确的物理行。 两者**都不等价于页面**,目视仍是唯一裁判。 **因此对「文本层只用来定位、结论由 600dpi 出」这条既有纪律的判定:成立,且本轮为其补上了第 2 条的可操作判据(跨页复现)。** --- ## 5. 这份结论自己有什么洞 1. **最大的一条:7 类里只测到了 5 类。** `法务小字`、`页眉`、`稿件标注` 在 60 组里**一组都没取到**(§2 已写「未发现」不是「零」)。 而法务小字恰恰是**限定语最密集、最不允许错**的一类。 换句话说:**本报告没有测过最该测的那一格**,86.7% 这个数**不能外推到法务小字**。 2. **`版本栏` 只有 1 组,0/1。** n<5,0% 不引用。可用样本本身就少。 3. **限定语补字写的是「未发现」不是「零」**,因为分母里没有限定语密集的样本(§3)。 如果下游流程真要拿文本层当合规硬约束,**本报告给不出任何保证**。 4. **样本来自硬未读池 109 份中的 30 份,不是随机抽样**, 且中途因 `y%` 误命中而**换过一次选点方法**(§1-bis)。 换方法这件事本身说明:**零差异率对「怎么挑候选」是敏感的**,跨文件比较必须先统一选点口径。 5. **页脚候选里混进了「页码单独成行」的形态**(f11/f24/f25/f28 `10`、`13`、`02`)。 这类页脚**只有一个数字,保真度天然最高**,会把页脚类的零差异率往上拉。 若只看有实际文字的页脚(24 组里 17 组),零差异数不变但**分母与结论都会变**——本轮没有重算。 6. **大小写失真只有 2 处、且来自 2 个文件**(f14、f03),**样本不足,不外推**。 但它恰恰是最容易在下游炸掉的一类(见 §2 备注)。 7. **漏字与换序的 0 例是反向检索支持的,不是目视支持的**—— 漏字 0 例的证据是「60 组词元 57/60 可在该页 plain 中定位,另 3 处已定位为非漏字」, 这是**文本层自洽性检查**,不能替代「页面有而文本层无」的直接目视普查。 --- ## 6. 落盘与验证记录(渲染次数 / 零字节产出数 / fontcheck 结果) **产物** | 项 | 路径 | 规模 | |---|---|---| | 本报告 | `/tmp/vi-agents/REPORT-TEXTFID.md` | 本文件 | | 60 组最终名单 | `/tmp/vi-textfid/roster_final.json` | 60 条,含 bbox 物理坐标 | | 渲染台账(本轮) | `/tmp/vi-textfid/ledger2.tsv` | 30 行 = 30 份 | | 渲染台账(选点期) | `/tmp/vi-textfid/ledger.tsv` | 57 行 | | 证据图 | `/tmp/vi-textfid/img/P*.png`、`F*_E*_s*.png` | 本轮 115 张 / 3,354,206 字节(目录累计 298 张,含选点期) | **渲染统计(本轮 60 组)** | 项 | 数 | |---|---:| | 比对组数 | 60 | | 渲染文件数 | 30 | | `pdftoppm -r 600` 分段调用数 | **70** | | **零字节产出数** | **0** | | 分段字节合计 | 1,519,024 | | 每组打包图 | 30 份 `P??_BOTH.png`;4 份(f03/f08/f21/f26)因总高超 1600px 改出分段图 | **fontcheck 门禁结果(渲染前逐份必跑)** - `fontcheck.sh` 退出码:**30/30 全部为 0**(`ledger2.tsv` 第 2 列)。 - 真豆腐块判据(`CID` + `Identity-H` 同时命中):**0 例**。 - 唯一异常项:AppleLogoStandards 11 行字体未嵌入,按 PITFALLS 78 的形态判据判 OK(见 §1.3)。 **验证动作清单(每组都做了,无跳步)** 1. `pdftotext -f N -l N` 抽该页文本层,**先打印前 200 字符**——对 f10 p56 实际打印出 `Voice: Examples\n\nAdobe\nGovernment\neLearning\nSolution Brief\nAdobe\nGovernment\nand and\n…` (正是这条让「隐藏文本区」提前暴露)。 2. `pdftotext -bbox` 给逐字物理坐标,并核对 `y%`。 3. `pdftoppm -r 600` + 按 bbox 裁切渲染,**逐张目视**(本轮 30 张打包图 + 11 张分段图,全部实际看过)。 4. 与文本层**逐字 diff**,结论登记进 §2 明细表。 **口径与纪律留痕** - 选点方法中途换过一次:`y%` 单判据 → `y% + 跨页复现`(§1-bis)。换法前后都留了名单与台账,可复核。 - `bbox` 行归组的**拼接/吞字一律不记为文本层补字**(f18 已单列为例外说明)。 - 纯图像件(`pdffonts` 0 行)本轮为 0 份,不存在「不可比」分母。 - 仓库 `/Users/lisonghao/code/world-map` **零改动**;本任务只写 `/tmp/vi-agents/REPORT-TEXTFID.md` 与 `/tmp/vi-textfid/`。 - 必读顺序已按要求执行:`wc -l PITFALLS.md` = 1316 → 读至第 1316 行核对末行 → 读 `REPORT-DPI200.md` → 读 `REPORT-FONTAUDIT.md` §5.2; 且在读任何其他文件**之前**已用 `cat >>` 落盘骨架(见 0-bis 节)。 --- ## 附录 A. 落盘后复核中发现的两处偏差(如实登记,不回改上文) 1. **`PITFALLS.md` 现为 1510 行,0-bis 节记的 1316 行是预读当时的行数。** 复核时 `wc -l /tmp/vi-agents/PITFALLS.md` = **1510**,文件 mtime 19:48,晚于本任务的预读时点, 说明**有并发会话在本任务进行期间向该文件追加了内容**。 本任务预读时 `wc -l` 返回 1316,本任务完整读到第 1316 行并核对了末行—— **1316 行是本任务预读时刻的完整长度,不是读漏**;上文的「1316」按当时口径成立。 但严格说,**本任务并未覆盖 1317–1510 这 194 行**,这是本报告的覆盖缺口,在此登记。 2. **`/Users/lisonghao/code/world-map` 现有 58 项工作区变动。** 本任务全程只写 `/tmp/vi-agents/REPORT-TEXTFID.md` 与 `/tmp/vi-textfid/`,**未对仓库执行任何写操作**; 这 58 条属并发会话的他人改动,按纪律**不清理、不回滚**。