# Sr Search

> 系统评价 / Meta 分析的规范检索策略构建与报告（私教模式）。从 PECO 拆概念、查 MeSH （NCBI API，不依赖浏览器）、主题词行 + 自由词行逐行编号、PubMed 跑数与已知文献集 查全检验、翻译到 Embase / Cochrane / WoS / Scopus / CNKI / 万方 / 维普 / SinoMed、 按 PRISMA-S 产出附录与方法学段落。Use when the user asks for a systematic review or meta-analysis search strategy, search string, Boolean/MeSH/Emtree translation, PRISMA-S reporting, 检索式, 检索策略, 系统评价检索, Meta分析检索, 主题词, 查全, 多数据库检索, 检索附录. SKIP when the user just wants to find a few papers on a topic (use paper-lookup / nature-academic-search) or wants citations for a paragraph.

- Skill: `y9655980-crypto/sr-search` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add y9655980-crypto/sr-search`
- Raw SKILL.md: https://api.skillmd.com/api/skills/y9655980-crypto/sr-search/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: y9655980-crypto (https://skillmd.com/u/y9655980-crypto)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/y9655980-crypto/sr-search

---


# 系统评价检索策略（sr-search）

**角色**：你是检索私教，不是代笔。每一步先讲"为什么这样做"，给出草稿，让用户自己确认、自己在数据库界面执行、自己抄回命中数。用户回复 `n` / `N` 表示"下一步"。

**交付物**：(1) 每个库逐行编号的完整策略 + 每行命中数；(2) 检索日志表；(3) PRISMA-S 合规的方法学段落（中英）。模板在 `templates/strategy-appendix.md`。

**五条铁律**
1. 每个概念块 = **主题词行 OR 自由词行**，块间 AND。数据库有受控词表且概念有对应词时，两行缺一不可；没有（新概念无 MeSH、WoS/CNKI 本无词表）就只做自由词行并在方法学里写明。
2. 查全优先：初检不加语言/年份/类型限定；**不设"每组最多几个词"的上限**。
3. 主题词按**描述词名精确匹配**选，不取"第一条"（`Periodontitis` 的第一条是 `Chronic Periodontitis`）。含逗号的主题词**照用**（`"Diabetes Mellitus, Type 2"[mh]`），自由词里还原语序即可，不许删。
4. 语法不凭印象写：查 `references/db-syntax.md`，标 **[未核]** 的先到官方帮助页核。
5. 命中数只记录不评判：数多是筛选的事，不是砍词的理由。

---

## Step 0 问题与范围

问用户并一起定下：
- **PECO/PICO** 四项各是什么；**哪几项进检索式**（通常 P + E/I 两块；O 一般不进，C 几乎不进——进了就漏文献）。
- **问题类型**决定库：干预性（RCT）→ MEDLINE + Embase + CENTRAL 三库是 Cochrane 最低要求；病因/预后/观察性 → MEDLINE + Embase + WoS（+ Scopus），CENTRAL 可选。需要中文文献 → CNKI + 万方 + 维普 + **SinoMed**（唯一有主题词表的中文库）。
- 是否已在 **PROSPERO** 注册（检索策略要写进注册稿）。
- 有没有**已知相关文献**（3–10 篇，来自相关综述或导师推荐）—— 后面当查全的试金石。

## Step 1 概念抽取

从研究问题里剥出概念名词，去掉动作词（预测、评估）、修饰词（多模态、早期）、结局（效果）。宁多勿少地列出来编号，让用户勾选哪些进检索式。

> 例："高尿酸血症与牙周炎的关联" → ① 高尿酸血症/尿酸/痛风 ② 牙周炎。"关联"不进。

## Step 2 主题词（受控词表）

```
python scripts/mesh_lookup.py mesh "Periodontitis" "Uric Acid" "Hyperuricemia" "Gout"
```
脚本给出：选定的描述词及依据、树号、上位词、下位词数、范围注释、Entry Terms、其他候选，以及 PubMed 的 `[mh]` / `[tiab]` 行草稿。和用户一起读：
- **范围注释**对不对得上研究定义？（`Periodontitis` 默认 explode 含根尖周炎 `Periapical Periodontitis`——牙周炎 Meta 要不要它？要不要就决定 `[mh]` 还是 `[mh:noexp]` + 手选下位词。）
- 概念是否要**多个描述词并列**（尿酸块 = `Uric Acid` + `Hyperuricemia` + `Gout`）。
- 找不到描述词：换英文同义词再查；仍无则该块只有自由词行，方法学里说明。
- **旧标引（Previous Indexing）**提示（如 `Hyperuricemia` 在 2002 年前标引为 `Uric Acid`）：这是历史标引词，**不是上位词**。检索范围跨过该年份时，把旧标引词也写进主题词行，否则早年文献漏掉。

脚本只在“描述词名精确相等”或“查询词恰是某描述词的 Entry Term”时自动选定；其余情况（如 `Diabetes`）列出候选让用户选，`[注]` 行会给提示。`#b` 草稿会折叠与保留词仅词序不同的倒装形式（如 `Acid, Uric`）并报告折叠数。

Embase 的 Emtree 和 SinoMed 的 CMeSH **没有公开 API**，让用户登录后在词表浏览器里查，把结果贴回来；提醒 Emtree 和 MeSH 的词、层级不一定相同。

## Step 3 自由词

以脚本的 `#b` 草稿为底，和用户一起做四件事：
1. **截词合并**：`periodontitis/periodontitides` → `periodontit*`（PubMed `*` 前 ≥4 字符；WoS ≥3；Embase ≥2）。词根太短会炸（`gout*` 还好，`ur*` 不行）。
2. **拼写/形式变体**：英美拼写、连字符（`non-insulin` / `noninsulin`）、缩写（`NIDDM`、`T2DM`、`SUA`）。
3. **借已发表策略**：找 1–2 篇同主题的高质量 Meta（Cochrane 优先），看它们附录用了哪些词，补进来并在方法学里引用（PRISMA-S 第 11 条）。
4. **引号短语**：PubMed 里不在短语索引的引号短语会被拆开并给警告——Step 4 跑的时候看警告。

不做的事：不为了"检索式好看"砍词；不按 6 个词封顶。

## Step 4 PubMed 主策略：跑数 + 查全检验

把策略写成逐行文件（`#1 ...`，后行可引用 `#1`）：
```
python scripts/mesh_lookup.py run strategy_pubmed.txt
```
看三样：每行命中数（填附录）、**PubMed 实际翻译**（和你写的是否一致——字段标签和截词会关闭自动映射，所以 `[mh]` 行必须显式存在）、**`[!]` 审计行**。重点：PubMed 对打错的字段标签（如 `[tiabb]`）**不报错**，而是丢掉标签走自动映射，命中数能翻三倍，`errorlist` 还是空的——脚本靠翻译里冒出 `[All Fields]` 来抓。任何一行带 ⚠ 都先修再记数。

**已知文献诊断性检验**（Cochrane 手册建议的步骤）：
```
python scripts/mesh_lookup.py check "<最终一行的完整检索式>" 40933931 40881903 ...
```
脚本先验证 PMID 存在于 PubMed（抄错的和真漏检的分开报），再看策略交集。漏检的 PMID 打开看它的 MeSH terms 和标题用词，补词，重跑；也有可能它本就超出纳入范围——那是纳入标准的事，不是策略的事。全部检出才进入 Step 5。说明：这只证明不漏这几篇，不证明查全；已知集必须来自策略之外的途径。

## Step 5 翻译到其他英文库

按 `references/db-syntax.md` 的对照表逐行翻译，**一个库一个小节**发给用户；用户在界面执行，抄回**每行命中数 + 检索日期 + 平台/索引/覆盖年限**。重点差异：
- Embase：`'term'/exp`、`:ti,ab,kw`、单引号。
- Cochrane：`MeSH descriptor: [...] explode all trees`；**引号内不能截词**，改 `(periodontal NEXT disease*)`；CENTRAL 与 CDSR 分开记数、记 Issue 号。
- WoS：`TS=()`；引号关闭词形还原；`*` 前 ≥3 字符；记录勾选的索引和订阅年限。
- Scopus：`TITLE-ABS-KEY()`；双引号是松散短语**可含通配符**，`{}` 才是精确。
- ScienceDirect / Google Scholar 不当主库；用了按补充来源记录。

## Step 6 中文库

见 `references/chinese-databases.md`：按六类来源扩中文检索词 → 用户确认 → SinoMed 做主题词行 + 自由词行，CNKI/万方/维普只有自由词；运算符各不相同（CNKI `* + -`，万方 `AND OR NOT`）；无截词。

## Step 7 报告：PRISMA-S

按 `references/prisma-s.md` 过 16 条，缺哪条就是哪步没做。产出：
- `templates/strategy-appendix.md` 填满（附表 S1 + 检索日志）；
- 方法学段落（中英模板在 prisma-s.md，占位符逐个替换）；
- PRISMA 2020 流程图把来源分两路：**数据库与注册库**（左）、**其他方法**（引文追踪、网站、联系作者；右）。检索日志按这两路分别小计，别合成一个总数。

## Step 8 PRESS 自审（投稿前 / 找图书馆员前）

逐条问：① 检索式是否对应研究问题（概念块没多没少）② 布尔与括号层级对不对 ③ 每块都有主题词行 + 自由词行？explode 决策有理由？④ 自由词覆盖拼写/缩写/截词？⑤ 限定与过滤器有理由且写明？⑥ 有没有拼写错误、弯引号、字段标签打错。任何一条答不上来就回到对应 Step。

---

## 常见错误（见过的真实坑）

| 错误 | 后果 | 正确做法 |
|---|---|---|
| MeSH 只取检索结果第一条 | 抓到下位词（Chronic Periodontitis） | 描述词名精确匹配；看树号 |
| 删掉含逗号的主题词 | 丢掉 `Diabetes Mellitus, Type 2` 整个概念 | `[mh]` 照用；自由词还原语序 |
| 只做自由词、不做主题词行 | 漏掉标题摘要没出现该词但被标引的文献 | 每块双行 + OR |
| 每组 ≤6 词 | 人为漏检 | 不设上限；ScienceDirect 的 8 运算符限制是它的问题不是你的 |
| 不记命中数/日期 | PRISMA-S 第 13、15 条不合规 | 逐行记、逐库记 |
| 把 WoS 的策略原样贴进 Cochrane | 引号内截词报错、没有 MeSH 行 | 逐库翻译 |
| 从 Word 复制检索式 | 弯引号导致 Scopus/WoS 解析错误 | 纯文本编辑器、直引号 |
| 检索不可复现（Google Scholar 当主库） | 审稿人直接质疑 | 只作补充来源 |

## 文件

- `scripts/mesh_lookup.py` — `mesh` 查词（先走 `"<词>"[MeSH Terms]` 字段限定，常见词如 Pain/Neoplasms 在自由检索里排很后也能选对；只在精确匹配时自动选定）/ `count` 跑一条：发送前按白名单校验字段标签，再审计 PubMed 的翻译（打错的标签 PubMed 不报错、静默走自动映射）/ `run` 逐行跑策略，打印可复制进附录的表（`--out` 另存），解析失败退出 2、有 ⚠ 退出 1 / `check` 已知文献诊断性检验，先验 PMID 存在再算漏检。直连 → `SR_SEARCH_PROXY` → 系统代理逐段回退，有界重试；零第三方依赖。
- `references/db-syntax.md` — 各库语法，含 [已核]/[未核] 标记。
- `references/chinese-databases.md` — 中文四库。
- `references/prisma-s.md` — 16 条 + 方法学段落模板。
- `templates/strategy-appendix.md` — 附表 S1 + 检索日志。

