用途:Medchem 是面向药物发现的 Python 分子过滤与优先级排序库,用于对化合物库进行批量分类与筛选,支持命中到先导及先导优化的化合物优先级排序。
主要能力:
- 成药性规则:通过 medchem.rules 应用 Lipinski(rule_of_five)、Veber、CNS、lead-like 等文献规则,RuleFilters 可批量返回 DataFrame。
- 结构警示过滤:medchem.structural 提供 CommonAlertsFilters(ChEMBL 衍生)与 NIBRFilters(诺华筛选库整理),返回 pass_filter、status、reasons 等列。
- 命名目录过滤:medchem.catalogs.NamedCatalogs 提供 PAINS、Brenk、tox、zinc 等 RDKit FilterCatalog。
- 函数式 API:medchem.functional 提供 rules_filter、nibr_filter、alert_filter、complexity_filter 等一次性封装,返回布尔掩码(True 表示通过)。
- 化学基团:medchem.groups 检测 privileged_scaffolds、共价弹头等官能团与子结构集合。
- 分子复杂度:medchem.complexity 将 bertz、sas、qed 等指标与 ZINC-15 百分位阈值比较。
- 查询语言:medchem.query.QueryFilter 支持 MATCHRULE、HASALERT、HASPROP、HASGROUP、HASSUBSTRUCTURE 及 AND/OR/NOT 组合多条件过滤。
使用方式:安装命令为 uv pip install medchem datamol;可选 Lilly demerit 过滤需 mamba install -c conda-forge lilly-medchem-rules。要求 Python ≥3.9,依赖 datamol 与 RDKit(自动安装)。示例针对 medchem 2.0.5。批量脚本用法:uv run python scripts/filter_molecules.py input.csv --rules rule_of_five,rule_of_cns --pains --nibr --output filtered.csv。
适用场景:化合物库初步分类、先导优化过滤、官能团检测、多条件组合筛选。
限制:过滤器为情境相关指南,需结合领域知识与靶点信息;上市药物常违反 Ro5,前药与天然产物为常见例外;Lilly demerits 需额外原生二进制;RuleFilters 与结构类返回 DataFrame,函数式助手返回布尔数组;建议对超过 1000 个分子使用 n_jobs=-1 并行。官方文档见 https://medchem-docs.datamol.io/,GitHub 见 https://github.com/datamol-io/medchem。