You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向PUBMED数据库传入多关键词批量检索匹配任意关键词的文献

问题原因

你当前检索结果远低于实际数量的核心原因是PubMed EUtils的检索语法中,默认用+连接的关键词会执行AND逻辑,即要求命中文献同时包含所有你给出的5个关键词,而非包含任意一个即可命中。

正确的查询参数构造方案

要实现一次请求检索包含任意一个关键词的文献,只需要对关键词拼接逻辑做两处调整即可:

  • 所有包含空格的关键词需要用双引号包裹,避免被PubMed拆分为多个独立检索词执行默认逻辑
  • 关键词之间用+OR+连接,明确指定OR匹配规则(PubMed检索逻辑运算符需大写)
修正后的代码示例
import requests
import json

def get_abstract(id_list):
    url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id={}&retmode=" \
          "text&rettype=medline".format(id_list)
    # 修正原代码变量名大小写错误
    response = requests.request("GET", url, timeout=30)
    return response.text


def get_id_using_rest_api(query_string, max_papers):
    url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?sort=relevance&db=pubmed&term={}&retmode=JSON&retmax={}".format(
        query_string, max_papers)
    response = requests.request("GET", url, timeout=30)
    data = response.text
    json_response = json.loads(data)
    id_list = json_response["esearchresult"]["idlist"]
    return id_list
 


if __name__ == '__main__':
    keywords_list = ["lncRNA", "long non-coding RNA", "long noncoding RNA", "Aging","senescence"]
    # 先给每个关键词包裹双引号,再用+OR+连接
    processed_keywords = [f'"{kw}"' for kw in keywords_list]
    li_final = "+OR+".join(processed_keywords)
    ids = get_id_using_rest_api(li_final, 100000)
    print(f"检索到文献ID数量:{len(ids)}")
附加说明
  • PubMed ESearch接口单次请求的retmax参数上限为100000,若你的检索结果总量超过10万,需要配合retstart参数分页拉取所有ID
  • 频繁调用建议添加合理的请求间隔,避免被API临时限流

内容的提问来源于stack exchange,提问作者JAMSHAID

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:15:02