IUPAC和SMILES的相互转换

这种方法只能解决非常简单的转换,更难的SMILES之间应该是无法直接转换,我可能很多人都使用神经网络解决 ,暂时还没仔细看,后面再仔细看吧...

简单的转换: 

import urllib.error
import urllib.parse
import urllib.request

SMILES_URL_TEMPLATE = 'http://cactus.nci.nih.gov/chemical/structure/{}/smiles'
IUPAC_URL_TEMPLATE = 'http://cactus.nci.nih.gov/chemical/structure/{}/iupac_name'

def retrieve(url):
    with urllib.request.urlopen(url) as f:
        return f.read()

def iupac2smiles(iupac):
    quoted_iupac = urllib.parse.quote(iupac)
    smiles_url = SMILES_URL_TEMPLATE.format(quoted_iupac)
    return retrieve(smiles_url).decode('utf-8')

def smiles2iupac(smiles):
    quoted_smiles = urllib.parse.quote(smiles)
    iupac_url = IUPAC_URL_TEMPLATE.format(quoted_smiles)
    return retrieve(iupac_url).decode('utf-8')


convert = None
src = None
dst = None
# iupac2smiles/smiles2iupac
change_direction = 'smiles2iupac'
if change_direction == 'iupac2smiles':
    convert = iupac2smiles
    src = 'iupac'
    dst = 'smiles'
elif change_direction == 'smiles2iupac':
    convert = smiles2iupac
    src = 'smiles'
    dst = 'iupac'

try:
    # 输入的化合物名称
    input_compound_name = "CCCC"
    output_compound_name = convert(input_compound_name)
    # 输出转换后的化合物名称
    print(output_compound_name)

except urllib.error.HTTPError as e:
    print('[{src}] {original}\n: error {error}'.format(src=src, original=input_compound_name, error=e.code))

复杂的转换:

STOUT: SMILES to IUPAC names using neural machine translation:STOUT: SMILES to IUPAC names using neural machine translation | Journal of Cheminformatics | Full Text

Transformer-Based Molecular Generative Model for Antiviral Drug Design....

你可能感兴趣的:(AIDrug,人工智能)