冻结 0004,新增严格整行删除组件和测试,并记录 5 份论文的只读验证结果。同步 ClinDB 清洗范围,并忽略本地 reference 调研副本。
4.3 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,没有把真实原文复制进测试、日志或仓库。安装、静态检查和完整测试命令仍只在根目录
README.md 维护。
6. 剩余边界
这个组件只证明第一条严格删除规则能够在公共核心上闭环,不表示论文已经清洗完成。HTML 实体、Word 批注、手稿 行号、断词、表格和参考文献间距仍未实现;文件输出、profile 和批处理也不存在。
如果出现新的提交戳格式,默认行为是保留。必须先补充真实证据、反向样例和 design,再决定是否放宽模式,不能为了 提高命中数量直接修改正则表达式。