将分子名称转换为 SMILES?
Converting molecule name to SMILES?
我只是想知道,有什么方法可以将 IUPAC 或常见的分子名称转换为 SMILES?我想这样做而不必使用在线系统手动转换每一个。任何输入将不胜感激!
作为背景,我目前正在使用 python 和 RDkit,所以我不确定 RDkit 是否可以做到这一点,我只是不知道。我当前的数据是 csv 格式。
谢谢!
RDKit 无法将名称转换为 SMILES。
Chemical Identifier Resolver 可以转换名称和其他标识符(如 CAS 号),并且有一个 API,因此您可以使用脚本进行转换。
from urllib.request import urlopen
from urllib.parse import quote
def CIRconvert(ids):
try:
url = 'http://cactus.nci.nih.gov/chemical/structure/' + quote(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', 'Adamant']
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 CCO[S](=O)(=O)OCC
50-78-2 CC(=O)Oc1ccccc1C(O)=O
Adamant Did not work
OPSIN (https://opsin.ch.cam.ac.uk/) 是 name2structure 转换的另一种解决方案。
安装cli即可使用,也可通过https://github.com/gorgitko/molminer
使用
(OPSIN 也被 RDKit KNIME 节点使用)
如果将第一行更改为:
从 urllib2 导入 url 打开
它应该适用于 python 2.7
接受的答案使用 Chemical Identifier Resolver 但出于某种原因,该网站对我来说似乎有问题,API 似乎一团糟。
因此,将微笑转换为 IUPAC 名称的另一种方法是使用 PubChem python API,如果您的微笑在他们的数据库中,这种方法就可以工作
例如
#!/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的批量查询:
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)]
第一个参数为标识符,第二个参数为标识符类型,必须是name、smiles、sdf、inchi、inchikey或formula中的一个。看起来 PubChem 数据库中有 4 种化合物与名称 Glucose 相关联。让我们更详细地看看它们:
>>> 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
看起来它们的立体化学信息都不一样!
您可以为此使用 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)
我只是想知道,有什么方法可以将 IUPAC 或常见的分子名称转换为 SMILES?我想这样做而不必使用在线系统手动转换每一个。任何输入将不胜感激!
作为背景,我目前正在使用 python 和 RDkit,所以我不确定 RDkit 是否可以做到这一点,我只是不知道。我当前的数据是 csv 格式。
谢谢!
RDKit 无法将名称转换为 SMILES。 Chemical Identifier Resolver 可以转换名称和其他标识符(如 CAS 号),并且有一个 API,因此您可以使用脚本进行转换。
from urllib.request import urlopen
from urllib.parse import quote
def CIRconvert(ids):
try:
url = 'http://cactus.nci.nih.gov/chemical/structure/' + quote(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', 'Adamant']
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 CCO[S](=O)(=O)OCC
50-78-2 CC(=O)Oc1ccccc1C(O)=O
Adamant Did not work
OPSIN (https://opsin.ch.cam.ac.uk/) 是 name2structure 转换的另一种解决方案。
安装cli即可使用,也可通过https://github.com/gorgitko/molminer
使用(OPSIN 也被 RDKit KNIME 节点使用)
如果将第一行更改为:
从 urllib2 导入 url 打开
它应该适用于 python 2.7
接受的答案使用 Chemical Identifier Resolver 但出于某种原因,该网站对我来说似乎有问题,API 似乎一团糟。
因此,将微笑转换为 IUPAC 名称的另一种方法是使用 PubChem python API,如果您的微笑在他们的数据库中,这种方法就可以工作
例如
#!/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的批量查询:
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)]
第一个参数为标识符,第二个参数为标识符类型,必须是name、smiles、sdf、inchi、inchikey或formula中的一个。看起来 PubChem 数据库中有 4 种化合物与名称 Glucose 相关联。让我们更详细地看看它们:
>>> 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
看起来它们的立体化学信息都不一样!
您可以为此使用 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)