mcpField
C
Checking ChEMBL for Structured SAR Data

Checking ChEMBL for Structured SAR Data

github.com/kthorn数据与数据库13154 次安装53 周前更新
代码仓库

关于 Checking ChEMBL for Structured SAR Data

Checking ChEMBL for Structured SAR Data 是一项供药物化学研究使用的技能,用于检查论文是否收录于 ChEMBL,并获取结构化生物活性数据。它要求通过 DOI 查询,并将数据库数据与全文研究结合使用。

主要功能

  1. 01通过 DOI 查询论文收录情况
  2. 02获取生物活性数据点数量
  3. 03按活性类型筛选数据
  4. 04将 ChEMBL 状态记录到研究摘要
  5. 05优先复用结构化数据,补充全文分析

适用场景

  1. 01筛查药物化学论文是否有 ChEMBL 数据
  2. 02获取论文中的 IC50 或 MIC 等活性数据
  3. 03在解析 PDF 表格前检查结构化数据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/kthorn/research-superpower --skill checking-chembl-for-structured-sar-data

安装后在 Claude Code 中输入/checking-chembl-for-structured-sar-data确认已加载。

详细介绍

检查 ChEMBL 中是否有结构化 SAR 数据

概述

ChEMBL 是一个经过人工整理的数据库,收录了约 99,000 篇药物化学论文及提取、标准化后的生物活性数据。如果一篇论文已收录在 ChEMBL 中,你就可以直接访问结构化数据,无需解析 PDF。

核心原则: 检查药物化学论文时,优先查看 ChEMBL。经过整理的数据比从表格中解析的数据更可靠。

适用场景

以下情况适用此技能:

  • 论文介绍药物化学 / 药物发现
  • 摘要提及化合物系列、SAR 或活性数据
  • 论文包含 IC50、MIC、Ki、EC50 或其他生物活性测量值
  • 尝试从表格 / 图中提取数据之前
  • 论文在相关性评估中的得分 ≥ 7

不适用场景:

  • 非药物化学论文(细胞生物学、基因组学等)
  • 不含活性测量值的论文
  • 不含原始数据的综述
  • 非常新的论文(< 6 个月,可能尚未整理)

ChEMBL API 基础知识

基础 URL: https://www.ebi.ac.uk/chembl/api/data/

无需身份验证

重要:只能通过 DOI 查询 ChEMBL,不能通过 PMID 查询

  • API 会在结果中返回 PMID,但不接受将其作为查询参数
  • 查询时始终使用 DOI:?doi=10.1234/example
  • 即使论文已收录在 ChEMBL 中,使用 PMID 查询也会返回 0 条结果

分两步操作:

  1. 检查论文是否(通过 DOI)收录在 ChEMBL 中
  2. 如果已收录,获取生物活性数据

第 1 步:检查论文是否收录在 ChEMBL 中

通过 DOI 查询(唯一可用的方法):

curl -s "https://www.ebi.ac.uk/chembl/api/data/document.json?doi=DOI"

⚠️ 重要:必须使用 DOI,而非 PMID

# ✅ CORRECT - Use DOI
doi="10.1021/jm401507s"
curl -s "https://www.ebi.ac.uk/chembl/api/data/document.json?doi=$doi"

# ❌ WRONG - PMID won't work (will return 0 results)
pmid="24446688"
curl -s "https://www.ebi.ac.uk/chembl/api/data/document.json?pubmed_id=$pmid"  # Does NOT work!

如果你只有 PMID: 先从 PubMed 获取 DOI,再使用该 DOI 查询 ChEMBL。

响应结构:

{
  "documents": [
    {
      "document_chembl_id": "CHEMBL3120156",
      "doi": "10.1021/jm401507s",
      "title": "Discovery and development of simeprevir (TMC435), a HCV NS3/4A protease inhibitor.",
      "abstract": "Hepatitis C virus is a blood-borne infection...",
      "pubmed_id": 24446688,
      "journal": "J Med Chem",
      "year": 2014,
      "doc_type": "PUBLICATION"
    }
  ],
  "page_meta": {
    "total_count": 1
  }
}

关键字段:

  • document_chembl_id - 用它获取活性数据
  • doc_type - "PUBLICATION"(来自文献)或 "DATASET"(已提交的数据集)
  • pubmed_id - 响应中会包含 PMID,但不能用它查询 ChEMBL
  • 如果 total_count = 0,则论文未收录在 ChEMBL 中

解析响应:

response=$(curl -s "https://www.ebi.ac.uk/chembl/api/data/document.json?doi=$doi")

if [ $(echo "$response" | jq -r '.page_meta.total_count') -gt 0 ]; then
  chembl_id=$(echo "$response" | jq -r '.documents[0].document_chembl_id')
  echo "✓ Found in ChEMBL: $chembl_id"
else
  echo "✗ Not in ChEMBL"
fi

第 2 步:获取活性数据条目数

查询活性数据端点:

curl -s "https://www.ebi.ac.uk/chembl/api/data/activity.json?document_chembl_id=CHEMBL3120156&limit=1"

提取总条目数:

activity_url="https://www.ebi.ac.uk/chembl/api/data/activity.json?document_chembl_id=$chembl_id&limit=1"
activity_count=$(curl -s "$activity_url" | jq -r '.page_meta.total_count')

echo "→ $activity_count bioactivity data points"

第 3 步:向用户报告并更新摘要

立即报告:

📄 [15/127] Screening: "Discovery and development of simeprevir"
   Abstract score: 9 → Fetching full text...
   ✓ ChEMBL: CHEMBL3120156 (101 activity data points)
   → IC50 data for HCV NS3 protease inhibitors available

添加到 SUMMARY.md:

### [Discovery and development of simeprevir (TMC435), a HCV NS3/4A protease inhibitor](https://doi.org/10.1021/jm401507s) (Score: 9)

**DOI:** [10.1021/jm401507s](https://doi.org/10.1021/jm401507s)
**PMID:** [24446688](https://pubmed.ncbi.nlm.nih.gov/24446688/)
**ChEMBL:** [CHEMBL3120156](https://www.ebi.ac.uk/chembl/document_report_card/CHEMBL3120156/) (101 data points)

**Key Findings:**
- IC50 data for HCV NS3/4A protease inhibitors (from ChEMBL)
- Lead compound simeprevir (TMC435) approved for HCV treatment
- Structures and full activity data: [ChEMBL API](https://www.ebi.ac.uk/chembl/api/data/activity.json?document_chembl_id=CHEMBL3120156)

**ChEMBL Activity Summary:**
- IC50 values for HCV NS3/4A protease
- PK parameters (AUC, Cmax, clearance)
- DMPK assays (metabolic stability, permeability)

始终注明 ChEMBL 状态:

  • 如果找到:添加 ChEMBL ID 链接和数据点数量
  • 如果未找到:注明“未收录在 ChEMBL 中”(这仍然是有价值的信息)

第 4 步:更新跟踪文件

添加到 papers-reviewed.json:

{
  "10.1021/jm401507s": {
    "pmid": "24446688",
    "status": "relevant",
    "score": 9,
    "chembl_id": "CHEMBL3120156",
    "chembl_activities": 101,
    "has_structured_data": true
  }
}

可选:提取结构化数据

对于 ChEMBL 数据丰富(>20 条活性数据)的论文,可考虑提取:

# Get all IC50 data
curl -s "https://www.ebi.ac.uk/chembl/api/data/activity.json?document_chembl_id=CHEMBL3120156&standard_type=IC50&limit=100" > chembl_data.json

# Summary statistics
jq '[.activities[] | .standard_value | tonumber] | "Min: \(min), Max: \(max), Count: \(length)"' chembl_data.json

向用户报告:

📊 ChEMBL data extracted:
   - IC50 values for HCV NS3/4A protease
   - All structures downloaded
   - Data saved to: chembl_CHEMBL3120156_ic50.json

与其他技能集成

在 evaluating-paper-relevance 工作流中:

  1. 完成摘要筛选后(得分 ≥7)
  2. 深入阅读全文之前
  3. 使用此技能检查 ChEMBL
  4. 如果找到:
    • 在 SUMMARY.md 中注明 ChEMBL ID
    • 提取活性数据(比解析 PDF 更快)
    • 仍需获取全文,以了解方法、讨论和上下文
  5. 如果未找到:
    • 按常规方式评估 PDF
    • 如有需要,手动解析表格

工作流集成点:

Stage 2: Deep Dive
├─ 1. Fetch Full Text (PMC → DOI → Unpaywall)
├─ 1.5. Check ChEMBL ← ADD THIS STEP
│   ├─ Query by DOI
│   ├─ If found: note ChEMBL ID + activity count
│   └─ Report to user
├─ 2. Scan for Relevant Content
└─ 3. Extract Findings

ChEMBL 中常见的活性类型

类型描述单位
IC50半数抑制浓度nM、µM
MIC最低抑菌浓度µg/mL、nM
Ki抑制常数nM、µM
EC50半数有效浓度nM、µM
Kd解离常数nM、µM
Potency一般效力测量值各种

按活性类型筛选:

curl "https://www.ebi.ac.uk/chembl/api/data/activity.json?document_chembl_id=ID&standard_type=MIC"

ChEMBL 覆盖范围

约 99,000 篇文献(截至 2025 年)

覆盖较好:

  • 药物化学论文
  • 涉及化合物系列的构效关系(SAR)研究
  • 先导化合物优化项目
  • 主要期刊上的论文(J Med Chem、Bioorg Med Chem、Eur J Med Chem 等)

覆盖较差:

  • 非常新的论文(整理工作滞后 6–12 个月)
  • 无法提取结构或活性数据的论文
  • 非药物研发研究
  • 纯机制研究

典型命中率:

  • 药物化学论文约为 30–40%
  • 聚焦 SAR 的期刊命中率更高

ChEMBL 数据的优势

与 PDF 表格解析相比:

  • ✓ 结构已提取(SMILES 格式)
  • ✓ 单位已标准化(所有 IC50 均以 nM 为单位)
  • ✓ 数值经过验证和整理
  • ✓ 机器可读的 JSON
  • ✓ 没有 OCR 错误
  • ✓ 与测定方案关联
  • ✓ 可查询(按活性范围、靶点等筛选)

仍需使用 PDF 的情况:

  • 完整的实验步骤
  • 合成路线
  • ChEMBL 中没有收录的论文
  • 非常新的论文
  • 背景和解读

进度报告

重要:对每篇相关论文都要报告 ChEMBL 检查结果

工作流报告示例:

📄 [15/50] Screening: "Novel MmpL3 inhibitors..."
   Abstract score: 8 → Checking ChEMBL...
   ✓ ChEMBL: CHEMBL3456789 (34 data points)
   → Fetching full text...
   → Added to SUMMARY.md with ChEMBL link

对于未收录在 ChEMBL 中的论文:

📄 [16/50] Screening: "Another paper..."
   Abstract score: 9 → Checking ChEMBL...
   ✗ Not in ChEMBL (likely too recent or review paper)
   → Fetching full text via Unpaywall...

辅助脚本模式

对于包含多篇药物化学论文的研究任务:

创建 check_chembl.py:

#!/usr/bin/env python3
import requests
import json
import sys

def check_chembl(doi):
    """Check if DOI is in ChEMBL and return summary

    IMPORTANT: Must use DOI, not PMID. ChEMBL API does not accept PMID queries.
    """

    # Query document (ONLY works with DOI)
    doc_url = f"https://www.ebi.ac.uk/chembl/api/data/document.json?doi={doi}"
    try:
        doc_response = requests.get(doc_url, timeout=10).json()
    except:
        return None

    # Check if found
    if doc_response.get('page_meta', {}).get('total_count', 0) == 0:
        return {'in_chembl': False}

    doc = doc_response['documents'][0]
    chembl_id = doc['document_chembl_id']

    # Get activity count
    act_url = f"https://www.ebi.ac.uk/chembl/api/data/activity.json?document_chembl_id={chembl_id}&limit=1"
    try:
        act_response = requests.get(act_url, timeout=10).json()
        activity_count = act_response.get('page_meta', {}).get('total_count', 0)
    except:
        activity_count = 0

    return {
        'in_chembl': True,
        'chembl_id': chembl_id,
        'activity_count': activity_count,
        'doc_type': doc.get('doc_type'),
        'title': doc.get('title')
    }

if __name__ == "__main__":
    doi = sys.argv[1]
    result = check_chembl(doi)

    if result and result['in_chembl']:
        print(f"✓ {result['chembl_id']} ({result['activity_count']} activities)")
    else:
        print("✗ Not in ChEMBL")

用法:

python3 check_chembl.py "10.1021/jm401507s"
# Output: ✓ CHEMBL3120156 (101 activities)

常见错误

使用 PMID 查询: 使用 PMID 而不是 DOI → 始终返回 0 条结果,ChEMBL 只接受 DOI 查询
跳过 ChEMBL 检查: 不检查药物化学论文 → 错过已提取的结构化数据
检查非药物化学论文: 检查基因组学/细胞生物学论文 → 浪费时间,这些论文不会收录在 ChEMBL 中
不报告状态: 静默进行 ChEMBL 检查 → 用户无法了解进展
未添加到 SUMMARY.md: 忘记添加 ChEMBL ID → 用户之后更难访问数据
只使用 ChEMBL: 论文在 ChEMBL 中时未获取全文 → 缺少背景、方法和讨论
ChEMBL 中已有数据却仍解析 PDF: 结构化数据可用时仍手动提取表格 → 浪费时间并引入错误

快速参考

任务命令
检查 DOI 是否在 ChEMBL 中curl "https://www.ebi.ac.uk/chembl/api/data/document.json?doi=DOI"
获取活性数据数量curl "https://www.ebi.ac.uk/chembl/api/data/activity.json?document_chembl_id=ID&limit=1"
获取所有活性数据curl "https://www.ebi.ac.uk/chembl/api/data/activity.json?document_chembl_id=ID&limit=1000"
按活性类型筛选curl "...activity.json?document_chembl_id=ID&standard_type=MIC"
ChEMBL 论文页面https://www.ebi.ac.uk/chembl/document_report_card/CHEMBL_ID/

权限

添加到 .claude/settings.local.json.template:

"Bash(curl*https://www.ebi.ac.uk/chembl/api/data/*)",
"WebFetch(domain:www.ebi.ac.uk)"

成功标准

满足以下条件即表示 ChEMBL 检查成功:

  • 已检查每篇药物化学论文(得分 ≥7)
  • 立即向用户报告 ChEMBL 状态
  • 将 ChEMBL ID 添加到 SUMMARY.md(如果找到)
  • 在摘要中注明活性数据数量
  • 更新 papers-reviewed.json 中的 ChEMBL 状态

后续步骤

检查 ChEMBL 后:

  • 如果找到:考虑为高度相关的论文(≥9)提取结构化数据
  • 继续评估全文,以了解背景
  • 对于未收录在 ChEMBL 中的论文:按常规流程解析 PDF/表格
  • 将所有发现更新到 SUMMARY.md

资源

评论

支持 Markdown