Files
mdpolish/research-wiki/explanation/arxiv-submission-stamp.md
T
Bepr4 8c23ac5521 实现 arXiv 提交边栏戳清洗组件
冻结 0004,新增严格整行删除组件和测试,并记录 5 份论文的只读验证结果。同步 ClinDB 清洗范围,并忽略本地 reference 调研副本。
2026-08-22 15:02:21 +08:00

77 lines
4.3 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.
# arXiv 提交边栏戳为什么能自动删除
## 1. 可观察的问题
部分 arXiv 论文转换为 Markdown 后,会把提交页边栏中的编号、分类和日期留下来,形成一整行独立文字。它不是
论文正文,却会进入后续分块、检索和对比。与此同时,论文参考文献也可能包含 `arXiv:`;只要见到这个子串就删行,
会损坏合法引用。
当前组件只处理前一种格式固定的独立行。它的决策来自已批准的
[`0004-arxiv-submission-stamp-component.md`](../design/0004-arxiv-submission-stamp-component.md),项目范围编号为 H1。
精确模式、类名和返回对象以
[`arxiv_submission_stamp.py`](../../src/mdpolish/components/arxiv_submission_stamp.py) 及其
[`测试`](../../tests/test_arxiv_submission_stamp.py) 为准。
## 2. 当前识别边界
组件逐个读取物理行,只在整行同时具有以下结构时提出删除:
```text
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`](../../README.md#当前可用检查) 维护。
## 6. 剩余边界
这个组件只证明第一条严格删除规则能够在公共核心上闭环,不表示论文已经清洗完成。HTML 实体、Word 批注、手稿
行号、断词、表格和参考文献间距仍未实现;文件输出、profile 和批处理也不存在。
如果出现新的提交戳格式,默认行为是保留。必须先补充真实证据、反向样例和 design,再决定是否放宽模式,不能为了
提高命中数量直接修改正则表达式。