实现 ClinDB 第一批清洗组件

This commit is contained in:
2026-08-23 20:56:36 +08:00
parent 6fcc7d5736
commit 80001a8ab9
28 changed files with 2538 additions and 67 deletions
@@ -11,8 +11,8 @@ ClinDB-ReviewBench 是师姐的论文清洗项目。`data/` 下当前 5 份 DOI
JAMA、EJHF、Statistics in Medicine/arXiv、Springer/arXiv、Disaster Med Public Health Preparedness
是它的首批输入,未来会继续扩充同源转换产物。
本仓库(mdpolish)为该项目的数据提供清洗能力ClinDB-ReviewBench 通过 profile
表达论文场景的规则组合,不把论文专属规则写进通用核心。
本仓库(mdpolish)为该项目的数据提供清洗能力。当前由仓库内 first-batch 实验脚本显式组合论文规则,
尚未建立 Profile 对象或配置格式;论文专属规则仍不写进通用核心。
## 2. 第一版清洗目标
@@ -21,14 +21,14 @@ ClinDB-ReviewBench 是师姐的论文清洗项目。`data/` 下当前 5 份 DOI
| # | 问题(审计编号) | 规则要点 | 触发范围(本轮实测) |
|---|---|---|---|
| 1 | HTML 实体双重转义(D2 | `&amp;gt;``>``&amp;lt;``<``&amp;amp;``&`,还原一层;幂等 | dmp L27/L33 共 23 处、ejhf L143 共 8 处,全部在 `<table>` 行内 |
| 1 | HTML 实体双重转义(D2 | 只在严格 HTML 表格单元格文本中把 `&amp;gt;``&gt;``&amp;lt;``&lt;``&amp;amp;``&amp;`,解除源码的一层转义;幂等 | dmp 23 处、ejhf 8 处,共 31 处 |
| 2 | arXiv 边栏戳(H1) | 只有整行满足 `design/0004-arxiv-submission-stamp-component.md` 第 4 节的严格格式才删除;编号条目内的 "arXiv preprint arXiv:…" 不受影响 | sim L1、springer L18springer L143/L152 是合法参考文献,必须不误删 |
| 3 | Word 审阅批注(B2 | `Commented [xx]:` 开头的行及其批注正文整块删除 | jama L155157 共 2 处 |
| 4 | 手稿行号(B1 | 仅剥离**单调递增序列**的行首 `^\d{1,3} ` 与标题内 `^#{1,6} \d{1,3} `;序列中断即停止提出后续修改,防止误伤正文数字(如 "35 pediatric experts" | jama 128 行正文 + 6 个标题(L127/149/151/165/193/195 |
| 3 | Word 审阅批注(B2 | 删除严格单行 `Commented [xx]: ...` 及其后第一个空行;不猜测多行批注正文 | jama 2 处 |
| 4 | 手稿行号(B1 | 只处理唯一 `## Abstract` 后至少 20 个、严格递增且含至少 2 个标题证据的完整序列;剥离普通行和标题中的数字前缀 | jama 75 处,其中普通行 69、标题 6;Abstract 前 59 个作者单位编号必须保留 |
| 5 | 跑动页眉(C4) | 同一文本行原样重复 ≥2 次(且非正文引用对象)判为页眉,删除并把被切断的上下文段落接回 | dmp L73/L191"MSOFA Score for Critical Care Triage"),L71→L75 句子被切断 |
| 6 | 单行 HTML 表格展开(D1 | 无 rowspan/colspan 的表转多行 GFM;含合并属性的表保留 HTML 但`<tr>` 换行缩进;内容一字不改 | 全部 9 个表:dmp 7、ejhf 1、springer 1 |
| 7 | 跨页断词(E2 | 行尾连字符 + 下一行首小写字母 → 合并;仅在拼出的词能通过英文词表校验时执行,否则保留原样且不提出修改 | dmp L125/127thresh-olds)、sim L87/89possi-bly)、L217/219cre-ated |
| 8 | 参考文献分隔统一(G3) | `^\d+\. ` 条目之间统一一个空行 | dmp refs 1933、springer refs 919(连续堆叠段) |
| 6 | 单行 HTML 表格展开(D1 | 严格完整的单行表格保留 HTML、属性和单元格内容,只`<tr>` 换行缩进;当前不转 GFM | 全部 9 个表:dmp 7、ejhf 1、springer 1;每张都有非 `1``colspan` |
| 7 | 跨页断词(E2 | 只按项目批准的左右片段和结果词映射合并相邻行或只隔一个空行的片段;不使用英文词表猜测 | dmp 2 处、jama 2 处、sim 2 处,共 6 处 |
| 8 | 参考文献分隔统一(G3) | 只在准确 References 章节内,对从 1 开始连续递增的编号条目统一一个空行 | dmp 13 处、springer 15 处,共 28 处 |
本表只包含当前自动清洗核心能够承载的修改。原审计中的图片断链校验修复不了 Markdown,已移到第 3 节等待
未来独立 Inspector 设计,不计入这 8 类自动清洗目标。
@@ -54,20 +54,24 @@ ClinDB-ReviewBench 是师姐的论文清洗项目。`data/` 下当前 5 份 DOI
## 4. 输入输出边界
- 项目输入位于 `data/<转换结果目录>/markdowns/*.md`,原文件只读;
- 当前核心只接收内存 Markdown 字符串并返回内存结果;文件输出位置和保存流程尚未设计,不回写、不覆盖原文件;
- 当前批次不读取图片资产;未来 Inspector 和路径改写分别设计
- 每处实际修改必须在内存结果中记录组件、理由、原文、改后内容和批次哈希,保证可追踪。
- 当前本地输入是 `data/md/` 中按论文缩写命名的 5 份 Markdown 副本,原文件只读;
- 核心只接收内存 Markdown 字符串;本地实验层按 `design/0005` 将成功输出、JSON 审计和 diff 保存到
`artifacts/<YYYY-MM-DD>/runs/<run_id>/`,不回写、不覆盖输入
- 当前批次不读取或复制图片资产;未来 Inspector、资产打包和路径改写分别设计;
- 每处实际修改记录组件、理由、原文、改后内容和批次哈希,完整落盘字段以代码和 `design/0005` 为准。
## 5. 验收口径(第一版)
- 上述 8 类问题在本轮 5 份文件上的触发处全部按规则处理,处理数与审计报告的实测数字一致
- 上述 8 类问题在本轮 5 份文件上的触发处全部按规则处理,共产生 155 条 `Change`
- 5 份文件中未被任何规则命中的正文零变更——除表中列出的触发处外不得有任何其他 diff;
- 幂等性:同一输入清洗两次,第二次产出与第一次完全一致;
- 规则 2arXiv 戳)在 springer 上的验收必须包含反向用例:L143/L152 参考文献原文保留;
- 规则 4(行号)验收必须包含反向用例:正文中的 "35 pediatric experts"、"10 sites"、"4 continents"
等数字开头/含数字短语不受影响。
2026-08-22 的保存型验收中,5 份文档全部为 `success`,各组件计数为:批注 2、行号 75、arXiv 2、页眉 2、
断词 6、HTML 实体 31、表格布局 9、参考文献空行 28。第二次运行 5 份合计 0 条修改,输入运行前后不变。
## 6. 与审计报告的编号对应
本文的 8 类自动清洗规则对应 `scratch/data-5papers-cleaning-audit-2026-08-21.md` 的决策清单行: