1、SMILES简介:什么是SMILES,化学结构线性表示法
咱们做化学信息学或药物设计的人,每天都跟分子结构打交道。你想想看,一个药物分子可能有几十个原子、几十根键,如果每次都要画结构图再传给程序,那效率得多低?所以就需要一种能用一串字符完整描述分子结构的方式——这就是 SMILES。
简单来说,SMILES 是一套用 ASCII 字符表示化学结构的规则。它把原子、键、分支、环、立体化学全都压缩进一行文本里。我最开始接触这玩意儿是在做分子指纹提取的时候,当时觉得“就这?一行字符串能表达三环类化合物?”结果试了几次,发现它不仅行,还挺优雅。
一句话总结:SMILES = 用字母、数字、符号给分子“写身份证”。
SMILES 的起源
这套系统最早由 David Weininger 在 1980 年代提出,目的是解决药物筛选系统里的结构输入问题。那时候没有图形界面,所有数据都靠键盘敲。嗯,说实话,在那个年代能想出用深度优先遍历树的方式来表示分子,确实很聪明。
后来它成了化学信息学的事实标准,RDKit、OpenBabel、ChemDraw 全部原生支持。我有个项目需要把 10 万个小分子从 SDF 转成 SMILES,用 RDKit 几秒钟就跑完了——前提是 SMILES 本身得规范。
核心表示规则
SMILES 的核心思路很简单:从分子中选择一个起点原子,沿着键深度优先遍历整个图,用特定符号记录每个节点和连接方式。
| 元素/结构 | 表示方法 | 示例 |
|---|---|---|
| 常规原子 | 元素符号(大写字母,不写氢) | C、O、N、Cl |
| 双键、三键 | = 、# | C=O、C#N |
| 单键 | 缺省或连写两个字母 | CO、CCO |
| 分支 | 括号包裹子结构 | CC(O)C(异丙醇) |
| 环 | 开环/成环处用相同数字标记 | C1CCCCC1(环己烷) |
| 上标电荷/脱氢 | 用 +/- 和数字 | [NH4+]、[Fe+3] |
| 同位素 | 原子符号前加数字 | [13C] |
我给你看一个乙醇的例子。乙醇的结构是 CH₃CH₂OH,SMILES 写出来是:
CCO
就三个字母。为啥?因为 SMILES 自动补氢——C 默认连 4 个 H,O 连 2 个 H。除非你显式写 [OH] 来强制指定连接方式。我曾经刚入门时犯过一个错误:把乙醚写成了 CCOCC,结果输出是正丁醇……因为多写了一个 C 导致链长变了。踩过的坑,你记住了。
小技巧:如果你不确定某个 SMILES 对不对,丢到 chembl 或者 pubchem 的 SMILES 解析器里看看生成的二维结构图。一眼就能发现括号或数字用错了没。
分支与环的处理:咱们细说
分支用圆括号表示。括号里的内容挂在前一个原子上。比如异丙醇(2-丙醇):
CC(O)C
解析顺序:C1 → C2,括号里 O 挂在 C2 上,括号结束继续连 C3。说白了就是从主链上长出一根枝桠。
环的表示稍微 tricky 一些。你需要选择一个成环的原子,并在它后面写一个相同的数字标记环的起点和终点。比如环己烷是 6 个碳连成环:
C1CCCCC1
第一个 C 后写 “1”,最后一个 C 后又写 “1”,表示这两个 C 用单键连接成环。数字可以任意用 1 到 999,但同一个 SMILES 里不能重复(除非是多个独立环)。
我曾经接手一个数据库,里面有个化合物的 SMILES 写的是:
C1=CC=CC=C1C2=CC=CC=C2
乍一看是联苯,但实际上是苯环上连另一个苯——“1”和“2”分别标记了两个六元环。注意数字不能混用,这一点经常有人搞错。
常见坑与注意事项
避坑清单:
- 不要漏写氢原子上的电荷标记,比如氨基正离子记得写 [NH3+]。
- 芳香环优先用小写字母 c、o、n 表示芳环原子(如苯写成 c1ccccc1),但很多工具也能处理大写的 C 和单双键交替写法。
- 立体化学用 / 和 \ 符号,比如顺反异构:C/C=C/C。如果不了解这个,解析时可能会错。
- 同一个分子可以有多种等价的 SMILES 写法(不同的遍历起点和分支顺序)——所以实际应用中常用“标准 SMILES”或“规范化 SMILES”来保证字符串唯一性。
说白了,SMILES 就是个约定——你按这个约定写,计算机就能认出这是一个分子。你想想看,一个 80 个原子的复杂天然产物,用一行文本就能描述,后面所有计算(指纹、相似度、机器学习)都基于这个字符串,效率高得惊人。
SMILES 的主要应用场景
- 分子数据库索引:PubChem、ZINC、ChEMBL 都提供 SMILES 作为主键。
- 分子指纹计算:Morgan 指纹、MACCS 指纹通常从 SMILES 生成。
- 机器学习特征:直接对 SMILES 做序列建模(RNN、Transformer)来预测性质或生成新分子。
- 结构搜索:子结构匹配和相似度搜索依赖规范的 SMILES 表示。
我记得前两年做个骨架跃迁的对比,想从某个专利化合物出发找替代 scaffold。用 SMILES 做子结构匹配,配合 RDKit 的 ReplaceCore 函数,几分钟筛了几万个类似物——要是没有 SMILES,光手画结构图就得画到天亮。