# 文献全文深度调研 — 补强方案

> 编制：2026-09-12　｜　口径：全部数字为**本机实测**，不推断
> 一句话结论：**"找全文"这一段我们已经打穿了（40 篇本地全文 + 验真 100%），真正薄弱的是两头——上游"不知道有哪篇"、下游"24 篇真封闭拿不到"，以及中间"没有可检索的语料库"。本轮已把语料库补上，剩下两条需要你拍板。**

---

## 一、体检：现在到底有什么、缺什么

| 项 | 实测值 | 判定 |
|---|---|---|
| 本地全文 | **40 篇** txt / **184.0 万字符** / 切段 1,599 | 够用，但只是 4 个课题的量 |
| PDF 归档 | 4 份 | 偏少（多数走 XML/HTML 通道） |
| oa_index 索引 | **54 个 DOI**（34 个有本地全文） | 元数据齐，全文命中 63% |
| 草稿引用缺口（规范化去重后） | D1 **3** / D2 **12** / D3 **0** / D4 **8** ＝ **23 个** | 与上轮"真封闭 24 篇"**互相验证一致 ✅** |
| 语料检索工具 | 修改前 **0**（每轮靠临时脚本现写）→ 现已建 `脚本/lit_corpus.py` | **已补** |
| 中英术语映射 | 修改前 0 → 现建 `数据/lit_terms.json` **75 组** | **已补**（全文是英文、我们提问是中文，不映射就检索不到） |
| 语料格式纯净度 | **13/40 篇是 JATS XML 原文**，检索会命中 XML 头 | **已修**（自动剥离标签，只留 body） |
| 内部自查纠错率 | 本轮 1 处（Europe PMC 题名误配） | 纪律有效，需保持 |

### 本轮已交付（不需要你拍板，已做完）

1. **`脚本/lit_corpus.py`** — 三个子命令，把我们这几轮临时写的脚本固化成基础设施：
   - `stats` 语料盘点（含"草稿引用 vs 本地全文"缺口自动算，DOI 规范化去重）
   - `search "查询词"` 全文**段落级 BM25 检索**，中文自动展开英文同义词，直接给出可引用的出处
   - `verify facts.json` **数值验真**：逐条核对"这个数字是否真在原文里"
2. **`数据/lit_terms.json`** — 75 组中英术语（冻干/保护剂/等温扩增/纠错测序/定向进化…），可持续补充。
3. **两处实测验收**：
   - 检索 `"抗抑制能力 全血 Klentaq1"` → **NAR gkn1055 排第 1**，命中段落正是"血与土壤抑制物抗性"原文（此前只能靠我人工翻）
   - 验真 `verify` → **D3 24/24 命中、D4 18/18 命中（100%）**

---

## 二、六个补强杠杆（按"卡在哪"排序）

### 杠杆 1｜上游：检索入口太窄 —— **最大短板**

- **现状**：我们只有 Unpaywall / Europe PMC。这决定了我们只会做"**已知 DOI → 找全文**"，不会做"**只知题目/关键词 → 发现文献**"。没有发现能力，检索面就被已有清单锁死。
- **动作**：
  - PubMed E-utilities（`esearch`/`efetch`）—— **免费、无需 key**，可直接批量拉题录 + PMCID + 摘要
  - Crossref REST（免费）—— 补题录、刊名、被引
  - Exa / Scopus 类学术检索（需 key 或订阅）—— 补全网语义检索与引文库
- **主责**：我（Hermes）
- **验收**：同一课题（如"LAMP 冻干 保护剂"）三通道召回量对比表，覆盖已知清单之外的**新增**文献数 ≥1 篇即算有效

### 杠杆 2｜中游：获取流程未固化，每轮重写

- **现状**：五阶段阶梯（Europe PMC XML → Unpaywall → PMC oa.fcgi → PMC 正文 HTML）是**临时代码**，每轮都要重写、每轮都可能踩同一个坑（XML 污染、bioRxiv 429、题名误配）。
- **动作**：固化 `脚本/lit_fetch.py` —— 输入 DOI 清单，自动逐阶段尝试、落盘、**落盘后自动 verify**，输出"已获 / 未获 / 原因"三列。
- **主责**：我
- **验收**：给定任意 DOI 清单，脚本结论与人工结论一致；重复跑不产生重复文件

### 杠杆 3｜语料库可检索 ✅ 已完成（本轮）

- **动作（待补 20%）**：把检索命中**定位到章节/页码**，并允许"段落 → 直接进证据表"一键出引用。
- **主责**：我　｜　**验收**：同一结论能一键溯源到原文段落

### 杠杆 4｜下游：事实抽取与引用纪律

- **现状**：抽事实、核数值靠我逐条人工读；纪律（不采信子 Agent 自报、token 级回查）已成型但没有工具兜底。
- **动作**：固化"抽事实 → `verify` → 进证据表"三步；数值 token 级回查**未命中即不许进对外文件**。
- **主责**：我 + 产品部（数值口径确认）
- **验收**：对 4 份草稿做全量回查报告，未命中条目 = 0 才放行

### 杠杆 5｜真正卡住的地方：24 篇真封闭 —— **必须你拍板**

- **现状**：四条合法通道**都缺外部条件**：作者索取（模板已备、**函件一封没发**）、馆际互借（需图书馆账户）、单篇购买（$30–60/篇，需预算）、预印本（已查尽）。
- **决策项**：① 现在就发作者索取函 ② 有无图书馆账户走馆际互借 ③ 是否批预算买单篇（24 篇估 **$800–1,400**）

### 杠杆 6｜长期：把"每次卡 24 篇"变成成本决策

- **动作**：出"机构订阅 / 单篇代购 / 按次购买"三年成本对比，量化"年费 vs 单篇"的盈亏平衡点（按我们实际年需求量）。
- **主责**：我出对比 → 你拍板

---

## 三、护栏（已写入纪律，不许破）

| 护栏 | 由来 |
|---|---|
| 子 Agent 产物**一律不采信自报**，必须数值 token 级回查 | 第一轮 38/38、第二轮 59/59 全量回查 |
| Europe PMC 题名误配**必须回查真 DOI** | 抓 Kermekchiev 时被误配到 Frontiers 2014；`gkn952` 实为 Arezi 2009，真篇是 `gkn1055` |
| "付费墙"结论**必须先过 Unpaywall** | 57 DOI → 发现 40 篇有合法开放版，原判"付费墙"的 19 篇其实免费可读 |
| 作者手稿（NIHMS）**必须标注**，不作最终排版引 | Chabon 2020 本地即为手稿 |
| **盗版镜像类不做** | 铁律，这条线不碰 |

---

## 四、下一步：我做 vs 你拍板

**我这边立刻能做（不等你）**

| # | 动作 | 产出 |
|---|---|---|
| A | 固化 `脚本/lit_fetch.py`（五阶段阶梯一键化 + 自动验真） | 一脚本、一清单、三列结果 |
| B | 建 PubMed / Crossref 免费检索脚本，补上游召回 | 三通道召回对比表 |
| C | 4 份草稿全量"事实 ↔ 原文"回查 | 验真报告（未命中=0 才放行） |

**需要你拍板 2 件**

1. **24 篇真封闭走哪条路**：① 发作者索取函（免费、周期 1–2 周）② 有无图书馆账户 ③ 批预算买单篇（$800–1,400）
2. **上游检索要不要升级**：接 Exa（需 API key）／仅用免费 PubMed+Crossref ／暂不动
