You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用RDKit实现化合物计算分类及相关内置功能技术问询

基于RDKit的化合物类别判定方案

核心功能说明

RDKit内置了成熟的官能团识别能力,不需要自行从零编写所有子结构匹配规则,核心依赖rdkit.Chem.Fragments模块的预设统计函数,底层基于SMARTS子结构匹配逻辑,完全可以覆盖卤化物、胺、醇这类常见类别的分类需求。如果需要自定义更细分的类别,也可以自己编写对应特征的SMARTS规则手动匹配。

常见类别判定方法

  • 卤化物判定:直接调用Fragments.fr_halogen()方法,返回值大于0即说明分子包含卤素原子(氟/氯/溴/碘),属于卤化物范畴。如果需要细分具体卤素类别,可自定义SMARTS规则(比如[F]匹配氟化物、[Cl]匹配氯化物)后调用Mol.HasSubstructMatch()方法判断。
  • 胺类(Amine)判定:调用Fragments.fr_amine()方法,返回值大于0即可判定为胺类。如果需要细分脂肪胺、芳香胺、伯/仲/叔胺,可以调用对应细分函数,比如fr_Al_amine判定脂肪胺、fr_Ar_N判定芳香胺,也可以自定义SMARTS(比如伯胺匹配规则为[NX3;H2][#6])做更精准的分类。
  • 醇类(Alcohol)判定:调用Fragments.fr_Al_OH()方法,返回值大于0说明分子含有脂肪族羟基,同时结合Fragments.fr_Ar_OH() == 0排除酚类的干扰,即可准确判定为醇类。

可运行代码示例

from rdkit import Chem
from rdkit.Chem import Fragments

def compound_classifier(smiles: str) -> list:
    mol = Chem.MolFromSmiles(smiles)
    if not mol:
        return ["无效SMILES字符串"]
    classify_res = []
    # 卤化物判断
    if Fragments.fr_halogen(mol) > 0:
        classify_res.append("卤化物")
    # 胺类判断
    if Fragments.fr_amine(mol) > 0:
        classify_res.append("胺类")
    # 醇类判断(排除酚类)
    if Fragments.fr_Al_OH(mol) > 0 and Fragments.fr_Ar_OH(mol) == 0:
        classify_res.append("醇类")
    return classify_res if classify_res else ["未匹配到目标类别"]

# 测试样例
print(compound_classifier("CCO"))    # 乙醇 -> ['醇类']
print(compound_classifier("CCN"))    # 乙胺 -> ['胺类']
print(compound_classifier("CC(Cl)Cl"))# 二氯乙烷 -> ['卤化物']
print(compound_classifier("c1ccccc1O"))# 苯酚 -> ['未匹配到目标类别']

其他计算化学库实现思路

如果使用OpenBabel等其他计算化学库,逻辑和RDKit完全一致,核心都是基于特征子结构的SMARTS匹配,大部分库也会内置常用官能团的匹配规则,直接调用对应接口即可,没有内置规则的场景自行定义SMARTS匹配即可实现分类。

内容的提问来源于stack exchange,提问作者sudododo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:24:04