Преобразование названия молекулы в улыбки?

Мне было просто интересно, есть ли способ конвертировать IUPAC или обычные молекулярные имена в SMILES? Я хочу сделать это без необходимости вручную конвертировать все, используя онлайн-системы. Любой вклад будет высоко ценится!

Для справки, я сейчас работаю с python и RDkit, так что я не был уверен, сможет ли RDkit сделать это, и я просто не знал. Мои текущие данные в формате CSV.

Спасибо!

7 ответов

Решение

RDKit не может конвертировать имена в SMILES. Химический Идентификатор Resolver может преобразовывать имена и другие идентификаторы (например, CAS No) и имеет API, поэтому вы можете конвертировать с помощью скрипта.

from urllib.request import urlopen

def CIRconvert(ids):
    try:
        url = 'http://cactus.nci.nih.gov/chemical/structure/' + ids + '/smiles'
        ans = urlopen(url).read().decode('utf8')
        return ans
    except:
        return 'Did not work'

identifiers  = ['3-Methylheptane', 'Aspirin', 'Diethylsulfate', 'Diethyl sulfate', '50-78-2']

for ids in identifiers :
    print(ids, CIRconvert(ids))

Выход

3-Methylheptane CCCCC(C)CC
Aspirin CC(=O)Oc1ccccc1C(O)=O
Diethylsulfate CCO[S](=O)(=O)OCC
Diethyl sulfate Did not work
50-78-2 CC(=O)Oc1ccccc1C(O)=O

PubChemPy имеет несколько замечательных функций, которые можно использовать для этой цели. Он поддерживает систематические названия IUPAC, торговые названия и все известные синонимы для данного соединения, как задокументировано в базе данных PubChem:https://pubchempy.readthedocs.io/en/latest/

      >>> import pubchempy as pcp
>>> results = pcp.get_compounds('Glucose', 'name')
>>> print results
[Compound(79025), Compound(5793), Compound(64689), Compound(206)]

Первый аргумент — это идентификатор, а второй аргумент — это тип идентификатора, который должен быть одним из имени, смайлов, sdf, inchi, inchikey или формулы. Похоже, что в базе данных PubChem есть 4 соединения, с которыми связано название «глюкоза». Давайте рассмотрим их подробнее:

      >>> for compound in results:
>>>     print compound.isomeric_smiles

C([C@@H]1[C@H]([C@@H]([C@H]([C@H](O1)O)O)O)O)O
C([C@@H]1[C@H]([C@@H]([C@H](C(O1)O)O)O)O)O
C([C@@H]1[C@H]([C@@H]([C@H]([C@@H](O1)O)O)O)O)O
C(C1C(C(C(C(O1)O)O)O)O)O

Похоже, что все они имеют разную стереохимическую информацию!

OPSIN ( https://opsin.ch.cam.ac.uk/) - это еще одно решение для преобразования name2structure.

Его можно использовать, установив cli, или через https://github.com/gorgitko/molminer

(OPSIN также используется узлами RDKit KNIME)

В принятом ответе используется распознаватель химических идентификаторов, но по какой-то причине мне кажется, что на веб-сайте есть ошибки, а API - сбой.

Таким образом, еще один способ преобразовать улыбки в имя IUPAC - использовать API Python PubChem, который может работать, если ваши улыбки есть в их базе данных.

например

      #!/usr/bin/env python

import sys    
import pubchempy as pcp

smiles = str(sys.argv[1])
print(smiles)
s= pcp.get_compounds(smiles,'smiles')
print(s[0].iupac_name)

Для этого вы можете использовать pubchem API (PUG REST).

( https://pubchemdocs.ncbi.nlm.nih.gov/pug-rest-tutorial)

По сути, URL-адрес, который вы вызываете, будет принимать соединение как «имя», затем вы даете имя, затем указываете, что хотите «свойство» «CanonicalSMILES», как текст

      identifiers  = ['3-Methylheptane', 'Aspirin', 'Diethylsulfate', 'Diethyl sulfate', '50-78-2', 'Adamant']
smiles_df = pd.DataFrame(columns = ['Name', 'Smiles'])
for x in identifiers :
    try:
        url = 'https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/' + x + '/property/CanonicalSMILES/TXT'
#         remove new line character with rstrip
        smiles = requests.get(url).text.rstrip()
        if('NotFound' in smiles):
            print(x, " not found")
        else: 
            smiles_df = smiles_df.append({'Name' : x, 'Smiles' : smiles}, ignore_index = True)
    except: 
        print("boo ", x)
print(smiles_df)

Вы можете использовать пакетный запрос pubchem:

Если вы измените первую строку на:

из urllib2 импорт URL открыт

он должен работать для python 2.7

Другие вопросы по тегам