# REPORT-TEXTFID2 · 法务小字 / 页眉 / 稿件标注 三格补齐 > 任务:把 `REPORT-TEXTFID.md` 的 86.7% 零差异率**扩展**到上一轮 n=0 的三格,或证明它不能被扩展。 > 范围:不提名新变量、不扩展分类轴。只补三格。 ## 0. 必读与前提 - `PITFALLS.md`:**读到 1570 行 / 98 条**(`wc -l` = 1570,末行 = 第 98 条)。 读法:offset 1 / 366 / 725 / 1056 / 1331,共 5 次 read 直到 EOF,逐行核对。 - `REPORT-TEXTFID.md`:直接前序(434 行)。 ## 1. 取到了没有(三类各多少组) (待填) ## 2. 灌测结果(召回 / 精确率,分开报) (待填) ## 3. 三类各自的零差异率 (待填) ## 4. 限定语补字清单 (待填) ## 5. 86.7% 能不能扩展到这三类 (待填) ## 6. 本报告自己的洞 (待填) --- ## 1-bis. 取样管线(先说清楚分母从哪来,PITFALLS 79) | 层 | 判据 | 剩余 | |---|---|---:| | ACCEPTANCE v4 硬未读有效池 | 沿用前序,不重新推导 | **109** | | MD5 去重 | PITFALLS 3/1b:重复收录不算多份证据 | **100**(去掉 9) | | `pdffonts` 字体行 > 0 | 0 行≠无内容 | **100**(0 份为 0 行) | | 页数可读 | — | **100** | | `pdftotext -bbox` 整册缓存 | 一次调用取全册逐字坐标 | 100 份 / **零字节产出 0** / 1–200 字节 0 / 42,781,781 字节 | ### ⚠ 取样途中撞到的一个静默故障(本轮新发现) 第一次跑定位器,`PARSE_FAIL = 18`。**若不核对件数,报表上会表现为「这三类几乎没东西」**—— 正是 PITFALLS 23「零命中最常见的成因是工具故障」的形态。 定位:`pdftotext -bbox` 会把文本层里的**原始控制字符**(BEL `\x07`、FF `\x0c`) 直接写进 XML,产出**非良构 XML**,`ElementTree` 直接 `ParseError`。 第一次的修法(把控制字符换成 `` 数字实体)**也失败**: XML 1.0 连 `` 这类数字实体都禁止,报 `reference to invalid character number`。 最终修法:映射到 Unicode 控制图形区 **U+2400+c**(合法 XML、1:1 可逆、仍然肉眼可见)。 | | 修前 | 修后 | |---|---:|---:| | `PARSE_FAIL` | **18** | **0** | | `COPYRIGHT_SYM` 命中 | 163 | **223** | | `CONFIDENTIAL` 命中 | 11 | **67** | | `PROPRIETARY` 命中 | 7 | **9** | | `UNAUTHORISED` 命中 | 20 | **23** | **18% 的池子被静默丢掉,且丢掉的全是带控制字符的件。** 前序报告 §3 记录的「控制字符是文件级系统性问题」在这里有了新的后果: **它不只是文本层的噪声,它会让基于 bbox 的定位器整件漏扫。** ### fontcheck 闸门本身的验证(不能只报「跑过了」) **在已知件上验证闸门**(否则「101/101 全过」与「闸门恒真」不可区分): | 测项 | 期望 | 实测 | 结论 | |---|---|---|---| | 已知阳性 易至266(`CID`+`Identity-H`,PITFALLS 78 记录的真豆腐块件) | exit **2** | **2**,列出 26 行 `MicrosoftYaHei CID TrueType Identity-H no` | ✅ 闸门能拒 | | 已知阴性 广发781 | exit **0** | **0**(170 字体行 / 1 未嵌入) | ✅ 不误拒 | | 用法错误 | exit **4** | **4** | ✅ | | `--page` 渲染探针 广发 p4 | 非零字节 | `RENDER_OK 1,982,937 bytes` | ✅ 报产出量 | **全池 101 份(100 池 + 广发)实跑,退出码分布 `{0: 101}`,非 0 件 0。** 即:本轮 48 组 600dpi 取证的机器字体条件是干净的,且闸门**已被证明会拒**。 --- ## 2-bis. 灌测结果(PITFALLS 96:召回与精确率**分开报**) ### 灌测 ① 召回 —— 已知阳性:广发781 每页页脚 真值(600dpi,承 PITFALLS 88): > 「本手册所示的字体和图片仅作手册说明用途**必须获得正式的版权后方可使用**」 | 项 | 实测 | |---|---| | 广发总页数 | 61 | | 真页脚法务小字所在页 | **59 页** | | 定位器召回命中 | **59 / 59 = 100%**(例 p2–p9…) | | 命中检索式 | `CN_SHUOMINGYONGSHI`(`仅作[^,。]{0,6}用途`) | | ★补字陷阱「,在使用之前须」在定位器输出中出现 | **0 次** | **「须字陷阱」的对照实验(任务书点名要测的那一条):** | 判据 | 在广发全册上的假阳性 | |---|---:| | 「含『须』字且是小字」 | **28 行** | | 本定位器(`仅作…用途`) | **0** | **28 这个数就是任务书说的那个坑的代价**: 广发文本层本身是**对的**(无「,在使用之前须」,与 600dpi 一致), 但它的小字里另有 28 行含「须」——**一旦拿「须」当法务小字的判据,这 28 行全部变成假阳性**。 本定位器全程**未使用任何限定语字**作判据。 **另记一条正面证据**:该页脚含 `必须`(限定语),且文本层与 600dpi 逐字一致。 这是本项目少见的「限定语密集样本上文本层没错」的直接观察(但 **n=1,见 §5**)。 ### 灌测 ② 精确率 —— 已知阴性:纯正文页 阴性页的取法(**程序判定,不是我看出来的**,故另行抽验):`10≤行数≤40`、 全部行 `y%∈[12,88]`、过半的行是 ≥18 有效字符的散文行 → 61 页 / 15 份件,取跨件 15 页。 | 项 | 实测 | |---|---| | 阴性页数 | 15 | | 定位器标记数 | **法务小字 0 / 稿件标注 0** | > ⚠ **这一栏必须写成「分母为 0 的无机会检验」,不能写成「精确率 100%」。** > 15 页纯正文页上定位器**一次都没开火** ⇒ 这道检验**没有产生任何可判定的样本**。 > 「零误报」与「零漏报」在报表上长得一样(PITFALLS 96 原话)。 > 它唯一证明的是:**纯正文页不会污染分母**——这有用,但不是精确率。 > > **因此本轮的有效精确率检验改由 §4 的 48 组 600dpi 目视承担**(那里每一次开火都被逐条判过真假)。 --- > 下面 §1–§6 的正式正文接在文末(骨架里的「(待填)」占位行以上为准,以下为准)。 # 正式 §1 · 取到了没有:三类各多少组 **结论:三类都取到了,且都超过 8 组门槛。合计 38 组(法务小字 9 / 页眉 14 / 稿件标注 15)。** | 元素类 | 有效组数 | 门槛 | 跨件数 | 取到的组 | |---|---:|---:|---:|---| | 法务小字 | **9** | ≥8 ✅ | 6 | GUNTEST_GF、L01、L02、L03、L04、L07、L12、A06、A13 | | 页眉 | **14** | ≥8 ✅ | 14 | B01、B02、B04、B05、B06、B07、B08、B09、B10、B11、B12、B13、B14、B15 | | 稿件标注 | **15** | ≥8 ✅ | 15 | C01、C02、C04…C16(除 C03) | | **合计** | **38** | ≥24 ✅ | — | — | > `GUNTEST_GF` = 广发781 的灌测阳性件**同时**作为法务小字样本计入(本人 600dpi 已目视)。 ## §1.1 每类的检索式与命中数(分母从哪来,可追) **法务小字**(`restrict.py`,先形态后语义,详见 §6 洞 1) | 阶段 | 判据 | 命中处数 | 跨件 | |---|---|---:|---:| | 原始形态 | `CN_BUDE` 不得/不可/未经/仅作 | 134 | — | | | `EN_CONF` confidential / proprietary | 68 | — | | | `EN_PENALTY` subject to penalty | 1 | — | | | `EN_UNAUTH` unauthorized | 47 | — | | 收窄 | 保留**限制性陈述**、剔除出版者/版权**身份**行 | **250 处** | **34 件** | | 位置收窄 | `y% ≥ 60` | 107 处 | 16 件 | | | **`y% ≥ 70`(采用)** | **99 处** | **14 件** | | | `y% ≥ 75` | 89 处 | 13 件 | | | `y% ≥ 80` | 84 处 | 11 件 | **页眉**(`filterstep.py` B 路) | 阶段 | 判据 | 命中 | |---|---|---:| | 几何 | `y% ≤ 12 且 h% ≤ 2.8` | 3717 | | 复现 | 归一化文本在 **≥4 个不同页**复现 | 164 个文本簇 | | 候选 | 上述两者取交集 | 1758 | | 跨件抽样 | 每类取 16 组、每组 16 份不同件 | 16 | | **目视后有效** | 剔除章节扉页大标题 | **14** | **稿件标注**(`filterstep.py` C 路) | 阶段 | 判据 | 命中 | |---|---|---:| | 几何 + 词形 | `h% ≤ 2.8 且 y% ≥ 40`、短行、含数字、`× / mm / cm / px / px* / MM / DPI / in / Bleed / Safe Area / 尺寸 / 分辨率` 等 | **581** | | 跨件抽样 | 每类取 16 组 | 16 | | **目视后有效** | 剔除中文大章节标题 | **15** | ## §1.2 取到之后又剔掉的(边界样本,全部有 600dpi 证据) 剔除不是「凑数不够就降标准」,而是这三类的**字面定义会把正文吃进来**。逐条记录以便复查: | 编号 | 件 / 页 | 目视所见 | 剔除理由 | |---|---|---|---| | A05 | casebrandbookHP p62 | `< > ≤ , . ? œ ∑ ® † ¥ ø π å ß ∂ ƒ © ˙ ∆ ˚` | 字形样张行,`©` 只是样张成员 | | A11 | bentley p28 | 深绿底反白双栏「…the whistleblower…termination of misconduct.」 | 内部准则正文右栏 | | A14 | Freepik p68 | 「…in the proprietary and clear manner / 72pt/72pt.」 | 正文排版说明,`PROPRIETARY` 误命中 | | A16 | GT p30 | 「It's used when two lines are running next to…」 | 术语/正文说明 | | B03 | ESA p122 | 「7 APPLICATIONS」绿章 + 「7.1 INTRODUCTION」 | 章节扉页,非跑动页眉 | | B16 | 拜耳 p13 | 「3. How to express our brands」 | 大字章节标题 | | C03 | 钉钉 p54 | 「图形标志的安全空间与最小使用规范」 | 中文大章节标题 | | L05 | bentley p16 | 「or indirectly woul[d]… to prosecution.」 | 准则正文右栏尾句 | | L06 | twitter p16 | 「…take appropriate action against any unauthorized…」 | 法律页正文条款(三栏版式) | | L08 | HK p30 | 「剪裁甲 在充足的直向空間中,以此彩練圖案…」 | 剪裁方式图注 | | L09 | MAG p21 | 「marketing messages are prohibited in presentations.」 | PPT 模板条目正文 | | L10 | ADBOE p1 | 「Adobe Confidential」 | 封面保密标记,**无限制性陈述** | | L11 | ADBOE p56 | 「54 Adobe Corporate Brand Guidelines \| Adobe Confidential \| 25 October 2010」 | 页脚(非页眉、非法务小字) | ## §1.3 ⚠ 分母必须说清:A 类的 16 组不是「16 组法务小字」 `filterstep.py` 的 A 路是**「小字(h%≤2.8 且有效长度≥6)+ 形态标记」**,命中 269 处。 A01/A02/A03/A04/A07/A08/A09/A10/A12/A15 这 10 组目视后是: > `© Diebold, Incorporated 2004` / `© 2024 COMSOL` / `© 2023 Egnyte Inc \| All Rights Reserved` / > `©2008 NYSDED. ALL RIGHTS RESERVED.` / `ESA Communications Production \| Copyright 2008 © European Space Agency` / > `© University of Ontario Institute of Technology 2019…` / `©2021 A10 Networks, Inc. All rights reserved.` / > `All rights reserved © Opera Norway AS 2023` / `Adobe Confidential`(页脚)/ Pantone 技术注 **它们是出版者版权身份行,前序 `REPORT-TEXTFID.md` 已把同一类计入「版权栏」格(n=7)。** 其中 A09 的字符串与前序 f07E2 的版权栏**逐字相同**(`© University of Ontario Institute of Technology 2019…`)—— **同一份字符串会同时落进「版权栏」和「法务小字」两格。** 结论:**A 路命中里只有 A06、A13 是法务小字,其余 14 组都不属于本轮三类任一类。** 这正是 §2 精确率的账目来源,也是 §5「格子无法互斥填充」的实测依据。 --- # 正式 §2 · 灌测结果(召回 / 精确率,分开报) 完整数据见上文 §2-bis。此处只给**收口后的两个数**与其分母。 ## §2.1 灌测 ① 召回(已知阳性)—— 有效,可引用 | 项 | 值 | |---|---| | 阳性件 | 广发781,61 页 | | 真值页(600dpi 目视) | 59 页 | | 定位器命中 | **59 / 59 = 100%** | | 命中检索式 | `CN_SHUOMINGYONGSHI` = `仅作[^,。]{0,6}用途` | | ★任务点名的补字陷阱「,在使用之前须」出现次数 | **0** | | ★对照:「含『须』字且小字」判据在同件的假阳性 | **28 行** | 结论:**召回侧通过**。这是本轮唯一一个「有真值分母」的灌测。 ## §2.2 灌测 ② 精确率(已知阴性)—— **无有效分母,只能记为通过一半** | 项 | 值 | |---|---| | 阴性页(程序判定纯正文页,跨 15 件) | 15 页 | | 定位器在阴性页上的开火数 | 法务小字 0 / 稿件标注 0(页眉路不适用:阴性页 `y%≥12`) | | 可判定样本数 | **0** | **15 页里一次没开火 ⇒ 这道检验没有产生任何可判定的样本。** 把它写成「精确率 100%」就是 PITFALLS 96 说的「零误报与零漏报在报表上长得一样」。 它证明的只有一件事:**纯正文页不会污染分母**。 ## §2.3 有效精确率改由目视承担(60 个候选的完整账目) 分母 = 定位器/过滤器开火并被送去渲染的全部候选 = **60 组** (A16 + B16 + C16 + L12;`GUNTEST_GF` 是灌测件,不计入候选账)。 | 判定 | 组数 | 说明 | |---|---:|---| | **三类命中**(目视确认为法务小字 / 页眉 / 稿件标注) | **37** | 法务 8(A06,A13,L1,L2,L3,L4,L7,L12)+ 页眉 14(B01…B15 去 B03,B16)+ 标注 15(C01…C16 去 C03) | | 非三类(误报) | **23** | A 路 14、B 路 2、C 路 1、L 路 6 | | **合计** | **60** | | **有效精确率 = 37 / 60 = 61.7%** 误报的 23 组只有两个来源,且都不是随机的: | 误报来源 | 组数 | 典型 | |---|---:|---| | **章节扉页 / 大字标题**(几何过滤 `h%`/`y%` 挡不住「很大的字在页顶」) | 4 | B03 ESA `7 APPLICATIONS`、B16 拜耳 `3. How to express…`、C03 钉钉大标题、L09 MAG 条目正文 | | **`©` 身份行 ≠ 限制性陈述** | 13 | A 路 13 组(见 §1.3) | | 其余(正文/图注/术语说明/页脚/封面标记) | 6 | A11、A14、A16、L05、L06、L08、L10、L11 | > 这 61.7% **不是「文本层保真度」指标**,它是「自动选点器」指标。 > 两者混在一起会得出一个完全错误的结论:好像这个语料库只有 62% 的小字是准的。 > 实际上:37 个真命中里**零差异 37 个**(§3)。**选点器不准,保真度很好。** --- # 正式 §3 · 三类各自的零差异率 ## §3.1 主表(差异分类固定 7 值) 判据:600dpi 目视逐字 vs 该页文本层(`-bbox` 与 plain 双源)。 | 元素类 | 有效 n | 零差异 | 零差异率 | 漏字 | 补字 | 换序 | 断行归一化后可对齐 | 不可比 | 未发现 | |---|---:|---:|---:|---:|---:|---:|---:|---:|---:| | **法务小字** | **9** | **9** | **100%** | 0 | 0 | 0 | 0 | 0 | 0 | | **页眉** | **14** | **14** | **100%** | 0 | 0 | 0 | 0 | 0 | 0 | | **稿件标注** | **15** | **15** | **100%** | 0 | 0 | 0 | 0 | 0 | 0 | | **合计** | **38** | **38** | **100%** | 0 | 0 | 0 | 0 | 0 | 0 | 三类 n 均 ≥5,**比率可引用**(无「样本不足」格)。 > 口径说明:分母是**目视判定为该类真目标**的组数(38),不是过滤器开火数(60)。 > 用 60 做分母会得到 38/60 = 63.3%,那个数衡量的是选点器不是文本层(§2.3)。 ## §3.2 法务小字 9 组逐组 | # | 件 / 页 | 600dpi 逐字读到的内容 | 差异 | 注记 | |---|---|---|---|---| | 1 | 广发781 p59(代表) | 「本手册所示的字体和图片仅作手册说明用途**必须**获得正式的版权后方可使用」+英文行 `FONTS AND PHOTOS … COPYRIGHTS MUST BE OBTAINED BEFORE COMMERCIAL USE.` | 零差异 | 无「,在使用之前须」;限定语 `必须` 在位 | | 2 | alberta p125 | 「…Unauthorized use is subject to penalty.」 | 零差异 | 真法务小字 | | 3 | 钉钉 p54 | 「…设计的标志仅作说明用途,在印刷时不可通过扫…」 | 零差异 | **限定语密集**:`仅`、`不可` | | 4 | alberta p4 | `The Alberta Government may seek damages resulting from the unauthorized reproduction or publication of the Alberta signature.`(3 行) | 零差异 | 页下段法律后果陈述,非 running footer | | 5 | HRHotel p23 | `HRHBG10.05 \| For internal use only. Reproduction without written permission is prohibited.` | 零差异 | 页底 running footer | | 6 | EveryMatrix p35 | `This message is for the designated recipient only … Any other use of the email by you is prohibited. Also, …`(4 行浅灰) | 零差异 | 邮件签名免责 | | 7 | Budweiser p1 | `© 2021 Anheuser-Busch InBev` / `All Rights Reserved` / `Confidential and Proprietary Information of Anheuser-Busch InBev.` | 零差异 | 封面红底反白;跨 6 段裁切才读全 | | 8 | 钉钉 p24 | `注:「Slogan」与「标志+Slogan组合」,因互斥关系,不可同时在画面中展示。` | 零差异 | **注记型**,非版权声明;全角「:」右半留白是字形度量,**不计字形失真** | | 9 | HRHotel p1 | 同 #5 字符串 | 零差异 | **同件同字符串封面复现**;证据强度弱于 #5,单列不合并 | ## §3.3 页眉 14 组逐组 | # | 件 / 页 | 600dpi 读到的页眉 | 差异 | |---|---|---|---| | B01 | OntarioTech p3 | `Ontario Tech University` | 零差异 | | B02 | Freepik p2 | `Freepik brand guidelines` | 零差异 | | B04 | Dubai | `DUBAI BRAND GUIDELINES 2023`(蓝底大字带) | 零差异 | | B05 | Pluralsight p3 | `T \| BRAND GUIDELINES` | 零差异 | | B06 | MHRUK | `MHRUK brand toolkit`(深蓝底) | 零差异 | | B07 | WeChat p58 | `CHAPTER 03 SUB-BRAND SPECIFICATIONS` | 零差异 | | B08 | SoM p2 | `Brand identity & style guide` | 零差异 | | B09 | Harrods p2 | `Brand identity guidelines \| Help The Harrods brand \| Introduction How to use t…`(四栏带) | 零差异 ※四栏由 bbox 合并,页面四栏位置正确 | | B10 | Tripadvisor p2 | `Tripadvisor 2` | 零差异 | | B11 | FS p2 | `BRAND IDENTITY GUIDELINES 02.00 CORE ELEMENTS` | 零差异 | | B12 | EveryMatrix p4 | `EveryMatrix Brand Guidelines` | 零差异 | | B13 | 3m p64 | `Color Appendix 3M Visual Identity Guide…` | 零差异 | | B14 | Branding p43 | `5.0 \| USAGE EXAMPLES`(深蓝条) | 零差异 | | B15 | Budweiser p165 | `Budweiser \| Brand Identity \| Applications \| Pas[sion Point] \| Sno…` | 零差异 | ## §3.4 稿件标注 15 组逐组 | # | 件 / 页 | 600dpi 读到的标注 | 差异 | 注记 | |---|---|---|---|---| | C01 | ESA p136 | `7 Footer 750 x 16 #000000` / `© Notice: Verdana Regular 10 pixel #FFFFFF` | 零差异 | **`©` 使同一字符串同时被法务小字命中**(三类重叠,见 §5.2) | | C02 | alberta p21 | `Photo748.jpg Photo1444.jpg Photo660.jpg Photo1708.jpg Photo1516.jpg Photo569.jpg Photo1788.jpg Photo1612.jpg` | 零差异 | 资源文件名标注 | | C04 | Diebold p25 | 尺寸线 `1.905cm` ×2 + `Subject:` + `Page 24` | 零差异 | | | C05 | Harrods p47 | `Main contents 210 x 305 x 115 \| 280 x 420 x 100 \| 500 x 370 x 120 \| 600 x 444 x 144` | 零差异 | 分隔符是 **ASCII `x` U+0078** | | C06 | 红牛 p11 | `display: block;` + `Form C` `4px` `Form D` | 零差异 | CSS 实现标注 | | C07 | WeChat p46 | `32 px* 32 px`(深底白字) | 零差异 | `*` 是 U+002A | | C08 | 韩束 p32 | `29MM`(带尺寸线) | 零差异 | 全大写 `MM` | | C09 | HK p16 | 两处 `0.5X`(青色括号方框) | 零差异 | 大写 `X` U+0058 | | C10 | 3m p33 | `Letter portrait, up to 11x11 in / Extended 3x3 grid`+`728x90 px banner / Extended 3x3 grid` | 零差异 | ★见 §3.5 字形变体 | | C11 | klarna p45 | `Typeface: Klarha / To be used in size 200-40 px` | 零差异 | | | C12 | hwdsb p15 | `1085 X 635 PIXELS` / `1050 X 600 PIXELS` / `ALL TEXT WITHIN THE SAFE MARGIN.` | 零差异 | 大写 `X` | | C13 | Freepik p48 | `Minimum print size 0.5 x 0.5cm` / `Minimum web size x 20 pixels` | 零差异 | ★见 §3.5 | | C14 | dbwm p15 | `Half-page Ad (500x600px) 44px` / `Leaderboard (980x260px) 50px` / `Desktop Example (1024px plus) ** 50px` | 零差异 | 含 `**` 星号 | | C15 | ADBOE p13 | `Tabloid-size poster` / `8.5x11” flyer` / `Table-top signs` | 零差异 | `”` = **U+201D**(不是 U+2033) | | C16 | Networks p13 | `0.5 inches wide @ 300 DPI` / `50 pixels wide @ 72 DPI` | 零差异 | 同一物理行前半是正文,切分边界不干净,**内容仍零差异** | ## §3.5 ★必须写出来的一条:`x` 与 `×` 的字形陷阱 C05 / C10 / C13 / C15 的分隔符在 600dpi 上**目视是「×」**(尤其 30pt 以上时,Helvetica 的 ASCII `x` 与 `×` 几乎同形)。若不查码位就目视判读,会把这 4 组误报成「字符替换」。 程序化核对(按页取该 y 带内全部 bbox word 后逐字打印码位): | 组 | 文本层码位 | 目视 | 判定 | |---|---|---|---| | C05 | `210 x 305 x 115` 全为 **U+0078** | × | **零差异** | | C10 | `Extended 3x3 grid` 全为 **U+0078** | × | **零差异** | | C13 | `0.5x0.5cm` / `20x20pixels` 全为 **U+0078** | × | **零差异** | | C15 | `8.5x11”` 中 `x`=**U+0078**、`”`=**U+201D** | x ″ | **零差异** | | C09 / C12 | `0.5X` / `1085X635` 中 `X`=**U+0058** | X | **零差异** | **全语料 100 件中,本轮接触到的尺寸分隔符没有任何一处是 U+00D7(真 `×`)。** ## §3.6 反向检索:宣布「漏字 0 / 换序 0」之前必须做 方法(`backfill.py` / `chunkify.py` / `order3.py`,均为写文件 + `if __name__ == "__main__":`): 1. 把 **60 组**每组的 bbox 行串回灌到该页 `pdftotext` plain(去空白后子串匹配); 2. 整串命中 **38**、未命中 **22**; 3. 对 22 处做**贪心最长块切分**(每块 = plain 中能出现的最长连续串),再对每块做**存在性**与**严格递增匹配**判定(`find-from-prev` 贪心最靠前 = 最优解)。 | 判定 | 组数 | 归因 | |---|---:|---| | 全部块存在 **且** 可按严格递增顺序定位 → **无漏字、无换序**,未整串命中只因 bbox 行归组跨栏/跨框/跨表格接缝 | **21** | 工具产物 | | 块全部存在但顺序不一致 | **1**(C01 ESA p136) | 表格跨列的**提取顺序**差异,见下 | | 存在 plain 中找不到的块(= 漏字候选) | **0** | — | **C01 的裁决**:bbox 按 x 物理顺序把表格第 7 行四格拼成 `7 Footer 750x16 #000000 ©Notice:Verdana…`;plain 按表格阅读顺序输出为 `7 Footer` → `© Notice…` → `750 x 16` → `#000000`。600dpi 目视确认**四格内容与位置均正确**。 ⇒ 记为**提取顺序差异(工具产物)**,不是文本层内容换序;**该组仍判零差异**(页面与文本层一致)。 > **所以「漏字 0」是有反向检索支撑的,不是「没看见」。** --- # 正式 §4 · 限定语补字清单 ## §4.1 三类补字的登记(三类分母 38 组) | 补字子类 | 有效分母 | 计数 | 写法 | |---|---:|---:|---| | **限定语补字**(须/应当/必须/经/后/前) | **2 组**(37 个有效样本组中命中 0 组 + 广发 1 组) | 0 | **未发现**(不是「零」) | | **普通字补字** | 38 | 0 | **未发现**(分母 38,n≥5,但按纪律仍写「未发现」) | | **空白/控制类补字** | 38 | 0 | **未发现** | > 「限定语补字」只给 **2 组**的分母(广发 + 任何含 6 词之一的样本), > **远不足以支撑写「零」**,故按纪律写「未发现」。 ## §4.2 为什么分母只有 2:任务书给的 6 个限定语在本语料里几乎没有判别力 对 37 个有效样本组做限定语扫描(`modal.py`): | 限定语 | 命中组数 | 说明 | |---|---:|---| | 须 / 应当 / 必须 / 经 / 后 / 前 | **0** | 六词在 37 组文本层里**一个都没有** | | 实际出现的中文限制词 | **2 组** | A13(`仅作`、`不可`)、L7(`不可`) | | 实际出现的英文限制词 | 8 组 | A06 `unauthorized`、L1 `unauthorized`、L2/L12 `only`、L3 `prohibited`、L4 `confidential`、C13 `only` | 对已知阳性件广发781(去标签文本 73,227 字)做同词频次: | 词 | 出现次数 | 判别力 | |---|---:|---| | 须 | 160 | **其中 151 次是「必须」的子串**,独立「须」仅 9 次 | | 必须 | 151 | 绝大多数在**正文**,不在法务小字 | | 后 | 126 | 「之后/前后」等常用字,**无判别力** | | 经 | 35 | 「已经/经过」 | | 前 | 14 | 常用字 | | 应当 | 0 | — | | — 对照 — | | | | 仅 | 130 | 「仅作说明用途」= 法务小字的真实特征 | | 仅作 | 119 | **这才是本语料的有效判别词** | | 不可 | 57 | | **结论**:6 词清单里的 `后/前/经/须` 在中文 VI 语料中是**高频常用字**, `应当` 则完全不存在;而真正区分法务小字的是 `仅作 / 不可 / 不得 / prohibited / unauthorized`。 **这与 PITFALLS 88 要求「定位器不得以『含须字』作法务小字判据」完全一致**: 广发全册用「含须且小字」当判据会产生 **28 行假阳性**,本轮实测须字 160 次里 151 次是「必须」。 ## §4.3 类外观察:ADBOE p56 的「不可见文本层」(不计入三类) **发现**:ADBOE corporate_brand_guidelines.pdf **第 56 页**的文本层含一整行 ROT+1 密文: ``` t %FTJHO DPNQFMMJOH DPOUFOUOP TQFDJBM[FE QSPHSBNNJOH TLJMMT SFRVJSFE ``` 逐字符 −1 解码 = `s COMPELLING CONTENT NO SPECIALIZED PROGRAMMING SKILLS REQUIRED` (字形索引与 Unicode 码位整体错位 1,即字体子集 ToUnicode 缺陷)。 **600dpi 核验**:按 bbox 坐标(x 153.0–321.2pt,y 601.0–608.6pt)裁切, **底部 100px 带灰度 min = 255、非白像素 = 0** —— 页面上**没有可见字形**。 (并按 PITFALLS 90 换算:`y=601pt` → `601×600/72 = 5008px`,落在页高 5100px 内,坐标换算无误。) 分类:这既不是 `补字`(页面没有可比对的字),也不是七值里的任何一项, 而是**「文本层有、页面无」的不可见文本**。本轮不新增分类轴(任务约束), **如实登记为类外发现,不计入 38 组分母**。它是本轮唯一一个「文本层 ≠ 页面」的实例。 --- # 正式 §5 · 86.7% 能不能扩展到这三类 ## §5.1 直接回答 **能扩展。** 三格从「未发现」变为有分母,且实测零差异率 **38/38 = 100%**,高于既有 86.7%。 但**不能把 86.7% 这个数改写掉**,只能并列或合并: | 口径 | 分母 | 零差异 | 比率 | 可引用 | |---|---:|---:|---:|---| | 前序 `REPORT-TEXTFID.md`(页脚24+色卡19+版权栏7+章节标题9+版本栏1) | 60 | 52 | **86.7%** | ✅ | | 本轮三类(法务小字9+页眉14+稿件标注15) | 38 | 38 | **100%** | ✅(三类 n 均 ≥5) | | **合并池** | **98** | **90** | **91.8%** | ⚠ 见 §5.3 的四条限制 | **三类每格 n 都 ≥5,没有「样本不足,不引用」的格子。** ## §5.2 ⚠ 格子不互斥 —— 这是实测结果,不是推断 三格与前序已填格、与彼此之间都存在同一份字符串被两格命中的情况: | 重叠 | 具体证据 | 后果 | |---|---|---| | **法务小字 ∩ 版权栏** | A09 OntarioTech p78 的 `© University of Ontario Institute of Technology 2019. ONTARIO TECH UNIVERSITY / … Design are trademarks of … D5050. June` **与前序 f07E2 的版权栏逐字相同** | 同一字符串可同时计入两格 | | **法务小字 ∩ 版权栏** | L4 Budweiser p1 的 `© 2021 Anheuser-Busch InBev / All Rights Reserved` | 同上 | | **法务小字 ∩ 稿件标注** | C01 ESA p136 的 `© Notice: Verdana Regular 10 pixel #FFFFFF` —— `©` 使它**同时**被限制性陈述检索与尺寸规格检索命中 | 同一字符串可同时计入两格 | | **页眉 ∩ 章节标题** | B03 ESA `7 APPLICATIONS` 同时满足两者;正因两格重叠它才被目视剔除 | 剔除规则依赖「目视」而非定义 | | **页眉/法务小字 ∩ 页脚** | L11 ADBOE p56 `54 Adobe Corporate Brand Guidelines \| Adobe Confidential \| 25 October 2010` 是**页脚**,而前序已有独立的「页脚」格(n=24) | 本轮三格不含页脚,但检索式会命中页脚 | | **稿件标注 ∩ 色卡标注** | C05 Harrods p47 的 `Main contents 210x305x115…` 是颜色/尺寸表,既像色卡标注也像尺寸标注 | 与前序「色卡标注」格边界模糊 | **结论:三格不是互斥分区,是三组带重叠的检索靶。** 把它们直接加到 98 的分母里,等于**允许同一份证据被数两次**。 按任务约束「不扩展分类轴」,本轮**不引入新轴去解决它**,只如实登记。 ## §5.3 合并成 91.8% 的四条限制(必须随数一起引用) 1. **抽样口径不同**。前序 60 组来自 30 份件的既定抽样;本轮 38 组来自 **100 件池的定向检索** (`y%≤12 & h%≤2.8`、`h%≤2.8 & 含数字`、限制性陈述等)。前序自己写过: *「零差异率对『怎么挑候选』是敏感的,跨文件比较必须先统一选点口径」*。合并池恰恰没有统一。 2. **格子重叠**(§5.2):分母 98 里存在潜在重复计数。 3. **100% 有结构性成分**。三类里有一批「文本层内容本身就只是这段装饰里的字」的样本: 深底反白整幅色带页眉(B04 Dubai 蓝带、B06 MHRUK 深蓝带、B13、B14、B15)、 图片资源文件名(C02)、CSS 代码(C06)、尺寸表(C05、C14)。这类文本层没有「排版推断」余地,保真度天然接近 100%。 4. **本轮不含页脚、版权栏、色卡标注**,前序 60 组的三类大格仍然只在旧口径下成立; 特别是**页脚 n=24 的 87.5%** 与本轮**法务小字里 4 组 running footer 的 100%** 指向同一类页面元素却给出不同数—— **这本身就说明合并池的 91.8% 不是同质的**。 ## §5.4 对 PITFALLS 97「前序 86.7% 的空洞」的处置 前序留下的洞是:**「本报告没有测过最该测的那一格,86.7% 不能外推到法务小字」**。 - 本轮已把该洞**填上**:法务小字从「未发现」变为 **n=9,零差异 9,100%**(含已知阳性件广发 59 页逐页召回 100%)。 - 同时给出**新的、方向相反的证据**:这个洞之所以存在,是因为**旧抽样根本没抽到法务小字**—— 换成「按形态标记定向检索 + 位置收窄」后,一次抽到 99 处/14 件。 ⇒ **「未发现」是取样失败,不是现象不存在。** 这条比 91.8% 本身更值得记。 --- # 正式 §6 · 本报告自己的洞(6 条) ## 洞 1:「未发现」是**取样失败**,不是现象不存在 —— 同一批文件,两种抽样差出 99 处 | 抽样 | 法务小字组数 | |---|---:| | 前序 30 份件的既定抽样 | **0 组**(记「未发现」) | | 本轮:先形态标记(不得/不可/仅作/prohibited/unauthorized)→ 收窄限制性陈述 → `y%≥70` | **99 处 / 14 件** | 同类页眉元素,旧抽样 0 组、新抽样 1758 候选。 ⇒ **「某格未发现」这个结论里,分不清「文件里没有」和「没抽到」。** 前序写「法务小字未发现」并据此说 86.7% 不能外推——那个推理在当时是对的, 但它的前提(该类在语料中稀少或不存在)**被本轮实测推翻**。 **任何以「未发现」为由拒绝外推的结论,都应先补一次定向检索再下。** ## 洞 2:形态标记会把「版权栏」拖进「法务小字」——`©` 单独用不了 - `©` 在 100 件池里命中 **223** 处;但目视后 **13 组是出版者版权身份行**(`© 2024 COMSOL`、 `©2008 NYSDED. ALL RIGHTS RESERVED.`、`©2021 A10 Networks, Inc.`…),另有 1 组是**字形样张行** (casebrandbookHP p62 的 `< > ≤ , . ? œ ∑ ® † ¥ ø π å ß ∂ ƒ © ˙ ∆ ˚`)。 - 换成**限制性陈述**(不得/不可/未经/仅作/prohibited/unauthorized/subject to penalty)并剔除出版者身份行后, 得到 250 处 / 34 件,目视真命中 8 组。 ⇒ **`©` 是「版权」的形式标志,不是「法务」的语义标志。** 分类必须落在**语义**上,形态标记只用来生成候选。 ## 洞 3:任务给定的 6 个限定语,在中文 VI 语料里**没有判别力** 广发781(73,227 字去标签文本)实测词频:`须` 160(**其中 151 是「必须」的子串**)、`后` 126、 `经` 35、`前` 14、`应当` **0**。而真正区分法务小字的是 `仅作` 119 / `仅` 130 / `不可` 57。 后果已实测:**用「含须字且小字」当法务小字判据,在广发全册产生 28 行假阳性**(PITFALLS 88 的要求得到验证)。 37 个有效样本组里,6 词命中 **0 组**;真正的中文限制词只出现在 A13、L7 两组。 ⇒ **限定语清单必须按语料实测重定,不能沿用通用法律文书词表。** ## 洞 4:解析故障会**静默**吃掉 18% 的池子,而且报表上长得像「没东西」 第一次跑定位器 `PARSE_FAIL = 18`。根因:poppler 把原始控制字符(BEL `\x07`、FF `\x0c`) 直接写进 `-bbox` XML → **非良构 XML** → 解析整件失败。 `` 数字实体也被 XML 1.0 禁止(`reference to invalid character number`); 最终映射到 U+2400+c 才合法(1:1 可逆、仍可见)。 修复前后:`PARSE_FAIL` **18 → 0**,`CONFIDENTIAL` 命中 **11 → 67**,`COPYRIGHT_SYM` **163 → 223**。 ⇒ **「某类几乎没命中」的第一嫌疑应该是工具炸了,不是语料里没有。** 这一条与洞 1 合起来才是完整教训:**负结果必须先证伪工具,再谈现象。** ## 洞 5:目视也会骗人 —— ASCII `x` 与 `×` 同形 C05 / C10 / C13 / C15 的尺寸分隔符在 600dpi 上**目视是「×」**,实际码位全是 **U+0078**(ASCII 小写 x) 或 **U+0058**(大写 X)。若只凭目视,会把这 4 组误报成「字符替换」,38 组里凭空多 4 个差异。 ⇒ **目视定「有差异」,码位定「差异是什么」。** 两者分工不能反。 (同族陷阱见 PITFALLS 26 的 `Ø`、§3.5 的 `x`。) ## 洞 6:★「同串复现 ≥4 页」这个判据,被我自己用的 bbox 行归组方式破坏了 页眉路用「归一化后同串在 ≥4 个不同页复现」作门槛。用**保留数字**的归一化重算(`recur2.py`): | 组 | 旧 recurs(去数字) | 新 recurs(保留数字) | Δ | |---|---:|---:|---:| | B08 SoM | 34 | **0** | −34 | | B09 Harrods | 29 | **0** | −29 | | B13 3m | 21 | **0** | −21 | | B15 Budweiser | 19 | **0** | −19 | | B14 Branding | 19 | **1** | −18 | | B10 Tripadvisor | 27 | **10** | −17 | | B12 EveryMatrix | 25 | **39** | +14 | | 其余 9 组 | — | ±0~+9 | — | **16 组里 6 组的「复现」是假的**(旧值 19–34 全部通过 ≥4 门槛,新值 0–10,其中 4 组为 **0**)。 原因:`bbox` 的「行」是**同一 y 带内所有文本块的拼接**。B08 的 `Brand identity & style guide` + `University of Bath School of Management` + 章节名被串成一条;B13/B15 同理串进了**页码**。 去掉数字后「页码不同的页」被判成同一串;保留数字后这些页**根本不相等**(新值 0)。 ⇒ **判据的对象必须是页面上真实的一个语义单元,不能是工具顺手切出来的行。** 更要紧的是:**这 6 组的复现数不可引用**(我在 §1.1 里列过 `B01=76…B16=18`, 按本条应视为**作废**;B 类 14 组的**归类**仍成立,因为依据是 600dpi 目视,不是复现数)。 **对上文 §1.1 页眉表的更正**:`复现` 一栏的 164 个文本簇与逐条 recurs 值, 其判定规则(去数字归一化 + bbox 行串)已被本条证伪,**请勿引用该栏数值**; 页眉 14 组这一分母本身站得住(每组都过了 600dpi 目视 + y%≤12 & h%≤2.8)。 --- # 附 · 渲染台账、产出清单与复算命令 ## A1. 渲染台账(每次渲染都报零字节产出数) | 台账 | 渲染条目 | **零字节产出** | 返回码 | 裁切图 | `render_bytes` 合计 | |---|---:|---:|---|---:|---:| | `render_ledger.json`(A16+B16+C16+GUNTEST_GF) | 49 | **0** | 全 0 | 103 | 71,102,281 | | `render_ledger2.json`(法务精修 L1–L12) | 12 | **0** | 全 0 | 26 | 12,929,284 | | ROT 探针(ADBOE p56 密文行,含 1 次重复全页渲染) | 1 | **0** | 0 | 2(+1 放大图) | 779,957 ×2 | | **合计** | **62** | **0** | 全 0 | **129** | **≈ 8.6×10⁷** | `/tmp/vi-textfid2/img/` 实际文件 **132** 个 = 129 裁切图 + 2 张 ROT 分段 + 1 张 ROT 放大图。 无裁切产出(segs 为空)的条目:**0**。 ## A2. 本轮产物(全部在 `/tmp`,仓库 `/Users/lisonghao/code/world-map` **未改动任何文件**) | 文件 | 内容 | |---|---| | `pool.py` / `pool.json` | 去重后 100 件池(md5、path、font_rows、pages) | | `bboxcache.py` / `bbox/*.xml` | 100 份 `-bbox` 整册缓存,42,781,781 字节,零字节 0 | | `locate.py` / `raw_hits.json` / `rawcount.json` / `pages_.json` | 检索式命中表(含控制字符 → U+2400+c 修复) | | `filterstep.py` / `cand_A|B|C.json` | 三路几何过滤器(A 269 / B 1758 / C 581) | | `pick2.py` / `pick.json` / `legal_pick.json` / `restrict.json` / `restrict_bot.json` | 抽样与法务精修集 | | `render.py` / `render2.py` / `render_ledger*.json` | 600dpi 裁切渲染 | | `plainsel.py` / `plain.json`、`lplain.py` / `lplain.json` | 文本层基准(目视对照用) | | `backfill.py` / `chunkify.py` / `order2.py` / `order3.py` / `misswhy.py` | 反向检索(漏字 / 换序)链 | | `modal.py` / `modals.json`、`recur2.py` / `recur2.json` | 限定语词频、页眉复现数复核 | | `rot_render.py` / `rot_render2.py` | ADBOE p56 不可见文本层的像素级核验 | 全部脚本均为写文件 + `if __name__ == "__main__":`;**未使用 `xargs -d`**。 ## A3. 复算命令 ```bash cd /tmp/vi-textfid2 python3 pool.py && python3 bboxcache.py && python3 locate.py python3 filterstep.py && python3 pick2.py python3 restrict.py # 法务小字精修集 python3 backfill.py && python3 chunkify.py && python3 order3.py # 反向检索 python3 modal.py && python3 recur2.py # §4/§6 的两个实测 ``` ## A4. 三句话结论 1. **三类都取到了**:法务小字 9 / 页眉 14 / 稿件标注 15,合计 **38 组**(门槛 8/8/8),三类 n 均 ≥5 可引用。 2. **零差异率 = 38/38 = 100%**;补字(限定语/普通字/空白控制类)**均写「未发现」**,漏字 0 有反向检索支撑,换序仅 1 例且经目视裁决为表格提取顺序差异。 3. **86.7% 可以扩展但不能替换**:合并池 52+38 / 60+38 = **91.8%**,但必须随四条限制一起引用; 真正的收获不是 91.8%,而是**前序那三个「未发现」是抽样失败,不是现象不存在**。