使用SMILES代码进行相似性搜索

时间:2017-11-06 06:16:09

标签: python babel openbabel pybel molecule

目前,我正在开发一个基于网络的系统,它将存储自然的复合信息。在该系统中,将存在用户将键入微笑代码并且系统将进行其相似性或子结构搜索的特征。

但是,该组织提供的数据中唯一有用的属性是微笑代码。我读过openbabel的东西,对我来说这很复杂,因为我对化合物的数据有限。

我的问题是,

我们是否可以仅使用SMILES代码进行相似性或子结构搜索?

1 个答案:

答案 0 :(得分:0)

是有可能的,尽管我确信OpenBabel也会做得很好,但我还是建议使用RDKit – https://www.rdkit.org/docs/GettingStartedInPython.html

为数据库中的分子生成分子指纹(并存储这些指纹),通常可以存储设置的位的索引而不是完整的位向量:

from rdkit import Chem
from rdkit.Chem import AllChem
db_fingerprints = [AllChem.GetMorganFingerprintAsBitVect(Chem.MolFromSmiles(m), 2, nBits=1024) for m in db_smiles]

然后,您可以使用查询微笑来搜索该数据库

query_smiles = 'c1ccccc1'
query_fp = AllChem.GetMorganFingerprintAsBitVect(Chem.MolFromSmiles(query_smiles), 2, nBits=1024)
results = [AllChem.DataStructs.FingerprintSimilarity(query_fp, db_fp) for db_fp in db_fingerprints]

这将输出相似性列表(与db_smiles相同的顺序)。您将需要根据需要对这些SMILES进行排序和压缩,并附带这些相似性