用途
Medchem 是一个用于药物发现中分子过滤与优先级排序的 Python 库,由 datamol-io 开发。它构建在 RDKit 和 datamol 之上,可对大规模化合物库进行筛选和分类,应用文献来源的药物相似性规则、命名警示目录、复杂度阈值、化学基团检测以及自定义查询语言。过滤器是上下文相关的指导原则,应结合领域专业知识和靶点知识使用。
主要能力
1. 药物化学规则
通过 medchem.rules 应用已建立的药物相似性规则。可列出可用规则名称,对单个分子应用单条规则(如 rule_of_five、rule_of_cns、rule_of_veber),或使用 RuleFilters 对多个分子应用多条规则并返回 DataFrame。设置 keep_props=True 可在结果中包含计算出的描述符(mw、clogp、tpsa 等)。
2. 结构警示过滤器
通过 medchem.structural 检测有问题的模式。CommonAlertsFilters 基于 ChEMBL 衍生规则集,NIBRFilters 用于诺华筛选库管理。两者均返回包含 pass_filter、status、reasons 等列的 DataFrame。NIBR 过滤器中 severity >= 10 的化合物默认被排除。
3. 命名目录过滤器
使用 medchem.catalogs.NamedCatalogs 获取 RDKit FilterCatalog 实例,或使用函数式 API。可用目录包括 tox、pains、pains_a、brenk、nibr、zinc 等。函数式 API 中 True 表示分子通过(无警示匹配)。
4. 函数式 API
medchem.functional 提供一次性包装函数,返回布尔掩码(True = 通过),包括 rules_filter、nibr_filter、alert_filter、complexity_filter、catalog_filter、chemical_group_filter、lilly_demerit_filter(需要可选二进制文件)、macrocycle_filter、bredt_filter、protecting_groups_filter 等。
5. 化学基团
通过 medchem.groups 检测官能团和精选模式集合。可浏览可用基团集合(如 privileged_scaffolds、common_warhead_covalent_inhibitors、rings_in_drugs 等),使用 ChemicalGroup 进行匹配检测、获取匹配原子索引或过滤分子。自定义基团可通过 groups_db 从文件加载(CSV 包含 smiles/smarts、name、group 列)。
6. 分子复杂度
将复杂度指标与预计算的 ZINC-15 百分位阈值进行比较。支持 bertz、sas、qed、whitlock、barone、smcm、twc 等指标。可直接调用 mc.complexity.WhitlockCT(mol)、mc.complexity.BaroneCT(mol) 等函数。
7. 骨架约束
medchem.constraints.Constraints 匹配核心骨架并应用逐原子约束函数,而非简单的分子量/LogP 范围。属性边界应使用 RuleFilters、mc.rules.list_descriptors() 或查询语言。
8. Medchem 查询语言
使用 medchem.query.QueryFilter 构建多条件过滤器。支持 MATCHRULE、HASALERT、HASPROP、HASGROUP、HASSUBSTRUCTURE 等语法,以及 AND、OR、NOT 操作符。可通过 mc.rules.list_descriptors() 列出可用描述符。
使用方式
安装:uv pip install medchem datamol 可选 Lilly demerit 过滤器:mamba install -c conda-forge lilly-medchem-rules
典型工作流包括:化合物库初步筛选(结合规则和警示)、先导化合物优化过滤(结合类先导规则、NIBR 过滤和复杂度)、官能团检测。建议对超过 1000 个分子的库使用 n_jobs=-1 并行化。注意 RuleFilters 和结构类返回 DataFrame,函数式辅助函数返回布尔数组。
适用场景
- 将药物相似性规则(Lipinski、Veber、CNS、类先导)应用于化合物库
- 按结构警示、PAINS 或 NIBR 筛选库规则过滤分子
- 为先导化合物优化排序化合物
- 根据 ZINC 衍生阈值计算复杂度指标
- 检测官能团或命名子结构目录
- 使用 medchem 查询语言构建多条件过滤器
限制
- 版本说明:示例针对 medchem 2.0.5(PyPI 稳定版,2024 年 11 月),要求 Python ≥3.9
- Lilly demerits 需要可选的原生二进制文件,函数式 API 中默认最大 demerits 为 160
- 过滤器是上下文相关的指导原则,上市药物常违反 Ro5,前药和天然产物是常见例外
- 计算预测是假设而非实验结果,应如此标注
- 版本特定细节可能已过时,应针对已安装版本的官方文档进行确认
- 官方文档:https://medchem-docs.datamol.io/,GitHub:https://github.com/datamol-io/medchem,PyPI:https://pypi.org/project/medchem/