Files
mdpolish/research-wiki/reference/GOVDOC_SAAS_CLEANING_SCOPE.md
T
Bepr4 951fba150b 精简 GovDoc 审计范围:移除敏感信息章节与占位 .gitkeep
- 删除 GOVDOC_SAAS_CLEANING_SCOPE.md 的 4.11 S001(敏感信息)整节,
  及结论摘要中对应的第 7 条合规风险要点;
- reference/ 与 scratch/ 已有实际内容,移除占位 .gitkeep。
2026-08-21 17:47:34 +08:00

277 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 7 组对比测试文档 Markdown 清洗审计与实施规范
- 审计日期:2026-08-20
- 审计目录:`/home/lihaoze/gov_test_data/compare`
- 清洗对象:7 个测试用例中 `uploads/` 下的 45 份 Markdown
- 背景资料:`compare/readme.md` 与各用例 `README.md`
- 本次操作:只读审计;没有修改任何原始测试文档
## 1. 结论摘要
这批 Markdown 目前不适合直接作为“语义可靠”的清洗后基准。问题并不只是在空格、换行和标题层级,而是同时存在以下几类高风险污染:
1. **内容级污染**:至少 32/45 份文件命中了保守的模型幻觉特征词,合计 1,703 次;典型内容包括 `The quick brown fox...`、勾股定理说明、`The image contains...``The steps are:` 等与投标文件无关的文本。
2. **图像内容丢失**:45/45 份文件都有图片引用,共 8,471 个,但目录中没有任何图片资产;其中 4,012 个引用只是字面量 `data:image/...;base64...`,并不包含可解码数据。
3. **表格结构损坏**:41 份文件含原始 HTML 表格,共 7,550 个 `<table>`35/41 份存在 `<table>/<tr>/<td>` 数量不平衡。另有 4 份 007 用例文档使用 GFM 表格,其中 203 个表格块里至少 60 个行列数不一致。
4. **重复和超长噪声**:出现 261,838 字符的单行点线、数万字符的重复英语句子、LaTeX 箭头/颜色命令和重复汉字。001 两份文件的非空行重复比例分别达到 81.8% 和 84.1%。
5. **结构扁平化**:全库 29,358 个 Markdown 标题中有 28,736 个是一级标题,占 97.9%;至少 378 个标题缺少空格、只有 `#` 或存在其他明显语法问题。
6. **字符与格式污染**:有 10 个替换字符 ``、20 个私用区字符、11 个 NBSP、5 个零宽字符、1,474 个多余的 `\-` 转义,以及 151,616 行尾部双空格。
最重要的实施建议是:**不要只产出一份“清洗 Markdown”**。应同时产出:
- `clean_fidelity.md`:忠实版,保留有法律/业务意义的全部内容,所有修复必须能追溯到源文件。
- `clean_compare.md`:对比版,从忠实版派生,移除页眉页脚、失效目录页码、转换器噪声和确定的重复版式块,用于文档相似度计算。
- `audit.json`:记录每一次删除、替换、合并、回源重提取和人工确认。
这样可以避免为了提升对比效果而不可逆地破坏原文,也能避免把幻觉文本、通用图片占位符和重复页眉当成“相同内容”。
## 2. 审计范围与统计口径
### 2.1 纳入和排除
纳入:
- `compare/001-2/uploads/*.md`2 份
- `compare/002-21/uploads/*.md`21 份
- `compare/003-10/uploads/*.md`10 份
- `compare/004-2/uploads/*.md`2 份
- `compare/005-3/uploads/*.md`3 份
- `compare/006-3/uploads/*.md`3 份
- `compare/007-4/uploads/*.md`4 份
排除:
- 8 份 README:它们是测试说明,不是待清洗输入。
- `review.json``blocks_*.json``match_index.json``summary.json`:它们是旧输入产生的下游结果,只用于理解测试背景,不能作为清洗真值。
- `file_*_reviewed.docx`:本次未把它们当作 Markdown 清洗对象;后续可作为辅助核对材料,但是否能作为权威源需单独确认。
### 2.2 基础规模
45 份输入合计约 36.39 MiB、388,482 个物理行。所有文件都能按 UTF-8 读取,但“能解码”不代表内容无损,文件中仍有 `` 和私用区字符。
下表中的“幻觉特征”使用一组偏保守的固定模板进行计数,包括 `The quick brown fox...`、勾股定理模板、`The image contains...``The concept of a concept...``The steps are:` 等;因此它只是明确下限,不包含全部乱码和中文重复污染。
| 用例 | 文档数 | 大小 MiB | 行数 | HTML 表格 | GFM 表格行 | 图片引用 | 空 Base64 占位 | 幻觉特征 | 最大单行字符数 | 总体判断 |
|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|
| 001-2 | 2 | 6.41 | 48,450 | 2,596 | 0 | 109 | 0 | 0 | 4,482 | 高风险:表格未闭合、重复率极高、图片定位不可用 |
| 002-21 | 21 | 15.23 | 158,462 | 2,593 | 592 | 2,000 | 0 | 1,530 | 28,624 | 严重:模型幻觉和重复文本最集中 |
| 003-10 | 10 | 9.20 | 116,358 | 1,646 | 2 | 1,793 | 0 | 137 | 261,838 | 严重:存在灾难性长行、乱码、幻觉和 LaTeX 污染 |
| 004-2 | 2 | 0.41 | 5,726 | 109 | 0 | 36 | 0 | 7 | 8,001 | 高风险:OCR 语义错误、缺图、幻觉 |
| 005-3 | 3 | 2.67 | 31,537 | 476 | 0 | 359 | 0 | 7 | 11,599 | 高风险:重复、缺图、表格和少量幻觉 |
| 006-3 | 3 | 1.12 | 14,701 | 130 | 0 | 162 | 0 | 22 | 9,151 | 高风险:含 OCR 文档,仍有明显幻觉和缺图 |
| 007-4 | 4 | 1.35 | 13,248 | 0 | 2,792 | 4,012 | 4,012 | 0 | 5,916 | 严重:图片内容全部为无效占位,表格和 Word 目录损坏 |
## 3. 对下游“文件对比”功能的直接影响
这些污染会系统性扭曲相似度,不只是影响阅读体验:
- `The quick brown fox...` 等同一幻觉模板出现在多个本来无关的投标文件里,会制造跨文档假阳性匹配。
- 007 中 4,012 个完全相同的空图片占位符会被当成大量相同行。
- 001 中同一“综合单价分析表”说明被重复约 900 次;这与 README 中 001、003 的“近似匹配占 99% 以上”和超大 `review.json` 有明显关联。这里只能判断为高度可疑的影响因素,不能在没有重新跑对比的情况下断言它是唯一原因。
- 平铺成一级标题、把表格压成一行、把页眉页脚混入正文,会改变分块边界,并使段落/句子/近似三档匹配分布失真。
- 如果把不同手机号、身份证号、图片都统一替换成同一个 `[PHONE]``[ID]``[IMAGE]`,又会制造新的假相同内容。因此占位符必须保留“不同原值不同 token”的性质。
清洗后必须重新生成 `blocks_*.json``match_index.json``review.json``summary.json`。旧匹配数量不能作为清洗后的等值验收条件,应保留为“脏输入性能基线”,另建“干净输入语义基线”。`fileIndex` 和测试用例映射必须保持不变。
## 4. 问题清单与清洗要求
### 4.1 C001:固定模板型模型幻觉
优先级:P0,阻断语义版交付。
已确认的例子包括:
- `The quick brown fox jumps over the lazy dog.`:全库 1,071 次。
- `The equation $x^2 + y^2 = z^2$ represents a Pythagorean triple...`:全库 62 次。
- `The image contains a single character...`
- `The concept of a concept is fundamental in physics...`
- `- The steps are:`
- `Agree to be`
- `汽车法规和商业期刊的出版`
典型证据:
- `002-21/file_14` 第 1,164 行:一行内重复 `quick brown fox` 约 411 次。
- `002-21/file_3` 第 3,804 行:同类重复约 428 次。
- `002-21/file_5` 第 2,915 行:`The image contains...` 及数字说明被重复扩展。
- `002-21/file_8` 第 5,379 行:28,624 字符的英语概念重复行。
- `003-10/file_2` 开头即出现无关英文、勾股定理和中文乱码。
清洗要求:
1. 固定模板命中后先标记其所在段、表格单元格和推定页面,不应只删除匹配到的几个单词。
2. 有源 PDF 时,按页或按区域重新提取;没有源文件时,将该段放入 `quarantine`,不能把删除后的残缺上下文冒充完整正文。
3. 黑名单适合做拦截器,不适合做唯一清洗器。应再检测异常语言切换、低词汇多样性、同短语高频循环和超长单行。
4. 清洗结果中这些已知模板必须为 0;审计文件须记录被移除的原始范围和回源依据。
### 4.2 C002:超长重复串和退化输出
优先级:P0/P1,视能否回源而定。
典型问题:
- `003-10/file_2` 第 91 行长 261,838 字符,主体是目录点线重复。
- 同文件第 8,924 行长 19,089 字符,主体是重复的 LaTeX `\rightarrow`
- `002-21/file_15` 第 4,898 行长 11,267 字符,主体是重复 `\textcolor{red}{\blacksquare}`
- `003-10/file_7` 第 24,211 行含嵌套、重复的 `\textcolor{red}`
- 多处出现成千上万次的 `园``\cdots``...` 或错误短语,例如“建设工程执行”。
检测规则建议:
- 普通文本单行超过 2,000 字符告警,超过 10,000 字符阻断;结构化表格在解析后按单元格重新执行该规则。
- 同一字符连续 20 次以上、同一 2—20 字符片段连续 10 次以上告警。
- 单行压缩率异常高、唯一 token 比例过低、相邻重复 n-gram 比例过高时进入隔离。
- 目录点线只保留为结构化 TOC 信息,不保留数十万字符的视觉填充。
不允许简单按固定长度截断,因为长 HTML 表格可能包含真实内容。必须先判断是表格、目录点线、Base64、SVG 还是普通文本。
### 4.3 I001:图片引用全部失效
优先级:P0。
全库有 8,471 个图片引用,本地图片资产为 0:
- 0074,012 个 `![](data:image/jpeg;base64...)` 或 PNG 变体。这里的 `...` 是文本,不是被终端隐藏的真实数据,无法解码恢复。
- 001109 个目标形如 `page=9,bbox=[...]`,不是标准图片路径,也没有对应裁剪图。
- 其余:4,350 个 `images/<hash>.jpg` 等相对引用,但仓库中不存在相应文件。
- 7,073/8,471 个图片没有 alt 文本。
清洗要求:
1. 从原始 PDF/DOCX 回源导出图片,使用内容哈希命名,并生成 `assets/manifest.json`
2. 对印章、签名、证书、身份证件、扫描表格等“有语义图片”执行 OCR/版面识别,但仍要保留原图引用,不能只留推测文本。
3. 001 的 `page+bbox` 必须转换为结构化来源坐标,再从对应 PDF 裁剪;不能直接当 Markdown URL。
4. 如果确实采用纯文本模式,图片位置应写成唯一、可追踪的标记,例如 `[IMAGE_MISSING:007-4:file_1:0001]`,不能用所有文件共享的 `[IMAGE]`,否则会制造假匹配。
5. 生产级“完整清洗”验收要求 broken reference 为 0。无法回源的图片必须明确标为未解决,不能计作完整通过。
### 4.4 T001HTML 表格损坏和超长单行
优先级:P0/P1。
41 份文件中共有 7,550 个 HTML 表格。静态标签计数如下:
- `<table>` 7,550`</table>` 7,155。
- `<tr>` 101,760`</tr>` 101,019。
- `<td>` 657,263`</td>` 656,575。
- 35/41 份含 HTML 表格的文件至少有一类标签不平衡;7 份连 table 层级都不平衡。
001 最严重:
- `file_0``table=1315/1124`
- `file_1``table=1281/1080`
清洗要求:
1. 使用容错 HTML 解析器构建 DOM,记录解析器自动补齐了哪些标签;禁止用正则直接替换所有表格标签。
2. 对每个表格校验 `rowspan/colspan` 展开后的网格是否矩形、行列数是否与表头一致、单元格顺序是否可追溯。
3. 简单矩形表格可转为 GFM;包含合并单元格、斜线表头、嵌套结构的表格应保留规范化 HTML,或另存为结构化 JSON。强行转 GFM 会丢失语义。
4. 一行一个完整 HTML 表格应格式化为多行结构,避免长行拖垮分块器和 diff,但换行必须发生在 DOM 节点之间。
5. 类似 `004-2/file_0` 第 613 行中“国家、职位、导演、客户”等明显不符合资格审查表语境的表头,应回源确认,不能只修标签。
### 4.5 T002GFM 表格行列数不一致
优先级:P1。
007 四份文件共有 203 个连续 GFM 表格块、2,792 个表格行,至少 60 个表格块出现不同行拥有不同列数:
- `file_0`36 个块,21 个不一致。
- `file_1`55 个块,20 个不一致。
- `file_2`42 个块,7 个不一致。
- `file_3`:70 个块,12 个不一致,另有 2 个块缺分隔行。
此外,`002-21/file_7` 有一个 584 行的大型 GFM 表格,同时出现 3 列和 5 列;`002-21/file_3` 也有不一致的孤立表格块。
这通常是把 Word/PDF 合并单元格硬投影到 GFM 的结果。清洗器应先恢复二维网格;无法无损表达的表格应改用规范 HTML/JSON,而不是补若干空 `|` 来“通过语法检查”。
### 4.6 H001:标题层级扁平、标题断裂和错误标题
优先级:P1。
问题表现:
- 001—006 几乎把所有章节都输出为 `#`,没有文档层级。
- 存在 `#零星维修...``#(正本)` 等缺少空格的标题。
- 存在只有 `#` 的空标题。
- 同一个标题被版面换行切成多个连续一级标题,例如项目名称被拆成 2—3 行。
- 普通正文、图片识别结果和幻觉句子也被错误标成标题。
清洗要求:
1. 每个逻辑文档保留一个主标题 H1;主要章为 H2,节为 H3,依次递进,不跳级。
2. 使用编号模式(“第一章”“一、”“(一)”“1.”)、目录结构、相邻上下文和重复页眉信息共同推断层级。
3. 连续短标题行在确认属于同一版面标题后合并;不能只根据行长合并。
4. 修复 `#标题``# 标题`,删除空标题;被判为正文的行去掉标题标记。
5. 标题文本中的项目编号、公司名、年份不得因规范化而改变。
### 4.7 P001:段落、硬换行和词内断裂
优先级:P1。
151,616 行以两个空格结尾,主要来自 002—006 的转换器。这会把几乎每个物理行强制为 Markdown `<br>`,使原本同一段的文字被切碎。还存在:
- `物 业``项 目``服\n务项目` 等版面换行造成的词内空格或断行。
- 页码、目录页码和正文混在同一行。
- 句子被错误拼接成超长段,或每句话都被拆成独立段。
- 项目编号中的连字符被转义成 `440442\-2025\-00435`,同一标识在不同文件中形式不一致。
清洗要求:
1. 先识别标题、列表、表格、地址、编号、签名区,再做段落重组。
2. 普通段落内部把版面软换行合并为空或一个空格;中文字符之间通常直接合并,中英/数字边界按规则保留空格。
3. 列表项、诗行、地址、落款、表格单元格内的有意义换行不得统一删除。
4. `\-` 仅在确认是转换器多余转义时还原;项目编号和负号的字符本身必须保留。
5. Unicode 采用 NFC,不建议全局 NFKC;NFKC 可能改变罗马数字、圈号、单位和兼容字符的法律原貌。
### 4.8 D001:页眉、页脚、目录页码和文档边界
优先级:P1。
已检测到至少 1,166 个“独立页码样式候选”,但其中也会混入 `0/1000` 等评分或限制值,所以不能仅凭正则删除。明确例子包括 `1 / 390``368 / 390``4 / 6`
清洗要求:
- 只有在同一文本出现在多页相近顶部/底部位置,或页码形成合理序列时,才判定为页眉页脚。
- `clean_fidelity.md` 可通过元数据保留页码映射;`clean_compare.md` 删除纯版式页码和重复运行标题。
- 002 中 `file_16``file_19` 开头分别表现为符合性审查、综合文件、商务部分、技术部分,可能是同一投标人的分卷/分册。清洗器必须保存原始 `fileIndex` 和卷册边界,不能自行拼接。
- 目录文本可转换为结构化章节导航;目录点线和页码不应参与正文相似度。
### 4.9 D002:重复内容与模板内容
优先级:P1,但严禁盲删。
重复既可能是转换器错误,也可能是投标文件真实模板。典型统计:
- 001 两份文件非空行重复比例分别为 81.8% 和 84.1%。同一“综合单价分析表”及说明出现约 900 次。
- `002-21/file_3` 非空行重复比例 44.8%,含“装约买箱箱装”等乱码高频重复。
- `002-21/file_15``Agree to be` 重复 813 次。
- `002-21/file_5``- The steps are:` 重复 818 次。
- `002-21/file_20` 中目录式条目“施工等级 282”“工期保证措施 282”分别重复 165、164 次。
处理原则:
1. 明确的幻觉/转换器退化重复应回源替换或隔离。
2. 重复页眉、页脚、页码在对比版删除。
3. 合法合同条款、报价表说明和表头在忠实版保留。对比版可把同一文档内重复模板块标为同一 `template_block_id`,在相似度计算时降权,而不是直接删除。
4. 跨文档共同出现的合法招标模板本来就是对比目标的一部分,不应因“重复”而全部抹除。项目需要明确是检测抄袭、检测共同模板,还是两者分别评分。
### 4.10 L001Word/PDF 转换遗留语法
优先级:P1/P2。
包括:
- 007 `file_1` 有 171 个 `(#_Toc...)` Word 目录链接,但全库没有对应显式锚点。
- 001 有 2,594 个 `<div align="center">`,用 HTML 仅表达居中版式。
- 575 个行内数学片段中有不少重复的 `\textcolor``\rightarrow``\cdots` 和勾股定理幻觉。
- 20 个私用区字符主要是 U+F0B7、U+F070、U+F0D8,常见于 Wingdings/项目符号映射。
- 10 个 `` 出现在 7 份文件中,已经无法靠 Unicode 规范化恢复原字符。
处理要求:
- Word TOC 链接要么根据清洗后标题生成真实 slug,要么移除链接只保留目录文字;不得保留悬空锚点。
- 纯版式 `<div align>` 转成语义标题/段落;居中信息可进样式元数据。
- 私用区字符按原字体映射或源文件回查,不能一律删除。
- `` 必须逐处回源,无法回源时产生显式未解决项。
- LaTeX 只有在源文件确实包含公式/符号时保留;重复生成的视觉符号应由原图或文本含义替代。