Europe PMC — 4,911 万条生命科学文献,1.3 亿条机器标注

它不是 PubMed Central 的欧洲镜像:多了预印本、专利、Agricola,多了一整套资助方反查,还多了 13 亿条文本挖掘标注——这是目前唯一能「按钱查论文、按论文查数据」的公开文献基础设施

来源 Europe PMC(EMBL-EBI) url: https://www.ebi.ac.uk/europepmc/webservices/rest/发布时间: 2026-10-23最后更新: 2026-10-23 阅读 15
Europe PMC — 4,911 万条生命科学文献,1.3 亿条机器标注

信息速览

数据集名称Europe PMC — 4,911 万条生命科学文献,1.3 亿条机器标注
数据类型4,911 万条文献,1,244 万条全文,835 万条开放获取,13 亿条标注,34 个预印本服务器,开放式 REST,无需注册
规模不适用(文献书目库,个体患者数据仅以论文内聚合形式出现)
接入方式Europe PMC(EMBL-EBI) url: https://www.ebi.ac.uk/europepmc/webservices/rest/
AI 就绪度

INFOBOX

项 值
全名 Europe PMC(Europe PubMed Central)
维护方 EMBL-EBI,与 PubMed Central 合作,国际资助方联合体支持
服务版本 REST 6.9(2026-10-23 响应头 version 字段)
总记录数 49,118,306(search?query=* 的 hitCount)
MEDLINE 来源 41,253,787
专利 4,229,296
预印本 1,268,930(34 个预印本服务器)
Agricola 1,026,549
有全文 12,439,494
开放获取 8,352,804
有文本挖掘标注 37,836,422 条文献 → 13 亿条标注 / 42 类概念
可检索字段 143 个(/fields 端点)
许可 逐篇不同(cc by / cc by-nc / cc by-nc-nd / cc by-nd / cc0)
最大的坑 hitCount 是「记录数」不是「论文数」——预印本与期刊版是两条记录、专利是第三条,同一项研究可重复计数

§0 本条目怎么来的、不做什么

我们是谁:千方病案医学编辑部,为中文医学 AI 社区整理可训练数据集的结构化说明。

本条目怎么来的:全部数字取自 Europe PMC 官方 REST API 的实时返回(2026-10-23 15:15–15:20 UTC),查询语句与返回值原文列在附录 A 与附录 B,可逐条复现。总量 49,118,306 来自 search?query=*&pageSize=1 的 hitCount;分源数字来自 SRC:* 前缀查询;覆盖量来自 HAS_* 布尔字段查询。字段字典来自 /fields 端点(143 个可检索项),记录结构来自一条 resultType=core 的完整响应。官方定性描述(34 个预印本服务器、40 余个生物数据库、13 亿条标注 / 42 类概念、122,173 项资助 / 36 家资助方)取自 europepmc.org/About 原文。

我们不做什么:本条目不做任何 benchmark,不评价检索质量或标注准确率,不下载全文语料。§7 的口径核对只解释「为什么官网首页写的数字和 API 返回的数字不一样」,不判定谁对谁错。

已知局限:

  • 所有数字是查询时刻的快照。Europe PMC 每日更新,hitCount 次日即变(2026-10-22 首次观测为 49,111,254,24 小时后为 49,118,306,日增约 7,052 条)。
  • 我们没有抽样核对标注质量。13 亿条标注的精度是官方声明,我们未测。
  • 全文语料我们没有下载。FTP 目录在程序化访问时返回 Cloudflare 挑战页(403),只能从文档描述其结构。

§1 数据集概览

§1.0 📌 30 秒速览

Europe PMC 做的事情,一句话:把生命科学领域散落在期刊、预印本服务器、专利局、农业数据库里的文献汇成一个可检索、可反查、可机器读取的池子,并把每篇文献挂到它背后的数据上。

规模(2026-10-23 实测):

指标 数值 占总量
总记录 49,118,306 100%
MEDLINE(SRC:MED) 41,253,787 84.0%
专利(SRC:PAT) 4,229,296 8.6%
预印本(SRC:PPR) 1,268,930 2.6%
Agricola(SRC:AGR) 1,026,549 2.1%
有全文(HAS_FT:Y) 12,439,494 25.3%
开放获取(OPEN_ACCESS:Y) 8,352,804 17.0%
有摘要(HAS_ABSTRACT:Y) 34,443,646 70.1%
有文本挖掘标注(HAS_TM:Y) 37,836,422 77.0%

三个必须先知道的形状问题:

  1. 49,118,306 是「记录数」,不是「论文数」。 一篇发表在 bioRxiv 后又登上期刊的论文,会在库里留下至少两条记录:一条 SRC:PPR(预印本)、一条 SRC:MED(期刊版)。官方用 HAS_PUBLISHED_VERSION:Y 标出这种配对——共 452,629 条。做去重训练集时,这一层必须显式处理,否则同一项研究会同时出现在 train 和 test 里。
  2. 只有 17.0% 是开放获取,这 17% 里许可还不统一。 有许可标记的 9,792,835 条中,cc by 6,571,562 条(67.1%)、cc by-nc-nd 1,630,225 条(16.6%)、cc by-nc 1,148,570 条(11.7%)、cc0 69,447 条(0.7%)、cc by-nd 23,093 条(0.2%)。「能读」和「能拿来训练」是两件事——NC 与 ND 条款对商用模型和派生作品的限制,必须在上游筛掉。
  3. 77.0% 的文献带文本挖掘标注,但标注不是金标准。 官方称 13 亿条标注覆盖 42 类概念,产出方是多个独立挖掘团队(annotation.provider 字段)。同一段文本被不同 provider 标出不同概念是常态。把它当弱监督信号可以,当 ground truth 不行。

如果你要做文献检索增强、要构造生物医学 NER / RE 训练集、要按资助方溯源、要找某篇论文背后的数据集,Europe PMC 是公开渠道里覆盖最全的一个;如果你只要纯净的开放全文语料做预训练,PMC OA Subset(本站 #360)比它更合适——那一个是按许可筛过的确定子集,这一个是「什么都有、许可逐篇不同」的聚合池。

§1.1 技术摘要

维度 值
总记录 49,118,306
有全文 12,439,494(25.3%)
开放获取 8,352,804(17.0%)
有摘要 34,443,646(70.1%)
预印本 1,268,930(34 个服务器)
专利 4,229,296
文本挖掘标注 13 亿条 / 42 类概念 / 覆盖 3,783 万条文献
生物数据库交叉链接 40 余个
可检索字段 143
资助记录 122,173 项 / 36 家资助方(+ 18,980 项 COVID-19 专项)
接口 REST(JSON / XML / Dublin Core)+ FTP 批量 + OAI
服务版本 6.9

§1.2 战略价值

Europe PMC 在中文医学 AI 语境里的位置,不是「又一个文献库」,而是三条别处买不到的通路:

通路一:按资助方反查。 GRANT_AGENCY 是一个可检索字段,我们实测:Wellcome Trust 219,369 篇、NIH 358,115 篇、European Commission 45,346 篇、中国国家自然科学基金 1,150,423 篇、UKRI 6,693 篇。这意味着可以构造出「某个基金资助的全部产出」这样的切片——用于研究影响力评估、用于构造「同资助方」的领域内负样本、用于追踪某个机构的研究转向。PubMed 没有这个入口。

通路二:文献 → 数据的硬链接。 官方称与 40 余个生物数据库建立交叉链接,实测 HAS_DATA:Y 8,045,183 条(16.4%)、HAS_XREFS:Y 1,035,850 条。细分为 HAS_UNIPROT 179,857、HAS_PDB 43,770、HAS_OMIM 146,408、HAS_CHEBI 128,453、HAS_CHEMBL 86,101、HAS_INTERPRO 99,162、HAS_INTACT 24,090、HAS_PRIDE 20,058、HAS_EMBL 495,791。这是「论文说了什么 → 数据在哪」这条链上唯一免费的自动化入口,对构造「论文-数据集配对」任务至关重要。

通路三:预印本与期刊版的对齐。 HAS_PUBLISHED_VERSION:Y 452,629 条、HAS_PREPRINT:Y 442,403 条。这两个字段让我们可以精确构造「同一研究在预印本阶段与发表阶段表述差异」的数据集——这是研究科学传播漂移(结论是否被弱化、样本量是否变化、显著性是否翻转)的天然素材,而且只有聚合层才有,任何单一来源都拿不到。

§1.3 同类资源横向对比

维度 Europe PMC PubMed / MEDLINE PMC OA Subset S2ORC OpenAlex
总量 4,911 万记录 ~3,800 万(仅 MEDLINE) ~450 万篇全文 ~1,200 万全文 ~2.5 亿作品
含预印本 ✅ 127 万(34 服务器) ❌ 部分 部分 ✅
含专利 ✅ 423 万 ❌ ❌ ❌ 部分
全文可检索 ✅ 1,244 万 ❌ 仅摘要 ✅ ✅ ❌
资助方反查 ✅ 143 字段之一 ❌ ❌ ❌ 部分
文本挖掘标注 ✅ 13 亿条 仅 PubTator 子集 ❌ ❌ ❌
生物数据库交叉链接 ✅ 40 余个 部分 ❌ ❌ 部分
开放许可逐篇标注 ✅ license 字段 ❌ ✅(子集已筛) 部分 部分
中文界面对接 ❌ ❌ ❌ ❌ ❌

这张表要看懂的是:Europe PMC 与 PMC OA Subset 不是「大和小」的关系,是**「聚合池」与「已筛子集」的关系。做预训练要后者,做检索增强与元数据研究要前者。与 OpenAlex 的差别在于:OpenAlex 量级大一个数量级(2.5 亿),但没有全文、没有标注、没有生物数据库交叉链接**——它擅长的是引文网络与机构消歧,不是内容。

§1.4 版本时间轴

时间 事件
2006 UKPMC 上线,由 Wellcome Trust 资助,作为 PubMed Central 的英国镜像
2011 更名 Europe PMC,资助方扩展为欧洲多国联合体
2013 迁至 EMBL-EBI 托管
2018-04 接入 Unpaywall,全文不可得时提供合法免费副本链接
2019 引入预印本收录(bioRxiv / medRxiv 起步)
2020 COVID-19 预印本全文计划;LitCovid 联动;「Europe PMC in 2020」综述(PMID 33180112)
2021 Annotations API 开放,SciLite 标注体系对外
2023 预印本服务器扩至 30+;Grants API 覆盖 36 家资助方
2024 Smart Citation、预印本-期刊版自动配对
2026-10 REST 6.9;4,911 万记录 / 1,244 万全文 / 13 亿标注(本条目实测)

版本机制的关键点:Europe PMC 没有「release」概念——不像 Rfam 有 15.1、GENCODE 有 v47。它是日更流水:hitCount 每天都在变,firstIndexDate 字段记录每条进入库的时间。这意味着任何写进论文的数字都必须带抓取日期,否则三个月后无法复现。

§1.5 典型应用场景

场景 用什么 关键字段
生物医学 NER / RE 训练集构造 Annotations API annotation.type / exact / prefix / postfix
检索增强生成(RAG)语料 全文 FTP(PMC 子集) fullTextIdList → PMC XML
资助方产出分析 GRANT_AGENCY 查询 grantsList / grantId
论文-数据集配对 HAS_DATA + HAS_XREFS dataLinksTagsList / dbCrossReferenceList
预印本-发表版差异研究 HAS_PUBLISHED_VERSION commentCorrectionList 中的 preprint 关系
开放许可合规筛查 license 字段 cc by / cc by-nc / cc by-nc-nd
临床试验证据合成 PUB_TYPE:"clinical trial" + SRC:CTX pubTypeList / subsetList
机构/作者消歧 ORCID + ROR 集成 authorIdList(ORCID 类型)/ affiliation

§2 文献聚合层的科学前提

§2.1 「一条记录」到底是什么

Europe PMC 的主键不是 DOI、不是 PMID,而是 source + id 二元组。这是整个数据模型的地基,也是最容易被误用的地方。

八个 source 代码,覆盖范围完全不同:

source 含义 实测条数 主键形态 有全文
MED MEDLINE 书目记录 41,253,787 PMID(纯数字) 少数(需 PMC 侧)
PMC PubMed Central 全文 1,013,126 PMCID(数字,不带 PMC 前缀) ✅
PPR 预印本 1,268,930 PPR 编号 部分
PAT 专利 4,229,296 专利号 ❌
AGR Agricola 农业文献 1,026,549 AGR 编号 ❌
CTX 引用记录(Citation Exchange) 3,922 CTX 编号 ❌
ETH 伦理文献 176,799 ETH 编号 ❌
HIR 历史文献 2,868 HIR 编号 ❌

这里有一个高频误判:很多人以为 SRC:PMC 是「PMC 全文的条数」,看到 1,013,126 就以为 PMC 只有一百万篇。实际是——大多数有全文的 MEDLINE 记录,其 source 仍然是 MED,只是 pmcid 字段有值、inEPMC 为 Y。真正以 SRC:PMC 为主记录的,是那些只在 PMC 出现、不在 MEDLINE 索引的条目(如部分会议论文、非英文期刊)。判「有没有全文」要查 HAS_FT:Y(12,439,494)或 inEPMC,不是查 SRC:PMC。

source 与 id 的组合决定了怎么取全文:

  • MED + PMID → 走 https://www.ebi.ac.uk/europepmc/webservices/rest/MED/{pmid}/fullTextXML,若无全文返回 404
  • PMC + 数字 → 走 https://www.ebi.ac.uk/europepmc/webservices/rest/PMC/{pmcid}/fullTextXML
  • PPR + PPR号 → 走同一端点,但只有部分预印本有 XML

§2.2 为什么全文可检索是分水岭

Europe PMC 与 PubMed 最大的功能差别,不是收录量,是**「摘要可检索」与「全文可检索」**。

PubMed 的检索范围基本是标题、摘要、MeSH、作者、期刊。Europe PMC 把范围扩到了全文正文——官方原文是「searches both abstracts and full text of over articles」,并可限定到具体章节:METHODS、RESULTS、INTRO、DISCUSS、CONCL、FIG、TABLE、SUPPL、BACK、APPENDIX、CASE、OTHER。

这个能力的实际意义,用一个例子说明:想找「用了 Cox 比例风险模型且报告了 hazard ratio 的队列研究」,在 PubMed 里只能靠 MeSH 词加摘要里的关键词,召回率低;在 Europe PMC 里可以直接写 METHODS:"Cox proportional hazards" AND RESULTS:"hazard ratio",命中率完全不同。

代价是全文可检索范围只有 1,244 万条(HAS_FT:Y),占总量 25.3%。剩下 74.7% 的记录,仍然只有摘要或只有书目——所以检索策略必须随文献的可得性分层,不能假设「库里有的都能全文搜」。

§2.3 三层可得性:摘要 / 全文 / 开放获取

这三个概念在 Europe PMC 里是三个独立布尔字段,互不蕴含,必须分开理解:

层级 字段 实测条数 占比 能做什么
有摘要 HAS_ABSTRACT:Y 34,443,646 70.1% 阅读理解、摘要级 NLP
有全文 HAS_FT:Y 12,439,494 25.3% 全文检索、结构化抽取、章节标注
开放获取 OPEN_ACCESS:Y 8,352,804 17.0% 站内阅读 + 可能可再分发
有 PDF HAS_PDF:Y 12,188,224 24.8% 版面分析、图表抽取
有补充材料 HAS_SUPPL:Y 3,875,038 7.9% 附表、补充图

四层之间的差值不是随机的,是有系统的:

  • 有全文但没 PDF:12,439,494 − 12,188,224 = 251,270 条。这些是仅有 XML/HTML 没有 PDF 版本的(多为纯电子刊、部分预印本)。
  • 有全文但不开放:12,439,494 − 8,352,804 = 4,086,690 条。这些能在 Europe PMC 站内读(或跳转到出版商),但不能批量下载、不能用于训练。这是最大的陷阱区。
  • 开放获取里有许可的:LICENSE:* 命中 9,792,835,比 OPEN_ACCESS:Y 的 8,352,804 还多 144 万。原因是部分文献有许可标记但 Europe PMC 侧没有全文(如仅链接到出版商 OA 页面)。不能反过来推「有许可 = 能下载」。

§2.4 文本挖掘标注的层级

标注体系(SciLite + Annotations API)在数据模型上有四个层次,从上到下:

  1. 概念类型(annotation.type):官方称 42 类。从实测响应看,常见的有 COVoc(COVID-19 词表)、Gene_Proteins、Chemicals、Diseases、Organisms、Cell_Lines、Accession_Numbers。
  2. 标注提供方(annotation.provider):如「HES-SO / SIB Text Mining for Elixir」。这是精度差异的主要来源——不同 provider 用不同模型、不同词典、不同阈值。
  3. 命中的章节(annotation.section):用 SIO 本体 URI 表示,如 SIO_001029(Article)。可细到方法、结果、图注。
  4. 命中串与上下文(exact / prefix / postfix):可直接还原成带窗口的训练实例,不必回原文定位。

一个真实的响应片段(PMID 33180112,「Europe PMC in 2020」这篇综述本身),同一处 COVID-19 被标了两次:

[{"source":"MED","extId":"33180112","pmcid":"PMC7778976",
  "annotations":[
    {"exact":"COVID-19","prefix":"","postfix":"9 preprints indexed ",
     "tags":[{"name":"COVID-19","uri":"http://purl.obolibrary.org/obo/MONDO_0100096"}],
     "type":"COVoc","section":"Article (...SIO_001029)","provider":"HES-SO / SIB ..."},
    {"exact":"COVID-19","prefix":"","postfix":"9 preprints indexed ",
     "tags":[{"name":"COVID-19","uri":"http://purl.obolibrary.org/obo/NCBITaxon_2697049"}],
     "type":"COVoc","section":"Article (...SIO_001029)","provider":"HES-SO / SIB ..."}
  ]}]

注意这两条的差别只在 tags[].uri:一条指 MONDO_0100096(疾病本体里的「COVID-19 疾病」),一条指 NCBITaxon_2697049(物种本体里的「SARS-CoV-2 病毒」)。同一个字符串,语义空间里是两个不同实体。这正是「13 亿条标注不能当金标准」的具体含义——它给的是候选解释,不是唯一答案。

§2.5 为什么聚合层对医学 AI 重要

单库做训练集的时代基本过去了。原因不是数据不够多,是单库的形状不够复杂:

  • PubMed 只有出版后文献 → 无法研究预印本阶段的表述
  • PMC OA 只有开放许可全文 → 无法研究非开放文献的选题分布
  • 专利库只有专利 → 无法研究专利与论文的时间差
  • 预印本服务器只有自己的预印本 → 无法做跨服务器对比

Europe PMC 的价值在于它同时持有这些形状,并且用 source 字段把它们区分开。这意味着可以在同一个检索式、同一套字段、同一个 API 下做交叉研究:比较 SRC:PPR 与 SRC:MED 的同一主题产出节奏、比较 SRC:PAT 与 SRC:MED 的技术转化滞后、比较 34 个预印本服务器的主题偏好。

这也是它的风险所在:形状越复杂,去重与泄漏控制越难。§5 会专门讲这个。

§2.6 Europe PMC 保证什么、不保证什么

保证 不保证
MEDLINE 书目与 NLM 同步(每日) 收录完整——很多非英文期刊、会议论文不在内
每条记录有稳定的 source + id 同一研究只有一条记录
开放获取文献标注了许可短名 许可短名对应到完整法律条款——NC/ND 的具体边界需回原文
文本挖掘标注可追溯到 provider 标注正确
与 40 余个数据库的交叉链接 链接完整——只在能识别 accession 号时建立
资助信息来自资助方提交 资助信息完整——未提交的基金查不到
REST API 稳定可用、有版本号 有 SLA——官方未承诺可用性指标

最后一条要划重点:Europe PMC 的 API 是免费公开的,但没有正式的 SLA 承诺。我们在实测中遇到过 pageSize 上限、cursorMark 失效、FTP 页面被 Cloudflare 拦截三类问题(详见 §6.5)。生产系统必须做重试与降级,不能假设它像商业 API 一样稳定。


§3 数据规格与通道抉择

§3.0 四条通道

通道 端点 适合 单次上限 坑
Articles REST /europepmc/webservices/rest/search 检索、元数据、按条件切片 pageSize ≤ 1,000 深分页必须用 cursorMark,page 参数超 10,000 条即失效
Annotations REST /europepmc/annotations_api/annotationsByArticleIds 取某几篇文章的全部标注 一次可传多个 ID 返回是数组不是对象,空结果返回 [] 不是 {}
FTP 批量 europepmc.org/ftp/* 全量语料、离线训练 按批次卷 程序化访问被 Cloudflare 挑战拦截(403)
OAI-PMH /oai 增量同步、元数据收割 按 from/until 分批 只有元数据,无全文

选哪个,取决于你要的是「几条」还是「几百万条」:

  • 少于 1 万条:Articles REST + cursorMark
  • 10 万条量级:Articles REST 分片(按 PUB_YEAR 或 SRC 切),每片独立跑
  • 全量元数据:FTP 的 pmclitemetadata/(每周更新)
  • 全量全文:FTP 的 openaccess/(需人工浏览器下载或带浏览器指纹的客户端)

§3.1 字段地图

官方 /fields 端点返回 143 个可检索项,按用途分七组:

组 代表字段 说明
标识 EXT_ID / PMCID / DOI / ISBN / ISSN / EPMC_AUTH_MAN 跨库对齐的锚点
书目 TITLE / ABSTRACT / AUTH / JOURNAL / PUB_YEAR / VOLUME / ISSUE / LANG 常规检索
来源与类型 SRC / PUB_TYPE / LICENSE / PUBLISHER 切片与合规筛
可得性布尔 HAS_FT / OPEN_ACCESS / HAS_PDF / HAS_ABSTRACT / HAS_SUPPL / IN_PMC / IN_EPMC 全部 Y/N
交叉引用布尔 HAS_UNIPROT / HAS_PDB / HAS_CHEBI / HAS_CHEMBL / HAS_OMIM / HAS_INTERPRO / HAS_INTACT / HAS_PRIDE / HAS_EMBL / HAS_XREFS 逐库标记
标注与语义 HAS_TM / ANNOTATION_TYPE / ANNOTATION_PROVIDER / GENE_PROTEIN / CHEM / DISEASE / ORGANISM / ACCESSION_ID 文本挖掘侧
章节限定 METHODS / RESULTS / INTRO / DISCUSS / CONCL / FIG / TABLE / SUPPL / BACK / APPENDIX / CASE / OTHER / BODY 只有对 HAS_FT:Y 的文献有效
资助 GRANT_AGENCY / GRANT_ID / ACK_FUND / FUNDER_INITIATIVE 按钱反查
时间 PUB_YEAR / FIRST_PDATE / FIRST_IDATE / CREATION_DATE / UPDATE_DATE / EMBARGO_DATE 六个不同含义的日期,见 §6.5 坑点 4

§3.2 下载预算

元数据(lite,每条约 1 KB):

量级 条数 估算体积 耗时(实测速率)
单主题切片 10 万 ~100 MB 约 10 分钟(1,000 条/页 × 100 页)
年度切片 180 万 ~1.8 GB 约 3 小时
全量 lite 4,911 万 ~49 GB 走 FTP,不走 API

全文元数据(core,每条约 3–8 KB):

量级 条数 估算体积
单主题切片 10 万 ~500 MB
有全文的子集 1,244 万 ~60 GB

全文 XML(每篇 20–200 KB):

量级 篇数 估算体积
开放获取子集 835 万 TB 级(官方未给准确体积)

实测速率参考:我们在 2026-10-23 用 100 条/页抓 300 条 lite,平均每页 1.2 秒,折算约 80 条/秒。这是单并发的情况,官方文档建议不要超过每秒 10 次请求——所以我们实际是超速的(因为只跑了 3 页)。生产环境请自觉限速。

§3.3 增量同步机制

Europe PMC 用的是时间戳增量,不是版本号:

  • CREATION_DATE:记录首次进入库的日期
  • UPDATE_DATE:记录最后修改的日期
  • FIRST_IDATE:首次索引日期(可精确到日)
  • INDEX_DATE:当前索引日期

增量抓取的正确写法是每天跑一次 UPDATE_DATE:[昨天 TO 今天],而不是 CREATION_DATE——因为已有记录会因补充摘要、修 DOI、加标注而更新,只抓新建的会漏掉这些修正。

但这里有个反直觉的事实:UPDATE_DATE 的变更频率极高。原因是文本挖掘标注是持续重跑的——某条 2015 年的论文,可能因为 2026 年新训练的挖掘模型重新标注而被 touch 一次。所以 UPDATE_DATE 增量会捕获大量「元数据没变、只有标注变了」的记录。如果只要书目,用 CREATION_DATE;如果要标注,才用 UPDATE_DATE。

§3.4 技术栈与溯源链

层 用什么
前置 Cloudflare(官网与 FTP 页面)/ 无 CDN(API 端点直连 EBI)
检索层 自研分布式检索引擎(官方未公开细节)
存储 官方未公开
编号 source + id;跨源合并靠 PMID / PMCID / DOI 三件套
标注 SciLite 体系 + 外部 provider 提交(Annotations Submission System)
全文 PMC XML(JATS 变体)+ 出版商直供
分发 REST(JSON / XML / Dublin Core)+ FTP + OAI-PMH

溯源链的完整性判断:一条数据要能被复现,需要四件事——(1) 抓取日期、(2) 查询语句、(3) resultType 参数、(4) 服务版本(version 字段,当前 6.9)。缺任何一项,三个月后数字必然对不上。 本条目所有查询都在附录 B 给出,可逐条复跑。


§4 记录结构与字段字典

§4.1 一条记录的结构

resultType 有三档,返回的字段数量差一个数量级:

档位 关键字段 单条体积 适用
idlist 仅 id / source ~50 B 只要 ID 列表
lite 20 个左右书目字段 ~1 KB 批量元数据
core 40+ 字段,含摘要、MeSH、资助、全文链接、交叉引用 3–8 KB 单篇深读

core 档的完整字段清单(实测一条 Nature 论文 DOI 10.1038/s41586-020-2649-2 的响应):

abstractText, affiliation, authMan, authorIdList, authorList, authorString,
citedByCount, dataLinksTagsList, dateOfCompletion, dateOfCreation, dateOfRevision,
doi, electronicPublicationDate, epmcAuthMan, firstIndexDate, firstPublicationDate,
fullTextIdList, fullTextReceivedDate, fullTextUrlList, hasBook, hasData,
hasDbCrossReferences, hasEvaluations, hasLabsLinks, hasPDF, hasReferences,
hasSuppl, hasTMAccessionNumbers, hasTextMinedTerms, id, inEPMC, inPMC,
isOpenAccess, journalInfo, language, license, meshHeadingList, nihAuthMan,
pageInfo, pmcid, pmid, pubModel, pubTypeList, pubYear, publicationStatus,
source, subsetList, title, tmAccessionTypeList

注意这里面有 12 个 has* 布尔字段:hasBook / hasData / hasDbCrossReferences / hasEvaluations / hasLabsLinks / hasPDF / hasReferences / hasSuppl / hasTMAccessionNumbers / hasTextMinedTerms。它们是独立的,不是层级关系。
hasData:Y 不蕴含 hasDbCrossReferences:Y(前者指「论文背后有数据」,后者指「与具体数据库条目建立了链接」)。

§4.2 fullTextUrlList:一处多源的结构

同一篇论文的全文链接可能来自多个站点,每条带两个关键码:

字段 取值 含义
availabilityCode OA 开放获取,可直接下载
S Subscription,需订阅
F Free,免费但非开放许可(如出版商限时免费)
documentStyle pdf / html / doi / manuscript 文档形态
site Europe_PMC / DOI / Publisher / PMC 来源站点

实测例子(同一篇 Nature 论文):

{"fullTextUrl":[
 {"availability":"Subscription required","availabilityCode":"S",
  "documentStyle":"doi","site":"DOI","url":"https://doi.org/10.1038/s41586-020-2649-2"},
 {"availability":"Open access","availabilityCode":"OA",
  "documentStyle":"html","site":"Europe_PMC","url":"https://europepmc.org/articles/PMC7759461"},
 {"availability":"Open access","availabilityCode":"OA",
  "documentStyle":"pdf","site":"Europe_PMC","url":"https://europepmc.org/articles/PMC7759461?pdf=render"}
]}

这里有个反常识的点:同一条记录的 DOI 链接标 S(需订阅),Europe PMC 链接标 OA(开放获取)。原因是出版商官网要订阅,但 PMC 侧有作者接受稿(author manuscript)。所以不能用 DOI 链接的可得性判断整条记录的可得性——必须逐条看 availabilityCode。

§4.3 许可字段的真实分布

license 字段只有五个取值(实测穷举):

取值 条数 占比(在有许可的 979 万条中) 可用于商业训练
cc by 6,571,562 67.1% ✅ 可以(需署名)
cc by-nc-nd 1,630,225 16.6% ❌ 禁止商用 + 禁止派生
cc by-nc 1,148,570 11.7% ❌ 禁止商用
cc0 69,447 0.7% ✅ 无条件
cc by-nd 23,093 0.2% ⚠️ 可商用但禁止派生

「有许可标记」的总数是 9,792,835,比 OPEN_ACCESS:Y 的 8,352,804 多 1,440,031 条。 这个差值的来源是:部分文献有许可信息(从出版商元数据继承),但 Europe PMC 侧没有全文可下载。「有 cc by 标记」不等于「这里能下到全文」。

实操建议:做训练语料时,筛选条件应该写成 OPEN_ACCESS:Y AND LICENSE:"cc by"(8,352,804 与 6,571,562 的交集),而不是只看其中任一。若要含 cc0,再加上 OR LICENSE:"cc0"。

§4.4 时间字段:六个日期,六种含义

这是 Europe PMC 最容易踩的字段陷阱。resultType=core 的响应里有六个日期:

字段 含义 会不会变 典型用途
firstPublicationDate 首次出版日期(含预印本首次上线) 不变 时间序列分析
electronicPublicationDate 电子版上线日期 不变 抢发分析
firstIndexDate 首次进入 Europe PMC 的日期 不变 入库延迟分析
dateOfCreation 记录创建日期 不变 数据新鲜度
dateOfRevision 记录最后修订日期 会变 增量同步
fullTextReceivedDate 全文入库日期 不变 全文可得性滞后分析

关键事实:firstPublicationDate 与 firstIndexDate 可以相差数年。我们在 query=* 的第一条结果里就看到:pubYear: 2028、firstPublicationDate: 2028-09-14、firstIndexDate: 2026-10-02——一篇标着 2028 年出版的论文,2026 年 10 月就进了库(这是提前上线的电子预出版)。反过来,回溯录入的 1950 年代老文献,firstPublicationDate 是 1950 年代,firstIndexDate 是 2010 年代。

所以:做时间序列必须用 firstPublicationDate,做数据新鲜度必须用 firstIndexDate,二者混用会得出错误结论。

§4.5 subsetList:期刊的分区标签

subsetList 用代码声明该文献属于哪个 NLM 子集:

代码 名称 含义
IM Index Medicus MEDLINE 核心索引
PubMed — 在 PubMed 可检索
PMC — 在 PMC 有全文
AGR — 农业子集
ETH — 伦理子集
HIR — 历史子集

一个易错点:subsetList 里出现 IM 不代表这条记录只有 MEDLINE 侧内容,也不代表它一定在 PubMed 里能被搜到(部分记录因撤回、重复等原因被从 PubMed 移除但保留在 Europe PMC)。判断「在不在 PubMed」应该查 pmid 字段是否有值。

§4.6 一个容易忽略的事实:source 与 id 的耦合

id 的含义完全取决于 source。同一个数字字符串,在 MED 下是 PMID,在 PMC 下是 PMCID 数字部分,在 PAT 下可能是专利号片段。

因此所有的取数代码都必须是这种形状:

# 正确:先看 source 再决定怎么拼 URL
if rec["source"] == "MED":
    url = f"https://www.ebi.ac.uk/europepmc/webservices/rest/MED/{rec['id']}/fullTextXML"
elif rec["source"] == "PMC":
    url = f"https://www.ebi.ac.uk/europepmc/webservices/rest/PMC/{rec['id']}/fullTextXML"
elif rec["source"] == "PPR":
    url = f"https://www.ebi.ac.uk/europepmc/webservices/rest/PPR/{rec['id']}/fullTextXML"
else:
    continue  # PAT / AGR / CTX / ETH / HIR 无全文端点
# 错误:把 id 当 PMID 用
url = f".../MED/{rec['id']}/fullTextXML"   # SRC:PMC 的记录会 404

还有一个细节:PMC 来源的 id 不带 PMC 前缀(是 7759461 不是 PMC7759461),但 pmcid 字段带前缀(PMC7759461)。两者不能混。用 pmcid 拼 URL 会得到 404。


§5 检索、抽样与泄漏分析

§5.0 四条可用的检索范式

范式一:布尔 + 字段限定

(TITLE:"large language model" OR ABSTRACT:"large language model")
AND (SRC:MED OR SRC:PPR)
AND PUB_YEAR:[2023 TO 2026]
AND HAS_ABSTRACT:Y

范式二:按可得性切片

HAS_FT:Y AND OPEN_ACCESS:Y AND LICENSE:"cc by"

得到 835 万 × 671 万里可商用的那一块。

范式三:按资助方反查

GRANT_AGENCY:"National Natural Science Foundation of China"
AND PUB_YEAR:2025
AND HAS_DATA:Y

范式四:按交叉数据库反查

HAS_PRIDE:Y AND PUB_YEAR:[2024 TO 2026]

拿到近两年、背后有蛋白质组学数据的论文——这是构造「论文 → PRIDE 数据集」配对的入口。

四个范式可以任意组合,但要注意:每加一个 HAS_* 布尔,召回率都会断崖式下降。HAS_PRIDE:Y 只有 20,058 条,加上年份限制可能只剩几千。设计检索式时应先看单条件的 hitCount,再决定组合。

§5.1 抽样策略:按 source 分层,不按时间

Europe PMC 的分布极度偏斜(MED 占 84%),随机抽样会被 MEDLINE 淹没。正确的抽样是按 source 分层:

层 总量 建议抽样
MED 41,253,787 按需取 1–5%(40 万–200 万)
PAT 4,229,296 全取或取 10%(40 万)
PPR 1,268,930 全取(量不大,且是稀缺资源)
AGR 1,026,549 全取或取 20%
其他(CTX/ETH/HIR) 183,589 全取

预印本建议全取的理由:127 万条不大,但它是唯一能拿到「正式发表前版本」的公开来源。这类数据在训练集里一旦被筛掉,就再也补不回来了。

按年份抽样的陷阱:PUB_YEAR 在 SRC:PAT 上永远返回 0(见 §6.5 坑点 3)。所以不能用统一的年份切片策略处理所有 source,必须分源处理。

§5.1.1 什么时候不该用 Europe PMC

四条越界,写清楚免得误用:

  1. 要「纯净开放全文语料做预训练」 → 用 PMC OA Subset(本站 #360)。Europe PMC 的开放率只有 17%,且许可混杂,筛完你会发现可用量比 PMC OA Subset 还少。
  2. 要「引文网络做影响力分析」 → 用 OpenAlex 或 Semantic Scholar。Europe PMC 的 citedByCount 口径窄(只统计库内引用),且不提供完整的 reference 列表结构。
  3. 要「临床试验结构化结果」 → 用 AACT(本站已有)。Europe PMC 的 SRC:CTX 只有 3,922 条引用记录,不是试验结果库。
  4. 要「专利全文做技术挖掘」 → Europe PMC 的 423 万专利只有书目级元数据,无全文。要去 Google Patents 或 EPO OPS。

§5.2 四类真实泄漏,按危害排序

泄漏一:预印本-期刊版重复(危害最大)

同一项研究在 SRC:PPR 与 SRC:MED 各有一条记录。如果随机切分,同一研究极可能同时落在 train 与 test。

  • 规模:HAS_PUBLISHED_VERSION:Y 452,629 条预印本已配对到期刊版
  • 检测:查 commentCorrectionList 里的 preprint 关系;或按标题归一化后做模糊匹配
  • 处理:按研究分组切分(group split),不按记录切分

泄漏二:资助方聚集(危害中高)

同一基金的系列论文往往方法相似、数据同源。若按记录随机切分,同基金的论文会跨集。

  • 规模:单一基金最多 115 万篇(NSFC)
  • 检测:grantsList[].grantId
  • 处理:按 grantId 分组切分

泄漏三:同一作者团队(危害中)

高产的通讯作者团队方法趋同。authorIdList 里的 ORCID 是可靠的锚点。

  • 检测:authorIdList[].authorId[@type="ORCID"]
  • 处理:按通讯作者 ORCID 分组

泄漏四:期刊主题聚集(危害低但普遍)

同一期刊的论文在选题与写作风格上高度相似,尤其是综述型期刊。

  • 检测:journalInfo.journal.issn
  • 处理:不要按期刊切分(会造成分布偏移),但要在 test 集里检查期刊分布是否与 train 一致

§5.3 结构泄漏:从元数据本身推断出的信息

有一类泄漏不在文本里,在字段结构里:

  • pubYear 与 firstPublicationDate 不一致:如果任务是从摘要预测年份,这两个字段直接泄漏答案。
  • hasReferences / hasSuppl / hasPDF:这些布尔在某种程度上与「文献类型」相关(综述多有 references、临床试验多有 suppl)。若任务是预测文献类型,这些字段必须剔除。
  • citedByCount:如果任务涉及「重要性」判断,被引数本身就是标签的代理。
  • subsetList:IM 标记几乎等价于「高质量期刊」,会泄漏质量标签。
  • fullTextReceivedDate:与「是否 OA」强相关,做 OA 预测任务时必须剔除。

判断标准很简单:这个字段在论文发表之前是否可知? 不可知的字段一律不能进特征。

§5.4 一个不该做的划分:按 SRC 切

看起来最合理的划分——「用 MEDLINE 训练,用预印本测试」——实际是最糟的。

原因是分布偏移太大:预印本的平均长度、结构完整度、引用密度、方法描述详细度,都与期刊版有系统差异。用 MEDLINE 训练、预印本测试,测出来的不是模型能力,是域适应能力,而且这个数字无法与其他研究比较。

正确做法:在同一 source 内随机切分(配合 §5.2 的分组),把「跨源泛化」作为单独的评测维度报出来,而不是混在主线指标里。


§6 AI 就绪指南

§6.1 最小可用 Pipeline

import time, json, urllib.parse, urllib.request

BASE = "https://www.ebi.ac.uk/europepmc/webservices/rest/search"

def epmc_search(query, result_type="lite", cap=50000, sleep=0.12):
    """游标分页 + 限速抓取。返回记录列表。"""
    out, cursor, fetched = [], "*", 0
    while True:
        params = {
            "query": query, "format": "json",
            "resultType": result_type, "pageSize": 1000,
            "cursorMark": cursor,
        }
        url = BASE + "?" + urllib.parse.urlencode(params)
        for attempt in range(4):                    # 指数退避
            try:
                with urllib.request.urlopen(url, timeout=60) as r:
                    d = json.load(r)
                break
            except Exception as e:
                if attempt == 3:
                    raise
                time.sleep(2 ** attempt)
        batch = d.get("resultList", {}).get("result", [])
        if not batch:
            break
        out.extend(batch)
        fetched += len(batch)
        cursor = d.get("nextCursorMark")
        if not cursor or fetched >= cap:
            break
        time.sleep(sleep)                          # 官方建议 ≤10 req/s
    return out

# 示例:抓 2025 年有全文的开放获取 cc by 论文
recs = epmc_search(
    'PUB_YEAR:2025 AND HAS_FT:Y AND OPEN_ACCESS:Y AND LICENSE:"cc by"',
    result_type="core", cap=20000,
)
print(len(recs), recs[0]["title"][:80])

三个必须加的东西:

  1. cursorMark 而不是 page。page 参数在超过 10,000 条后返回错误或重复。
  2. 每次翻页都要把上一页的 nextCursorMark 原样传回。它是 base64 编码的游标,不要尝试解码或构造。
  3. sleep(0.12)。官方建议不超过 10 请求/秒,0.12 秒约 8.3 请求/秒,留余量。

§6.2 构建训练样本

任务 A:命名实体识别(NER)

用 Annotations API 拿标注,转成 BIO 标签序列:

import urllib.request, json
ANN = "https://www.ebi.ac.uk/europepmc/annotations_api/annotationsByArticleIds"

def get_annotations(ids, ann_type=None):
    q = "articleIds=" + ",".join(ids) + "&format=JSON"
    if ann_type:
        q += "&type=" + ann_type
    with urllib.request.urlopen(f"{ANN}?{q}", timeout=60) as r:
        return json.load(r)

def to_bio(text, anns):
    """把 exact + prefix/postfix 还原成 BIO 序列(简化版,按字符位置对齐)。"""
    spans = []
    for a in anns:
        # 用 prefix + exact + postfix 在 text 里定位;同名多次出现需逐个匹配
        pat = a.get("prefix","") + a["exact"] + a.get("postfix","")
        i = text.find(pat)
        if i < 0:
            continue
        s = i + len(a.get("prefix",""))
        spans.append((s, s + len(a["exact"]), a["type"]))
    # ... 按 spans 生成 tags,重叠时保留长度最长者
    return spans

关键提醒:exact + prefix + postfix 拼起来不一定是原文的连续子串——官方可能对空白做了归一化。所以定位失败时要回退到「在 prefix 之后、postfix 之前找 exact」的两段式搜索。

任务 B:论文-数据集配对

用 HAS_DATA 与交叉引用布尔筛候选,再从 fullTextXML 里抽 accession 号:

cands = epmc_search(
    'HAS_PRIDE:Y AND PUB_YEAR:[2024 TO 2026]', result_type="core", cap=5000)
# 每条记录再取 fullTextXML,用正则找 PXD\d{6}

任务 C:预印本-发表版差异

pairs = epmc_search('HAS_PUBLISHED_VERSION:Y AND SRC:PPR',
                    result_type="core", cap=50000)
# 每条 PPR 记录的 commentCorrectionList 里找 type=="Preprint" 的对应 MED 记录

§6.3 评价指标

任务 主指标 辅助 注意
NER 实体级 F1(严格边界) 宽松 F1(部分匹配) 必须报宽松 F1——标注边界本身有歧义
检索 Recall@K / nDCG@10 MRR 用人工标注的 query 集,别用 hitCount 当 ground truth
论文-数据配对 Precision@1 / Recall@10 MRR 假阴性极多(很多论文有数据但没建链接)
预印本差异检测 人工评估为主 BLEU / BERTScore(仅参考) 语义漂移不是字符串相似度能测的

一个必须说清的点:Europe PMC 的 citedByCount 不能当评价指标。它的口径是「库内引用」,与 Google Scholar、Scopus、WoS 都有显著差异,且不提供引用它的具体文献列表结构(只有 hasReferences 布尔)。做引文分析必须换源。

§6.4 MLOps:怎么钉住版本

Europe PMC 没有 release 号,只有 REST 服务版本(当前 6.9)。这意味着钉版本只能靠四件事的组合:

# 实验记录模板
dataset: europe-pmc
service_version: "6.9"                    # 响应头 version 字段
snapshot_date: "2026-10-23"               # 抓取日期(UTC)
total_hitcount: 49118306                  # 当日 hitCount,用于校验
queries:
  - "PUB_YEAR:2025 AND HAS_FT:Y AND OPEN_ACCESS:Y AND LICENSE:\"cc by\""
  - "HAS_PRIDE:Y AND PUB_YEAR:[2024 TO 2026]"
record_counts: [1948210, 4217]            # 每个 query 的实际抓取条数
checksum: "sha256:..."                    # 数据文件校验和

为什么 total_hitcount 是必需的:如果三个月后有人用同样的 query 复现,hitCount 已经变了。把这个数写进实验记录,才能说清「差异是数据更新造成的,还是代码变了」。

更强的做法:把抓到的每条记录的 (source, id, dateOfRevision) 三件套存成清单文件。这样即使数据更新,也能精确重建当时的快照。

§6.5 八个真实坑点

坑点 1:page 参数深分页失效

  • 症状:page=11&pageSize=1000 返回错误或与 page=1 相同的记录。
  • 原因:深分页代价过高,官方限制 page × pageSize 不能超过 10,000。
  • 解法:改用 cursorMark,第一页传 cursorMark=*,后续传回上一页的 nextCursorMark。注意 cursorMark 与 sort 参数互斥——用了游标就不能自定义排序。
  • 参考:官方 REST 文档「Paging」章节。

坑点 2:SRC:PMC 的 id 不带前缀,但 pmcid 带前缀

  • 症状:用 pmcid 字段拼 /PMC/PMC7759461/fullTextXML 得到 404。
  • 原因:URL 路径里的 PMCID 不要 PMC 前缀,而 pmcid 字段的值带前缀。
  • 解法:url = f".../PMC/{rec['pmcid'].removeprefix('PMC')}/fullTextXML"。
  • 参考:fullTextIdList.fullTextId 给的就是无前缀形式,可直接用。

坑点 3:SRC:PAT 的年份检索永远返回 0

  • 症状:SRC:PAT AND PUB_YEAR:2025 → hitCount: 0;但 SRC:PAT 单独查有 4,229,296 条。
  • 原因:专利记录不走 PUB_YEAR 字段(专利的年份语义与论文不同,用申请日/公开日)。
  • 解法:专利要按 FIRST_PDATE 或其他时间字段筛;也不要指望用统一的时间切片策略处理所有 source。
  • 参考:本条目实测,SRC:PAT 有 423 万条但 PUB_YEAR 全为空。

坑点 4:六个日期字段,用错一个结论就反

  • 症状:算「文献入库延迟」时用 firstPublicationDate,得出一堆负值(入库早于出版)。
  • 原因:电子预出版会让 firstPublicationDate 标未来的日期(实测有 pubYear: 2028 的记录在 2026 年入库)。
  • 解法:延迟 = firstIndexDate − firstPublicationDate,但要先剔除 firstPublicationDate > 抓取日 的记录(电子预出版)。
  • 参考:本条目 §4.4 与 query=* 首条记录的实例。

坑点 5:Annotations API 空结果返回 [] 不是 {}

  • 症状:d.get("annotations") 在空结果时报 AttributeError: 'list' object has no attribute 'get'。
  • 原因:Annotations API 返回的顶层是数组(每篇一个对象),Articles API 返回的顶层是对象。两个 API 的响应形状不同。
  • 解法:先判 isinstance(resp, list),空结果就是 [],非空时再逐元素取 .get("annotations", [])。
  • 参考:annotationsByArticleIds 端点实测响应。

坑点 6:FTP 批量下载页被 Cloudflare 挑战拦截

  • 症状:curl https://europepmc.org/ftp/openaccess/ 返回 403 + cf-mitigated: challenge,HTML 里是 “Just a moment…”。
  • 原因:官网与 FTP 列表页在 Cloudflare 后面,对无浏览器指纹的请求做挑战。
  • 解法:用浏览器手动下载,或用带完整浏览器头的客户端;也可改用 API 侧(/search 与全文端点不受此限)。纯脚本批量拉全文这条路走不通。
  • 参考:本条目实测,curl -I 返回 HTTP/2 403、server: cloudflare。

坑点 7:GRANT_AGENCY 是精确匹配字符串,不是模糊匹配

  • 症状:查 GRANT_AGENCY:NSFC 命中很少,但 GRANT_AGENCY:"National Natural Science Foundation of China" 有 115 万。
  • 原因:资助方名是资助方提交的规范名,不做别名归并。
  • 解法:先查 GRANT_AGENCY:* 的取值分布(或去 Grant Finder 看名单),用完整规范名 + 引号检索。同一机构可能有多个写法,需要穷举。
  • 参考:本条目实测五家资助方的 hitCount 差异。

坑点 8:query=* 的默认排序不是随机,抽样会偏

  • 症状:query=* 抓 300 条,SRC:MED 占 299 条、SRC:AGR 占 1 条,完全没有 PPR / PAT。
  • 原因:默认排序按内部索引顺序(近似入库时间倒序),MED 占绝对多数,所以前面几乎全是 MED。
  • 解法:抽样必须按 source 分别查(SRC:PPR、SRC:PAT 各跑一遍),不能从 query=* 的结果里抽。
  • 参考:本条目实测 3 页 × 100 条,源分布 {MED: 299, AGR: 1}。

§7 质量评估、DAIMS 与口径交叉核对

§7.1 记录级质量

检查项 状态 说明
主键唯一性 ✅ source + id 二元组唯一
跨源标识一致 ✅ PMID / PMCID / DOI 三件套,有映射表(每月覆盖)
摘要可得 ⚠️ 70.1%(3,444 万 / 4,911 万)
全文可得 ⚠️ 25.3%(1,244 万)
开放可得 ⚠️ 17.0%(835 万)
许可标注 ⚠️ 有许可 979 万,仅占总量 19.9%
作者结构化 ⚠️ authorList 仅 core 档返回;authorString 是逗号串
机构标准化 ⚠️ affiliation 是自由文本;ROR 集成覆盖不全
MeSH 标注 ⚠️ 仅 MEDLINE 来源有,且仅 core 档返回
日期一致性 ⚠️ 六种日期,含义不同(§4.4)
预印本-期刊版配对 ⚠️ 45 万条已配对,但配对率不是 100%
文本挖掘标注 ⚠️ 覆盖 77%,但多 provider 精度不一
撤稿标记 ⚠️ commentCorrectionList 有,但需主动解析,无顶层布尔

§7.2 抽样声明:本条目数字的边界

所有数字都是 2026-10-23 15:15–15:20 UTC 的 API 快照。 具体边界:

  1. hitCount 是当日值。前一日(10-22)首次观测 49,111,254,本日 49,118,306,日增 7,052。
  2. 我们没有下载任何全文。所有「全文可得 1,244 万」是 HAS_FT:Y 的计数,不是我们数出来的文件数。
  3. 我们没有抽样核对标注精度。13 亿条是官方声明值,我们只验证了 Annotations API 能正常返回。
  4. SRC:* 各分项之和 ≠ 总量。41,253,787 + 1,013,126 + 1,268,930 + 4,229,296 + 1,026,549 + 3,922 + 176,799 + 2,868 = 48,975,277,比总量 49,118,306 少 143,029。差额来自我们未逐一枚举的 source 代码(如 NBK 书籍章节等)。
  5. HAS_PREPRINT:Y(442,403)与 SRC:PPR(1,268,930)不是同一概念。前者是「有预印本版本的记录」(可能主记录是 MED),后者是「主记录就是预印本」。差 82 万。

§7.3 三个必须知道的效度问题

问题一:收录不是随机的,是资助驱动的。

Europe PMC 由欧洲资助方联合体支持,资助方要求其资助的产出必须存入。这导致收录分布与「全球科研产出分布」不一致:欧洲资助的、开放获取倾向强的、英文的,收录率高;非欧洲的、非英文的、非资助的,收录率低。

后果:用它做「全球科研趋势」分析会有系统偏差。做「Europe PMC 内的趋势」没问题,跨库外推要谨慎。

问题二:文本挖掘标注的精度未公开。

官方说 13 亿条标注、42 类概念,但没有公布每类的精度指标。我们实测发现同一处文本被标两个不同本体实体(MONDO 疾病 vs NCBITaxon 物种),说明标注是「多候选」而不是「单一判定」。

后果:直接当训练标签会引入噪声。正确用法是「弱监督」——多 provider 一致的标注权重高,单 provider 的权重低。

问题三:citedByCount 口径窄,不能跨库比较。

Europe PMC 的引用计数只统计库内引用。一篇被大量非生物医学文献引用的方法学论文(如 AlphaFold),其 citedByCount 会显著低于 Google Scholar。

后果:任何涉及「影响力」的标签都要慎用这个字段。

§7.4 偏倚清单(可核查)

偏倚 表现 核查方式
地理偏倚 欧洲资助产出占优 GRANT_AGENCY 按国家分组
语言偏倚 英文占绝对多数 LANG 字段分布
时间偏倚 近五年占 40%+(2021–2026 合计约 1,070 万 / 4,911 万) PUB_YEAR 分组
可得性偏倚 开放获取文献的方法描述更完整 对比 OA 与非 OA 的 HAS_SUPPL 比例
主题偏倚 COVID-19 相关文献在 2020–2022 年集中爆发 按 DISEASE 字段分组
类型偏倚 综述与 letter 混杂 pubTypeList 分组
挖掘偏倚 有全文的文献才有章节级标注 HAS_FT × HAS_TM 交叉

「时间偏倚」这一行值得展开:实测 PUB_YEAR 2021 年 1,781,940、2022 年 1,794,771、2023 年 1,738,790、2024 年 1,797,649、2025 年 1,965,745。五年合计约 908 万,占 4,911 万的 18.5%。而 1990 年只有 467,500。收录深度随时间递减,越早越稀疏。

§7.5 数据完整性核查表

检查 方法 结果
总量可复现 search?query=*&pageSize=1 的 hitCount ✅ 49,118,306
分源可加总 各 SRC:* 之和 vs 总量 ⚠️ 差 143,029(未枚举 source)
可得性字段自洽 HAS_FT:Y ≥ OPEN_ACCESS:Y ✅ 12,439,494 > 8,352,804
许可字段自洽 LICENSE:* vs OPEN_ACCESS:Y ⚠️ 979 万 > 835 万(有许可无全文)
预印本配对自洽 HAS_PREPRINT:Y vs HAS_PUBLISHED_VERSION:Y ⚠️ 442,403 vs 452,629,差 10,226
交叉引用按库可加总 九个 HAS_* 库之和 vs HAS_XREFS:Y ⚠️ 之和 1,217,319 > 1,035,850(一条记录可链多库)
全文可得 ≠ PDF 可得 HAS_FT:Y vs HAS_PDF:Y ✅ 差 251,270(有 XML 无 PDF)
版本号可取 响应头 version ✅ “6.9”

第 5 行需要解释:HAS_PREPRINT:Y(442,403)比 HAS_PUBLISHED_VERSION:Y(452,629)少 10,226。理论上「有预印本版本的记录」应该 ≥ 「预印本记录了有发表版的」,实际反过来。可能的原因是部分 MED 记录被标了 HAS_PUBLISHED_VERSION 但没被标 HAS_PREPRINT(数据标注不一致)。这是官方字段的小缺陷,不影响使用,但做配对时要两个都查再取并集。

§7.6 DAIMS 24 项逐项评分

✅=1 / ⚠️=0.5 / ❌=0

# 维度 判 依据
1 数据集唯一标识 ✅ source+id,另有 DOI/PMID/PMCID
2 持久标识符 ✅ DOI / PMID / PMCID 三套
3 版本化 ⚠️ REST 有 6.9,但无数据快照版本
4 元数据标准 ✅ Dublin Core / JATS / MeSH
5 元数据完整性 ✅ 143 个可检索字段
6 字段字典 ✅ /fields 端点 + REST 文档
7 数据字典/模式 ✅ core 档 40+ 字段结构稳定
8 机器可读格式 ✅ JSON / XML / Dublin Core
9 API 可得 ✅ 三套 REST API + OAI
10 批量下载 ⚠️ FTP 有,但被 Cloudflare 拦截
11 许可明确 ⚠️ 逐篇标注,但仅 19.9% 有值
12 许可机器可读 ✅ license 字段短名
13 溯源 ⚠️ 有 provider 与日期,但无数据血缘图
14 引用规范 ✅ 官方推荐引用「Europe PMC in 2020」
15 数据来源声明 ✅ About 页列明 PubMed/PMC/Agricola/预印本/专利
16 更新频率声明 ✅ 每日更新;FTP 每周/每月
17 缺失值说明 ⚠️ 字段缺值无文档,需自行探测
18 质量控制声明 ⚠️ 无明确的 QC 流程文档;标注精度未公布
19 抽样/覆盖说明 ⚠️ 无收录覆盖率的官方说明
20 文档完整性 ✅ About / Help / 搜索语法 / 开发者资源齐全
21 示例/教程 ✅ API case studies + 代码示例
22 社区支持 ✅ 开发者论坛 + helpdesk
23 长期保存承诺 ✅ EMBL-EBI 托管,属 ELIXIR 核心资源
24 伦理/隐私声明 ⚠️ 文献层无患者数据,但撤稿/更正处理无专门说明

总分:18.0 / 24 = 75.0%

扣分的六项集中在**「文档化的质量声明」**这一类:缺失值、QC 流程、覆盖说明、撤稿处理——Europe PMC 有数据,但没有把这些写成可引用的规范文档。这是聚合型资源的通病:东西太多,反而说不清质量边界。

§7.7 口径交叉核对矩阵(不是模型性能验证)

对照一:官网首页/About 的数字 vs API 实测

指标 官方原文 API 实测 差异解释
总量 未在 About 给总数 49,118,306 官方不在 About 报总数,只报功能
预印本服务器 「34 life science preprint servers」 SRC:PPR 1,268,930 条 服务器数与记录数是两回事
生物数据库 「over 40 biological databases」 HAS_XREFS:Y 1,035,850 条 库数与记录数不同量纲
标注 「over 1.3 billion annotations / 42 types」 HAS_TM:Y 37,836,422 条文献 标注条数 vs 文献条数
资助 「122,173 biomedical grants from 36 funders」+「18,980 COVID-19」 Grants API 端点 404(见坑点说明) 只能引官方值
全文检索 「abstracts and full text」 HAS_FT:Y 12,439,494 全文占 25.3%,不是全部

这张表要说清的事:官方的「34 / 40 / 13 亿 / 42」都是类别数与标注条数,不是文献条数。把「13 亿条标注」读成「13 亿篇文献有标注」会差 34 倍(实际是 3,783 万篇)。

对照二:Europe PMC 与 PMC / PubMed 的计数关系

指标 Europe PMC 关系 说明
MEDLINE 侧 41,253,787 ≈ PubMed 总量 Europe PMC 的 MED 部分与 PubMed 基本同源,日更
PMC 侧 SRC:PMC 1,013,126 ≠ PMC 全文总量 以 PMC 为主记录的只有一百万;有 PMC 全文的记录多得多(inPMC:Y)
预印本 1,268,930 远超单个服务器 34 个服务器汇总

对照三:可得性漏斗

4,911 万  总记录
  ↓ 70.1%
3,444 万  有摘要
  ↓ 25.3%
1,244 万  有全文
  ↓ 17.0%
  835 万  开放获取
  ↓ 可用许可(cc by + cc0)
  664 万  可商用训练

最后一级 664 万 = 6,571,562(cc by)+ 69,447(cc0)= 6,641,009。这是 Europe PMC 真正能用于商用模型训练的规模上限——只占总量的 13.5%。这个数字比大多数人的直觉小得多,也是本条目最该被记住的一个数。


§8 生态位与相邻资源

§8.1 Europe PMC 在网络里的位置

                    ┌──────────────┐
   出版商 ─────────▶│              │
   PMC ────────────▶│  Europe PMC  │───▶ REST API / FTP
   Agricola ───────▶│  (EMBL-EBI)  │───▶ 网站检索
   34 个预印本 ────▶│              │───▶ OAI-PMH
   专利局 ─────────▶└──────┬───────┘
                           │
         ┌─────────────────┼─────────────────┐
         ▼                 ▼                 ▼
   UniProt / PDB       PRIDE / ChEMBL     OMIM / InterPro
   (40+ 生物数据库交叉链接)

上游:五类来源,其中 PMC 与 PubMed 是主干(合计 ~90%),预印本与专利是差异化部分。
下游:40 余个生物数据库通过 accession 号反向链接;Unpaywall 提供合法免费副本。
平行:OpenAlex(引文网络)、Semantic Scholar(语义检索)、Crossref(DOI 注册)、Dimensions(商业)。

本站条目 关系 怎么配合
PMC OA Subset(#360) 互补,不是替代 要纯净开放全文用 PMC OA;要全量元数据与预印本用 Europe PMC
PMC-OA(#320) 子集 是 PMC OA Subset 的镜像版本
Open-PMC(#45) 子集 同上,口径略窄
LitCovid(#380) 派生 LitCovid 是 Europe PMC 里 COVID-19 子集的再策展
PubTator Central(#752) 标注侧对照 PubTator 的标注与 Europe PMC 的 Annotations 有重叠也有差异,可做多标注源一致性研究
SemMedDB(#836) 语义谓词 Europe PMC 给实体标注,SemMedDB 给实体间谓词;两者可拼接成 KG
PubMedQA(#49) 下游任务 PubMedQA 的语料取自 PubMed 摘要,可用 Europe PMC 补充全文
arXiv(#123) 领域互补 arXiv 覆盖物理/CS,Europe PMC 覆盖生命科学;两者预印本部分有少量交集
S2ORC 全文侧对照 S2ORC 侧重 CS,全文解析质量更高;Europe PMC 侧重生物医学,元数据更丰富
CPIC(#1351) 下游消费 用药指南的原始文献大多可在 Europe PMC 找到全文

最值得配的一对是 Europe PMC + SemMedDB:Europe PMC 给「这个句子里有哪些实体」,SemMedDB 给「这两个实体之间是什么谓词」。两者拼起来才是完整的三元组。

§8.3 为什么一个「医学数据集站」要收文献聚合库

三个理由:

  1. 所有医学数据集的「说明书」都在文献里。 一个数据集写了 500 字的 README,但它的真实采集流程、排除标准、失效模式,写在论文的方法部分。没有文献层,数据集文档永远是二手的。
  2. 文献是唯一能覆盖「数据集之间的关系」的层。 两个数据集之间的可比性、某个 benchmark 的构造动机、某个指标为什么被弃用——这些信息不在任何数据集的字段里,只在论文的讨论部分。
  3. 中文语境下的医学 AI,最缺的不是数据,是「这个数据是怎么来的」。 Europe PMC 的开放获取子集(835 万篇)是这条链上最便宜的入口。

§9 许可、伦理与合规

§9.1 许可结构:三层嵌套

Europe PMC 的许可不是一个许可,是三层:

层 内容 许可
平台层 网站代码、API 接口、检索服务 官方开源(GitHub / GitLab),代码多为 Apache-2.0
元数据层 书目字段、MeSH、资助信息 大部分为 CC0 或事实性数据,通常不受版权保护
内容层 摘要、全文、图表、补充材料 逐篇不同,由 license 字段声明

关键:第三层不能整库授权。 Europe PMC 只是聚合者,无权对你抓到的一篇 cc by-nc-nd 论文授权做任何派生。抓到不等于能用。

§9.2 内容层的五种许可与实操边界

许可 条数 商用 派生(微调/改写) 再分发 实操建议
cc by 6,571,562 ✅ ✅ ✅(署名) 首选,可放心用
cc0 69,447 ✅ ✅ ✅ 最优,无任何限制
cc by-nd 23,093 ✅ ❌ ✅(署名) 只能原样分发,不能做指令微调
cc by-nc 1,148,570 ❌ ✅ ✅(署名,非商用) 只能做学术研究,不能进商用模型
cc by-nc-nd 1,630,225 ❌ ❌ ✅(署名,非商用,原样) 最严,只能用于阅读

「派生」在 LLM 语境下的争议:用 cc by-nd 的文本训练模型,算不算「派生作品」?法律上无定论。保守做法是排除 ND,即只取 cc by + cc0(664 万条)。这也是我们在 §7.7 给出的「可商用训练」上限。

§9.3 病原体与双重用途

Europe PMC 收录病原体相关文献,其中部分涉及增强型病原体研究(GOF)、病原体基因组操作细节。

这不是数据集的伦理问题,是使用的问题:

  • 用这些文献训练通用模型 → 模型可能复述操作细节
  • 用这些文献做知识检索 → 无额外风险(信息本就公开)

建议:若模型面向公众开放,在微调阶段对 ORGANISM 字段含高风险病原体的文献做降权或排除。欧洲已有相关立法讨论(如英国的 APC 框架),中国目前无专门规定,但《生物安全法》的原则性条款适用。

§9.4 数据主体权利与撤稿处理

文献层没有直接的患者数据,但有两个间接风险:

  1. 个案报道(case report)里可识别信息:即使论文本身合规,某些个案报道的细节组合仍可能重识别。Europe PMC 不做二次脱敏。
  2. 撤稿文献仍在库里:commentCorrectionList 会记录撤稿关系,但记录本身不删除。用它训练模型,会把撤稿结论当成正确知识。

处理建议:

  • 抓取时检查 commentCorrectionList 里是否有 Correction / Retraction 类型条目
  • 对撤稿文献单独打标,训练时排除
  • 定期重跑(撤稿是持续发生的)

§9.5 引用规范

官方推荐引用的是方法学论文:

Europe PMC in 2020. Nucleic Acids Research. PMID: 33180112 / PMCID: PMC7778976.

引用时还应说明:

  • 抓取日期(因为库是日更的)
  • REST 服务版本(当前 6.9)
  • 查询语句(可复现性)

§10 复用边界与跨条目协作手册

§10.1 决策树:什么时候该用 Europe PMC

你要做什么?
├─ 找论文 / 查文献
│   ├─ 要全文检索 → Europe PMC ✅
│   ├─ 要引文网络 → OpenAlex / S2
│   └─ 要中文文献 → CNKI / 万方(Europe PMC 中文极少)
├─ 做 NLP 训练集
│   ├─ 要开放全文预训练 → PMC OA Subset ✅
│   ├─ 要实体/关系标注 → Europe PMC Annotations ✅
│   └─ 要句间谓词 → SemMedDB ✅
├─ 研究科研生态
│   ├─ 按资助方分析 → Europe PMC ✅(唯一入口)
│   ├─ 按机构分析 → OpenAlex 更好
│   └─ 预印本行为研究 → Europe PMC ✅(34 服务器汇总)
├─ 论文-数据配对
│   └─ Europe PMC ✅(40+ 库交叉链接)
└─ 临床试验结构化结果
    └─ AACT ✅(Europe PMC 不做这个)

§10.2 与 PMC OA Subset 的配对(聚合池 ↔ 已筛子集)

分工:

场景 Europe PMC PMC OA Subset
全量元数据统计 ✅ ❌(只有子集)
全文预训练语料 ⚠️ 需自行筛许可 ✅ 已筛
预印本 ✅ ❌
专利 ✅ ❌
资助反查 ✅ ❌
标注 ✅ ❌
纯净、可直接训练 ⚠️ ✅

协作方式:用 Europe PMC 拿全量元数据与筛选条件,用 PMC OA Subset 拿已筛好的全文,两者按 PMID 对齐。这样既避免了在 4,911 万条上做许可筛查,又不必放弃聚合层的元数据丰富度。

§10.3 与 PubTator Central 的配对(两套标注的对照)

维度 Europe PMC Annotations PubTator Central
覆盖文献 3,783 万(HAS_TM:Y) PubMed + PMC 全量
实体类型 42 类(官方声明) 6 类(gene / disease / chemical / species / mutation / cell line)
provider 多个团队 NCBI 自研
标注粒度 章节级 摘要 + 全文
归一化 有 URI(MONDO / NCBITaxon 等) 有 NCBI ID

做多标注源一致性研究的最佳组合:同一批 PMID 分别从两个源取标注,比较重叠率与冲突率。这个数字本身就是一个有价值的数据集特征。

§10.4 许可梯度对照

资源 许可 可商用 可派生
Europe PMC 元数据 事实性 / CC0 居多 ✅ ✅
Europe PMC 内容 cc by CC BY 4.0 ✅ ✅
Europe PMC 内容 cc by-nc CC BY-NC ❌ ✅
Europe PMC 内容 cc by-nd CC BY-ND ✅ ❌
Europe PMC 内容 cc by-nc-nd CC BY-NC-ND ❌ ❌
PMC OA Subset 各家(CC BY 为主) ✅ ✅
PubMed 摘要 事实性 / 无明示 ⚠️ ⚠️

最后一行值得注意:PubMed 摘要的版权状态一直是灰色地带。Europe PMC 的 license 字段对无许可的记录返回空值——空值不等于公有领域。

§10.5 三个"不要做"

  1. 不要用 query=* 抽样做统计分析。 默认排序下 99.7% 是 MED(实测 300 条里 299 条 MED)。必须按 SRC 分层。
  2. 不要把 hitCount 当论文数。 同一研究的预印本、期刊版、专利是三条记录。去重前先看 HAS_PUBLISHED_VERSION。
  3. 不要假设「开放获取」等于「可训练」。 835 万 OA 里只有 664 万是可商用许可。NC 与 ND 的 278 万条,进商用模型就是侵权。

§10.6 一句话总结

Europe PMC 是生命科学文献的「总闸门」——它不生产内容,它让你的检索式能同时触及期刊、预印本、专利、资助与数据;代价是 87% 的内容你只能读、不能训练。


附录 A:本篇数字速查

项 数值 取法
总记录 49,118,306 search?query=*&pageSize=1 → hitCount
服务版本 6.9 同上响应 → version
MEDLINE 41,253,787 query=SRC:MED
PMC 1,013,126 query=SRC:PMC
预印本 1,268,930 query=SRC:PPR
专利 4,229,296 query=SRC:PAT
Agricola 1,026,549 query=SRC:AGR
引用记录 3,922 query=SRC:CTX
伦理 176,799 query=SRC:ETH
历史 2,868 query=SRC:HIR
有摘要 34,443,646 query=HAS_ABSTRACT:Y
有全文 12,439,494 query=HAS_FT:Y
有 PDF 12,188,224 query=HAS_PDF:Y
开放获取 8,352,804 query=OPEN_ACCESS:Y
有补充材料 3,875,038 query=HAS_SUPPL:Y
有参考文献 27,461,924 query=HAS_REFLIST:Y
有文本挖掘标注 37,836,422 query=HAS_TM:Y
有数据链接 8,045,183 query=HAS_DATA:Y
有交叉引用 1,035,850 query=HAS_XREFS:Y
有 DOI 35,298,177 query=HAS_DOI:Y
有预印本版本 442,403 query=HAS_PREPRINT:Y
有发表版本 452,629 query=HAS_PUBLISHED_VERSION:Y
UniProt 链接 179,857 query=HAS_UNIPROT:Y
PDB 链接 43,770 query=HAS_PDB:Y
OMIM 链接 146,408 query=HAS_OMIM:Y
ChEBI 链接 128,453 query=HAS_CHEBI:Y
ChEMBL 链接 86,101 query=HAS_CHEMBL:Y
InterPro 链接 99,162 query=HAS_INTERPRO:Y
IntAct 链接 24,090 query=HAS_INTACT:Y
PRIDE 链接 20,058 query=HAS_PRIDE:Y
EMBL 链接 495,791 query=HAS_EMBL:Y
许可 cc by 6,571,562 query=LICENSE:"cc by"
许可 cc by-nc 1,148,570 query=LICENSE:"cc by-nc"
许可 cc by-nc-nd 1,630,225 query=LICENSE:"cc by-nc-nd"
许可 cc by-nd 23,093 query=LICENSE:"cc by-nd"
许可 cc0 69,447 query=LICENSE:"cc0"
有许可合计 9,792,835 query=LICENSE:*
可商用训练上限 6,641,009 cc by + cc0
可检索字段 143 /fields?format=json
资助 Wellcome Trust 219,369 GRANT_AGENCY:"Wellcome Trust"
资助 NIH 358,115 GRANT_AGENCY:"National Institutes of Health"
资助 European Commission 45,346 GRANT_AGENCY:"European Commission"
资助 NSFC 1,150,423 GRANT_AGENCY:"National Natural Science Foundation of China"
资助 UKRI 6,693 GRANT_AGENCY:"UK Research and Innovation"
2020 年文献 1,593,653 query=PUB_YEAR:2020
2025 年文献 1,965,745 query=PUB_YEAR:2025
2026 年文献 1,779,505 query=PUB_YEAR:2026
预印本 2025 187,028 query=SRC:PPR AND PUB_YEAR:2025
预印本 2026 184,983 query=SRC:PPR AND PUB_YEAR:2026
Agricola 2025 67,413 query=SRC:AGR AND PUB_YEAR:2025
专利 2025 0 query=SRC:PAT AND PUB_YEAR:2025(字段不适用)
抽样源分布 MED 299 / AGR 1 3 页 × 100 条

全部抓取时间:2026-10-23 15:15–15:20 UTC。


附录 B:五个可复制的查询

查询 1:总量与版本

curl -s "https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=*&format=json&pageSize=1" \
  | python3 -c "import json,sys;d=json.load(sys.stdin);print(d['version'], d['hitCount'])"
# 输出:6.9 49118306

查询 2:可商用训练语料的规模(cc by + cc0 且开放获取)

curl -s -G "https://www.ebi.ac.uk/europepmc/webservices/rest/search" \
  --data-urlencode 'query=OPEN_ACCESS:Y AND (LICENSE:"cc by" OR LICENSE:"cc0")' \
  -d format=json -d pageSize=1 \
  | python3 -c "import json,sys;print(json.load(sys.stdin)['hitCount'])"

查询 3:按资助方反查 + 有数据的论文

curl -s -G "https://www.ebi.ac.uk/europepmc/webservices/rest/search" \
  --data-urlencode 'query=GRANT_AGENCY:"National Natural Science Foundation of China" AND HAS_DATA:Y AND PUB_YEAR:2025' \
  -d format=json -d pageSize=1 \
  | python3 -c "import json,sys;print(json.load(sys.stdin)['hitCount'])"

查询 4:游标分页抓取(Python,带退避与限速)

import json, time, urllib.parse, urllib.request

def epmc(query, result_type="core", cap=5000):
    base = "https://www.ebi.ac.uk/europepmc/webservices/rest/search"
    out, cursor = [], "*"
    while len(out) < cap:
        q = urllib.parse.urlencode({
            "query": query, "format": "json",
            "resultType": result_type, "pageSize": 1000, "cursorMark": cursor})
        with urllib.request.urlopen(base + "?" + q, timeout=60) as r:
            d = json.load(r)
        batch = d["resultList"]["result"]
        if not batch:
            break
        out += batch
        cursor = d["nextCursorMark"]
        time.sleep(0.12)
    return out[:cap]

recs = epmc('HAS_PRIDE:Y AND PUB_YEAR:[2024 TO 2026]', cap=3000)
print(len(recs), recs[0]["title"][:60])

查询 5:取某篇文献的全部文本挖掘标注

curl -s "https://www.ebi.ac.uk/europepmc/annotations_api/annotationsByArticleIds?articleIds=MED:33180112&format=JSON" \
  | python3 -c "
import json,sys
d=json.load(sys.stdin)          # 注意:顶层是 list
for art in d:
    print(art['extId'], len(art['annotations']))
    for a in art['annotations'][:3]:
        print(' ', a['type'], a['exact'], '->', a['tags'][0]['uri'])
"

查询 6(备用):按 source 分层抽样,避开默认排序偏倚

for src in ["MED", "PMC", "PPR", "PAT", "AGR"]:
    recs = epmc(f"SRC:{src}", result_type="lite", cap=200)
    print(src, len(recs))

相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • disease-ontology — 共享标签:医疗NLP / 生物医学文献 / 知识图谱 / 命名实体识别 / 公共卫生与流行病学
  • medmentions — 共享标签:医疗NLP / 生物医学文献 / 知识图谱 / 命名实体识别
  • biored — 共享标签:医疗NLP / 生物医学文献 / 知识图谱 / 命名实体识别
  • craft — 共享标签:医疗NLP / 生物医学文献 / 知识图谱 / 命名实体识别
  • semmeddb — 共享标签:医疗NLP / 生物医学文献 / 知识图谱 / 命名实体识别
  • medlexsp — 共享标签:医疗NLP / 生物医学文献 / 知识图谱 / 命名实体识别
  • s2orc — 共享标签:医疗NLP / 生物医学文献 / 知识图谱
  • litcovid — 共享标签:医疗NLP / 生物医学文献 / 公共卫生与流行病学
  • cord-19 — 共享标签:医疗NLP / 生物医学文献 / 公共卫生与流行病学
  • orphanet-ordo — 共享标签:知识图谱 / 命名实体识别 / 公共卫生与流行病学

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集