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,光手画结构图就得画到天亮。

本章知识结构图

SMILES 知识体系 SMILES 线性表示法 起源:David Weininger 1980s 核心规则:原子·键·分支·环 应用:索引·指纹·ML·搜索 原子符号 键符号 = # 括号分支 数字成环 立体化学 / \ 一个分子可以对应多个 SMILES,但规范化的 SMILES 是唯一的