3. 药物分子数据来源与获取

药物文本与分子联合建模的第一步,不是搭模型,而是把“药物—分子—文本”三者的原始数据拿到手。分子数据库承担的角色,是提供可被程序解析的结构标识(SMILES、InChI、InChIKey)、理化性质、靶点与活性记录,以及药物名称、适应证、作用机制等文本线索。本节围绕 ChEMBL、PubChem、DrugBank 三类主流数据源,讲清它们各自“有什么、适合取什么、怎么取”,并给出可复现的检索与下载路径。

三类数据库的定位差异

ChEMBL 由 EMBL-EBI 维护,核心是“化合物—靶点—活性”三元关系。它把文献中提取的生物活性数据(IC50、Ki、EC50 等)结构化,每条记录带标准类型、标准单位、标准值、靶点、测定描述和文献来源。做分子活性预测、靶点关联建模时,ChEMBL 是首选。它的主键是 chembl_id(如 CHEMBL25 为阿司匹林),化合物另有 canonical SMILES。

PubChem 由 NCBI 维护,覆盖面最广,偏向“化合物身份与属性”。它包含 PubChem Compound(结构)、PubChem Substance(提交物质)、PubChem BioAssay(生物测定)三个子库。PubChem 的强项是跨库交叉引用:一个 CID 可以关联到 ChEMBL、DrugBank、KEGG、PDB 等多个外部 ID,非常适合做 ID 映射与数据补全。它的主键是 CID(PubChem Compound ID)。

DrugBank 是药物导向的数据库,区分“已批准药物”和“实验性药物”,字段包含药物名称、CAS 号、UNII、靶点、酶、转运体、通路、相互作用、适应证文本。它的文本字段质量高,适合抽取药物说明、机制描述。注意 DrugBank 完整数据需注册并遵守其许可协议,学术使用通常可申请下载,商业使用受限。

选择原则:要活性数据选 ChEMBL;要结构身份与跨库映射选 PubChem;要药物文本与靶点注释选 DrugBank。实际工程中三者常联合使用,以 InChIKey 作为跨库对齐的“通用钥匙”。

检索与下载的实际操作路径

以 ChEMBL 为例,最直接的方式是使用其 Web 服务。按靶点检索活性数据,可先查靶点 ChEMBL ID,再拉取活性记录。例如查询 EGFR(CHEMBL203)的 IC50 数据,可访问:

https://www.ebi.ac.uk/chembl/api/data/activity.json
    ?target_chembl_id=CHEMBL203
    &standard_type=IC50
    &limit=1000

返回 JSON 中每条记录关注 molecule_chembl_id、canonical_smiles、standard_value、standard_units、assay_chembl_id、document_chembl_id。批量下载可改用 ChEMBL 官方 FTP 的 SQLite 或 MySQL 转储,避免逐页请求。下载后建议先按 standard_units 过滤,只保留 nM 或统一换算,再按 standard_relation(=、>、<)决定是否纳入。

PubChem 推荐用 PUG-REST 接口。按名称取 CID:

https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/aspirin/cids/JSON

拿到 CID 后取属性,可一次请求多个字段:

https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/2244/property/
    CanonicalSMILES,IsomericSMILES,InChIKey,MolecularFormula,
    MolecularWeight,XLogP/JSON

若要做 ID 映射,可用 PubChem 的 xrefs/RegistryID 或 synonyms 端点,把 CID 与 ChEMBL、DrugBank ID 关联起来。批量场景下,PubChem 也提供 FTP 上的 Compound 与 BioAssay 全量文件。

DrugBank 的获取以注册下载为主,下载后通常得到 XML。解析时重点提取 drug 节点下的 drugbank-id、name、cas-number、unii、smiles、inchi-key,以及 targets、enzymes、indication、mechanism-of-action 等文本字段。这些文本正是后续与分子结构做联合建模时的“文本侧”输入。

跨库对齐与数据清洗要点

三个库的 ID 体系不同,直接按名称合并会因同义词、盐型、立体异构而产生错误。稳妥做法是:以 InChIKey 的前 14 位(骨架层)做初筛,再结合完整 InChIKey 判断立体与盐型差异。对于同一药物的不同盐型,若建模目标是母体分子,应统一去盐后再生成标准 SMILES。

清洗时需处理几类典型问题:一是活性值单位不统一,需全部换算为 nM;二是同一化合物对同一靶点存在多条测定,需按 assay 或文献去重,或取中位数;三是 SMILES 缺失或非法,需用 RDKit 校验并标准化;四是文本字段含 HTML 标签或转义字符,需先清洗再入模型。

药物分子数据获取与跨库对齐流程 ChEMBL 化合物—靶点—活性 主键:chembl_id IC50 / Ki / EC50 PubChem 结构身份与跨库映射 主键:CID SMILES / InChIKey / XLogP DrugBank 药物文本与靶点注释 主键:drugbank-id 适应证 / 机制 / 相互作用 REST API / FTP 转储 activity.json 按靶点拉取 SQLite / MySQL 全量 PUG-REST / FTP name→CID→property xrefs 做 ID 映射 注册下载 XML drug / targets / enzymes indication / mechanism 跨库对齐:InChIKey 前 14 位骨架匹配 → 完整 InChIKey 校验立体与盐型 统一去盐 · 标准化 SMILES · 活性单位换算为 nM · 按 assay 去重 联合建模输入:分子结构表 + 活性表 + 药物文本表

一个可复用的最小数据表结构

把三个库的数据落到本地后,建议至少维护三张表,并用统一键关联。分子结构表以 inchi_key 为主键,字段包括 canonical_smiles、molecular_formula、molecular_weight、xlogp、chembl_id、pubchem_cid、drugbank_id。活性表以 activity_id 为主键,字段包括 inchi_key、target_chembl_id、standard_type、standard_value_nm、assay_id、document_id。文本表以 inchi_key 关联,字段包括 drug_name、indication、mechanism、target_text。

这样组织后,分子侧可直接从 SMILES 生成指纹或图结构,文本侧可从 indication、mechanism 抽取嵌入,活性侧提供监督标签,三者通过 InChIKey 对齐,形成联合建模的输入底座。实际执行时,先用小规模样本(如 50 个药物)跑通全流程,确认 ID 映射率与字段完整率,再扩展到全量下载,能显著降低返工成本。

注意:DrugBank 数据受许可协议约束,下载与使用前需确认授权范围;ChEMBL 与 PubChem 虽开放,也应遵守其使用条款并标注来源。所有示例参数与数值仅用于说明流程,实际结果以各库当前版本为准。