Поиск сходства с использованием кода SMILES
В настоящее время я занимаюсь разработкой веб-системы, которая будет хранить естественную информацию о соединениях. В этой системе будет функция, при которой пользователь будет вводить код смайлов, а система будет выполнять поиск по сходству или по подструктуре.
Однако единственным полезным атрибутом в данных, предоставляемых этой организацией, является код смайлов. Я прочитал материал openbabel, и для меня это довольно сложно, так как у меня ограниченные данные о соединении.
Мой вопрос
Возможно ли для нас выполнить поиск сходства или подструктуры, просто используя код SMILES?
1 ответ
Да, это возможно, я рекомендую использовать RDKit для этого, хотя я уверен, что OpenBabel тоже отлично справится - 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
). Вам нужно будет сортировать и застегивать УЛЫБКИ вместе с этими сходствами по мере необходимости