Files
mdpolish/research-wiki/explanation/arxiv-submission-stamp.md
T

4.9 KiB

arXiv 提交边栏戳为什么能自动删除

1. 可观察的问题

部分 arXiv 论文转换为 Markdown 后,会把提交页边栏中的编号、分类和日期留下来,形成一整行独立文字。它不是 论文正文,却会进入后续分块、检索和对比。与此同时,论文参考文献也可能包含 arXiv:;只要见到这个子串就删行, 会损坏合法引用。

当前组件只处理前一种格式固定的独立行。它的决策来自已批准的 0004-arxiv-submission-stamp-component.md,项目范围编号为 H1。 精确模式、类名和返回对象以 arxiv_submission_stamp.py 及其 测试 为准。

2. 当前识别边界

组件逐个读取物理行,只在整行同时具有以下结构时提出删除:

arXiv:<新版数字编号和版本> [<ASCII 分类>] <日> <英文月份缩写> <四位年份>

首尾空格、列表或引用前缀、缺少版本、旧式编号、错误月份以及句子中的 arXiv: 都不会命中。组件没有参数, 调用方不能传入更宽松的正则表达式改变同一版本的语义。

当前版本有意不解析 Markdown 块结构。围栏代码、HTML 注释或其他块中如果存在一行完整目标文字,同样会被删除。 这是 0004 明确接受的代价,不是实现遗漏。以后出现必须保留的真实反例时,需要重新评审识别边界并更新组件版本。

3. 删除如何保持原文边界

每个命中行产生一个候选修改和一个删除型文本编辑。删除范围包含该行自己的 \n\r\n 或单独 \r; 没有行尾的末行只删除文字,不拿走前一行已有的行尾。

输入位置 当前行为
首行且有行尾 连同行尾删除,后续正文成为首行
文档中间 连同目标行自己的行尾删除,前后内容保持两行
末行且没有行尾 只删除目标文字,保留前一行原有行尾
多个目标行 每行一个候选,按原文顺序记录,作为一个组件批次原子应用

组件不整理空行、不统一换行符,也不改变未命中的字符。候选修改绑定当前快照哈希和准确原文,仍由公共修改执行器 验证和应用;组件本身没有文件读写或独立 transform()

4. 审计与稳定性

组件标识为 paper.arxiv_submission_stamp,版本为 1.0.0,参数为空。每条实际删除记录固定理由,并保留删除原文、 原始范围、组件位置以及批次修改前后的哈希。

删除完成后目标行已经不存在。流水线最终复查不应再得到候选修改;把成功输出再次交给同一组件,也应保持原文不变 且产生零条实际改动。

5. 已完成验证

合成测试覆盖严格匹配、反向引用、首行/中间/末行、三种行尾、多个命中、围栏中仍删除、审计字段、确定性和 第二次运行零修改。测试只使用短小的虚构字符串,不含真实论文片段。

2026-08-22 先对本地 5 份 ClinDB-ReviewBench Markdown 做了只读、纯内存复核:

复核项 结果
输入范围 dmp、jama、ejhf、sim、springer 各 1 份,共 5 份
实际删除 sim 1 行、springer 1 行,其余 0 行,共 2 行
合法反向样例 springer 的 2 处 arXiv preprint arXiv: 修改前后均保留
第二次运行 5 份合计 0 条修改
源文件复读 5/5 与处理前内存内容一致,没有回写

这次早期复核没有保存清洗后 Markdown,也没有把真实原文复制进测试、日志或仓库。它是 0004 当时验证边界的 历史事实。

0005 批准本地产物机制后,同日又完成一次保存型实验:5 份文档全部为 success,仍然只修改 sim 和 springer 各一处;输出哈希全部匹配,输入运行前后字节不变,Springer 两处合法引用仍保留。产物位于 artifacts/2026-08-22/runs/clindb-arxiv-stamp-artifacts-v1/,只在本机保留并受 Git 忽略。具体产物结构和验证结果见 local-experiment-artifacts.md。安装、静态检查和完整测试命令仍只在根目录 README.md 维护。

6. 剩余边界

这个组件最初证明了第一条严格删除规则能够在公共核心上闭环。此后 ClinDB 第一批另外 7 个组件已经按 0006 实现, 当前完整组合见 clindb-first-batch-components.md。这仍不表示论文内容问题全部解决; 通用文件接口、profile、公共 CLI、图片资产和通用批处理仍不存在。

如果出现新的提交戳格式,默认行为是保留。必须先补充真实证据、反向样例和 design,再决定是否放宽模式,不能为了 提高命中数量直接修改正则表达式。