关于 alterlab-pubmed
alterlab-pubmed 是使用 PubMed 搜索生物医学和生命科学文献的技能,介绍高级检索式和 E-utilities 程序化访问,并提供搜索、摘要和获取记录的脚本。
主要功能
- 01布尔运算符、字段标签和 MeSH 检索
- 02按日期和出版物类型筛选
- 03通过 E-utilities 搜索、摘要和获取记录
- 04按 PMID、DOI 或引文查找文章
- 05发现相关文章并导出引文数据
- 06系统综述检索指南
适用场景
- 01为文献综述查找生物医学论文
- 02使用 MeSH 词和筛选条件构建检索式
- 03按 PMID 获取摘要和元数据
- 04导出记录到文献管理工具
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alterlab-ieu/ alterlab-academic-skills --skill alterlab-pubmed安装后在 Claude Code 中输入/alterlab-pubmed确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonreferences/api_reference.mdcommon_queries.mdsearch_syntax.mdscripts/query_pubmed.py详细介绍
PubMed 数据库
概览
PubMed 是美国国家医学图书馆的综合数据库,免费提供对 MEDLINE 和生命科学文献的访问。使用布尔运算符、MeSH 词和字段标签构建高级查询,并通过 E-utilities API 以编程方式访问数据,用于系统综述和文献分析。
脚本
scripts/query_pubmed.py — NCBI E-utilities(ESearch/ESummary/EFetch;仅使用标准库,JSON 输出到 stdout):
python scripts/query_pubmed.py search "crispr[tiab] AND 2024[dp]" --retmax 20 # PMIDs
python scripts/query_pubmed.py summary 39726939 39492484 # metadata for PMIDs
python scripts/query_pubmed.py fetch 39726939 # abstracts (set NCBI_API_KEY or --api-key for 10 req/s)
何时使用此技能
适用于以下情形:
- 搜索生物医学或生命科学研究文章
- 使用布尔运算符、字段标签或 MeSH 词构建复杂搜索查询
- 开展系统文献综述或荟萃分析
- 通过 E-utilities API 以编程方式访问 PubMed 数据
- 根据特定条件查找文章(作者、期刊、发表日期、文章类型)
- 获取引文信息、摘要或全文文章
- 使用 PMID(PubMed ID)或 DOI
- 创建用于文献监测或数据提取的自动化工作流
不适用情形
| 情形 | 改用 |
|---|---|
| 跨学科文献搜索、引文计数、文献计量学 | alterlab-openalex |
| 尚未经过同行评审的生命科学预印本 | alterlab-biorxiv |
| 试验注册、招募状态、NCT 记录 | alterlab-clinicaltrials |
| 检查参考文献是否存在或是否已撤稿 | alterlab-citation-verifier |
| 在更大的 Biopython 流程中使用 Python Entrez 工作流 | alterlab-biopython |
核心功能
1. 构建高级搜索查询
使用布尔运算符、字段标签和专用语法构建复杂的 PubMed 查询。
基本搜索策略:
- 使用布尔运算符(AND、OR、NOT)组合概念
- 使用字段标签将搜索范围限制在记录的特定部分
- 使用双引号进行短语搜索,以精确匹配
- 使用通配符匹配词语变体
- 使用邻近搜索查找指定距离内的词语
查询示例:
# Recent systematic reviews on diabetes treatment
diabetes mellitus[mh] AND treatment[tiab] AND systematic review[pt] AND 2023:2024[dp]
# Clinical trials comparing two drugs
(metformin[nm] OR insulin[nm]) AND diabetes mellitus, type 2[mh] AND randomized controlled trial[pt]
# Author-specific research
smith ja[au] AND cancer[tiab] AND 2023[dp] AND english[la]
何时查阅 search_syntax.md:
- 需要完整的可用字段标签列表
- 需要详细了解搜索运算符
- 构建复杂的邻近搜索
- 了解自动词语映射的行为
- 需要日期范围、通配符或特殊字符的特定语法
字段标签的 Grep 模式:\[au\]|\[ti\]|\[ab\]|\[mh\]|\[pt\]|\[dp\]
2. MeSH 词和受控词表
使用医学主题词(MeSH),在生物医学文献中进行精准且一致的搜索。
MeSH 搜索:
- [mh] 标签搜索 MeSH 词,并自动包含更具体的下位词
- [majr] 标签将结果限制为主题为主要关注点的文章
- 将 MeSH 词与副主题词结合,以提高特异性(例如,diabetes mellitus/therapy[mh])
常见 MeSH 副主题词:
- /diagnosis - 诊断方法
- /drug therapy - 药物治疗
- /epidemiology - 疾病模式和患病率
- /etiology - 疾病病因
- /prevention & control - 预防措施
- /therapy - 治疗方法
示例:
# Diabetes therapy with specific focus
diabetes mellitus, type 2[mh]/drug therapy AND cardiovascular diseases[mh]/prevention & control
3. 按文章类型和发表信息筛选
按出版类型、日期、文本可用性和其他属性筛选结果。
出版类型(使用 [pt] 字段标签):
- 临床试验
- 荟萃分析
- 随机对照试验
- 综述
- 系统综述
- 病例报告
- 指南
日期筛选:
- 单一年份:
2024[dp] - 日期范围:
2020:2024[dp] - 特定日期:
2024/03/15[dp]
文本可用性:
- 免费全文:在查询中添加
AND free full text[sb] - 有摘要:在查询中添加
AND hasabstract[text]
示例:
# Recent free full-text RCTs on hypertension
hypertension[mh] AND randomized controlled trial[pt] AND 2023:2024[dp] AND free full text[sb]
4. 通过 E-utilities API 进行程序化访问
使用 NCBI E-utilities REST API 以编程方式访问 PubMed 数据,执行自动化和批量操作。
核心 API 端点:
- ESearch - 搜索数据库并检索 PMID
- EFetch - 以多种格式下载完整记录
- ESummary - 获取文档摘要
- EPost - 上传 UID 以进行批量处理
- ELink - 查找相关文章和关联数据
基本工作流:
import requests
# Step 1: Search for articles
base_url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/"
search_url = f"{base_url}esearch.fcgi"
params = {
"db": "pubmed",
"term": "diabetes[tiab] AND 2024[dp]",
"retmax": 100,
"retmode": "json",
"api_key": "YOUR_API_KEY" # Optional but recommended
}
response = requests.get(search_url, params=params)
pmids = response.json()["esearchresult"]["idlist"]
# Step 2: Fetch article details
fetch_url = f"{base_url}efetch.fcgi"
params = {
"db": "pubmed",
"id": ",".join(pmids),
"rettype": "abstract",
"retmode": "text",
"api_key": "YOUR_API_KEY"
}
response = requests.get(fetch_url, params=params)
abstracts = response.text
速率限制:
- 不使用 API 密钥:每秒 3 次请求
- 使用 API 密钥:每秒 10 次请求
- 始终包含 User-Agent 标头
最佳实践:
- 对于大型结果集,使用历史服务器(usehistory=y)
- 通过 EPost 对多个 UID 执行批量操作
- 在本地缓存结果,以尽量减少重复调用
- 遵守速率限制,避免服务中断
何时查阅 api_reference.md:
- 需要详细的端点文档
- 需要了解各 E-utility 的参数规范
- 构建批量操作或历史服务器工作流
- 了解响应格式(XML、JSON、文本)
- 排查 API 错误或速率限制问题
API 端点的 Grep 模式:esearch|efetch|esummary|epost|elink|einfo
5. 引文匹配与文章检索
使用部分引文信息或特定标识符查找文章。
按标识符查找:
# By PMID
12345678[pmid]
# By DOI
10.1056/NEJMoa123456[doi]
# By PMC ID
PMC123456[pmc]
引文匹配(通过 ECitMatch API): 使用期刊名称、年份、卷号、页码和作者查找 PMID:
Format: journal|year|volume|page|author|key|
Example: Science|2008|320|5880|1185|key1|
按作者和元数据查找:
# First author with year and topic
smith ja[1au] AND 2023[dp] AND cancer[tiab]
# Journal, volume, and page
nature[ta] AND 2024[dp] AND 456[vi] AND 123-130[pg]
6. 系统性文献综述
为系统性综述和荟萃分析进行全面的文献检索。
PICO 框架(人群、干预、对照、结局): 系统地构建临床研究问题:
# Example: Diabetes treatment effectiveness
# P: diabetes mellitus, type 2[mh]
# I: metformin[nm]
# C: lifestyle modification[tiab]
# O: glycemic control[tiab]
diabetes mellitus, type 2[mh] AND
(metformin[nm] OR lifestyle modification[tiab]) AND
glycemic control[tiab] AND
randomized controlled trial[pt]
全面的检索策略:
# Include multiple synonyms and MeSH terms
(disease name[tiab] OR disease name[mh] OR synonym[tiab]) AND
(treatment[tiab] OR therapy[tiab] OR intervention[tiab]) AND
(systematic review[pt] OR meta-analysis[pt] OR randomized controlled trial[pt]) AND
2020:2024[dp] AND
english[la]
优化检索:
- 从宽泛检索开始,查看结果
- 添加字段标签以缩小范围
- 应用日期和出版物类型筛选条件
- 使用 Advanced Search 查看查询转换
- 合并检索历史以处理复杂查询
何时查阅 common_queries.md:
- 需要特定疾病类型或研究领域的示例查询
- 需要适用于不同研究设计的模板
- 查找针对特定人群的查询模式(儿科、老年人等)
- 构建特定方法学的检索
- 需要质量筛选条件或最佳实践模式
查询示例的 Grep 模式:diabetes|cancer|cardiovascular|clinical trial|systematic review
7. 相关文章与引文发现
使用 ELink 以编程方式查找相关研究(根据标题/摘要相似度和 MeSH 重叠预先计算的邻近文章):
elink.fcgi?dbfrom=pubmed&db=pubmed&id=PMID&cmd=neighbor
cmd=prlinks 返回出版商全文 URL;cmd=llinks 返回 LinkOut URL。
8. 导出以进行引文管理
使用 EFetch 和 rettype=medline&retmode=text,以 MEDLINE/.nbib 格式导出记录,供参考文献管理器(Zotero、Mendeley、EndNote)使用:
efetch.fcgi?db=pubmed&id=PMID1,PMID2&rettype=medline&retmode=text
使用参考文件
此技能在 references/ 目录中包含三个全面的参考文件:
references/api_reference.md
完整的 E-utilities API 文档,涵盖全部九个端点、参数、响应格式和最佳实践。适用于以下情况:
- 实现程序化 PubMed 访问
- 构建 API 请求
- 了解速率限制和身份验证
- 通过历史服务器处理大型数据集
- 排查 API 错误
references/search_syntax.md
PubMed 搜索语法详细指南,涵盖字段标签、布尔运算符、通配符和特殊字符。适用于以下情况:
- 构建复杂的搜索查询
- 了解自动术语映射
- 使用高级搜索功能(邻近检索、通配符)
- 应用筛选条件和限制
- 排查意外的搜索结果
references/common_queries.md
涵盖各种研究场景、疾病类型和方法的丰富示例查询集合。以下情况请参考:
- 开始新的文献检索
- 需要特定研究领域的模板
- 查找最佳实践查询模式
- 开展系统综述
- 搜索特定研究设计或人群
参考资料加载策略:
按需加载参考文件。对于基本检索,SKILL.md 通常已足够;构建复杂查询时请参考 search_syntax.md,处理 API 工作流时请参考 api_reference.md,使用领域模板时请参考 common_queries.md。
提示与最佳实践
- 核实翻译:自动词汇映射可能会静默扩展术语;如果结果看起来不对,请检查查询翻译(或使用字段标签/双引号绕过 ATM)。
- API 吞吐量:无密钥时每个 IP 为 3 req/s;使用 API 密钥可提升至 10 req/s。请发送描述性 User-Agent,在遇到 HTTP 429 时采用指数退避,并缓存结果以避免重复调用。
- 大型结果集(>~500 条记录):使用历史服务器(
usehistory=y,然后通过retstart/retmax分页调用 EFetch)或 EPost,而不是传入一个超长的id列表(可能触发 HTTP 414)。历史服务器不会解除下方所述的 9,999 条记录上限。 - 证据质量:优先使用
systematic review[pt]、meta-analysis[pt]和randomized controlled trial[pt];并根据需要搭配humans[mh]、english[la]和[dp]日期范围。 - 可复现性:记录确切的查询字符串和检索日期——随着记录添加和重新编入索引,PubMed 结果会发生变化。
限制与注意事项
- 范围:经同行评审的生物医学/生命科学文献(MEDLINE + PubMed)。检索预印本请使用预印本服务;检索临床试验注册记录(NCT ID、招募状态)请使用 ClinicalTrials.gov。
- 覆盖缺口:1975 年以前的文章通常没有摘要;作者全名仅从 2002 年起编入索引。
- 结果上限:PubMed ESearch 对每个查询最多只能返回前 9,999 条记录——
retstart大于 9998 时会返回错误,使用历史服务器的 EFetch/ESummary 也会遇到同样的限制。对于更大的结果集,请按日期范围拆分查询(例如AND 2020/01/01:2020/06/30[dp]),确保每个范围的命中数都低于 9,999;或者使用 EDirect,它会自动分批处理。 - 全文:PubMed 提供引文/摘要,不提供全文。能否访问取决于出版商、开放获取状态或机构订阅;详细记录需要解析 XML。
支持资源
- PubMed 帮助:https://pubmed.ncbi.nlm.nih.gov/help/
- E-utilities 文档:https://www.ncbi.nlm.nih.gov/books/NBK25501/
- NLM 帮助台:1-888-FIND-NLM(1-888-346-3656)
- 技术支持:[email protected]
- 邮件列表:[email protected]