第1章 SMILES概述:从字符串到分子的第一把钥匙
写化学信息学代码这些年,我几乎每天都和SMILES打交道。你可能觉得它只是一串字母和符号,没啥了不起。但我告诉你,它是整个计算化学的“普通话”。当年我刚入行时,被各种文件格式搞得头大——MDL MOL、SDF、PDB……直到学会SMILES,才感觉世界清净了。今天我们就来聊聊SMILES的前世今生、基本语法,以及为什么它这么重要。
1.1 SMILES发展历史
SMILES全称是Simplified Molecular Input Line Entry System,说白了就是“分子输入行简化系统”。1988年,Arthur Weininger和David Weininger在Daylight Chemical Information Systems公司搞出来的。初衷很简单:让计算机能高效存储和交换分子结构。
我最早接触这个是在读研的时候,导师扔给我一个几万条分子的SMILES文件,说:“你把这堆东西去重、标准化,然后建个模型。”当时我一脸懵——这么短的字符串能代表整个分子?事实证明,不仅能,而且效率极高。
| 年份 | 里程碑 |
|---|---|
| 1988 | 第一版SMILES规范发布 |
| 1995 | Daylight开源SMILES解析器 |
| 2007 | OpenSMILES标准出现,避免专利陷阱 |
| 2010+ | RDKit、OpenBabel等库深度集成SMILES |
| 2020 | SMILES成为QSAR、药物发现领域标配 |
1.2 SMILES基本语法
语法不难,核心就几条规则。我们先看一个例子:
乙醇的SMILES:CCO
水的SMILES:O
苯的SMILES:c1ccccc1
醋酸:CC(=O)O
是不是比画结构式快多了?好,我们拆开讲。
1.2.1 原子表示
- 元素符号直接写:C、N、O、S、P、Cl、Br、I等。注意:Cl是两个字符,不是C l。
- 芳香族原子用小写:c、n、o、s。比如苯环里的碳写成c。
- 方括号
[ ]用于特殊原子:离子、同位素、手性。例如[Fe+3]、[13C]、[C@@H]。
[Pt(Cl)2(NH3)2]给一个老式计算器,结果它把Pt识别成了P和t……后来我养成习惯——凡是金属原子哪怕没括号也加方括号,比如[Pt]。
1.2.2 化学键
- 单键:省略不写,或写
-(可读性上用)。 - 双键:
= - 三键:
# - 芳香键:省略(大写字母就是单键,小写就是芳香键)。
1.2.3 分支与环
- 分支用圆括号
()包裹。例如异丙醇:CC(C)O—— 中间的C上连着一个支链甲基。 - 环用数字标记开环和闭环。例如环己烷:
C1CCCCC1。数字1出现了两次,表示这个环在第一个C和最后一个C之间闭合。
# 分支示例
乙醚:CCOCC
丙酸:CCC(=O)O
# 环示例
环戊烷:C1CCCC1
甲苯:Cc1ccccc1
1.2.4 手性与同位素
手性用@或@@表示,放在方括号内的原子后。比如[C@H](C)(O)C。同位素用数字前缀:[14C]、[13CH3]。
Chem.MolFromSmiles)把SMILES转成规范形式,避免手性写法不一致的问题。
1.3 SMILES在化学信息学中的重要性
说白了你想想看,如果没有SMILES,每次存一个分子都要存几百个原子的三维坐标,那数据库得多大?SMILES用几个字符就能搞定,而且它:
- 唯一性:规范SMILES(canonical SMILES)对同一个分子只有一个字符串。
- 可计算:可以直接算分子指纹、物理化学性质、分子量、logP等。
- 可搜索:子结构匹配、相似性搜索都基于SMILES。
- 跨平台:无论你用什么工具——RDKit、OpenBabel、ChemAxon——都能解析同一串字符。
我做项目时最爽的一次体验,是从一个公开化合物库(PubChem)下载了1亿条SMILES,然后用RDKit批量生成分子指纹。整个过程就一个for循环,耗时不到1小时。如果没有SMILES,光是文件格式转换就得搞一整天。
后面的章节我们会一步步深入:从SMILES解析到分子指纹计算,再到实际项目中的应用。这一章你已经掌握了基本语法,建议你打开RDKit或OpenBabel,把上面例子里的SMILES字符串输进去,看看能不能还原出结构式——实践出真知。