---
title: "Tanimoto 相似度与 SMARTS 子结构搜索详解 | MolDraw 博客"
url: https://www.moldraw.com/zh/blog/tanimoto-similarity-substructure-search-guide.html
description: "分子指纹以及 Tanimoto 和 Dice 公式如何给两个分子打分、0.85 分意味着什么，以及如何用 SMARTS 搜索分子，附免费工具。"
lang: zh-CN
publisher: Scidart Academy
generated: 2026-10-26
---
# Tanimoto 相似度与 SMARTS 子结构搜索详解，附免费工具

发布：2026年10月19日 · 作者：Scidart Academy · 阅读时间：约 7 分钟

![两个药物分子并排显示，下方是一个 Tanimoto 相似度刻度条](https://www.moldraw.com/blog/thumbs/tanimoto-similarity-substructure-search-guide.webp)

Tanimoto 相似度衡量两个分子共有多少个指纹位。

**简答：**Tanimoto 相似度比较两个分子的指纹：T = c / (a + b − c)，其中 a 和 b 是各分子中被置位的位数，c 是两者共有的位数。取值范围为 0 到 1。打开[分子相似性与子结构搜索](https://www.moldraw.com/zh/tools/free-chem-tools/molecular-similarity-substructure-search.html)工具，输入两个 SMILES 并点击**比较**。阿司匹林与水杨酸得分 0.554（中等相似）。进行模式搜索时，可以用 SMARTS，例如用 `[CX3](=O)[OX2H1]` 表示羧酸。

## 关键术语，一句话解释

| 分子指纹 | 一串二进制位。当分子含有某种结构片段时，对应的位为开（1）。 |
| --- | --- |
| Tanimoto 系数 | c / (a + b − c)。共有位数除以任一分子中被置位的全部位数。范围 0 到 1。 |
| Dice 系数 | 2c / (a + b)。给共有位双倍权重。总是至少与 Tanimoto 一样高。 |
| 子结构 | 较大分子中一组相连的原子和化学键，例如苯环或 COOH 基团。 |
| SMARTS | 一种基于 SMILES 的模式语言，用于描述带有原子和化学键条件的子结构。 |
| 公共子结构 | 两个分子中都存在的最大相连原子和化学键集合。 |

## 分子指纹的工作原理

计算机无法直接比较两幅结构图，所以要把每个分子转换为指纹。常见的有三类：

- **片段字典指纹**每个预定义片段对应一位，例如与氧相连的羰基。MACCS 键（166 位）就是这样工作的。
- **路径指纹**把每条不超过设定长度的原子线性路径哈希到某一位。
- **环形指纹**（ECFP、Morgan）把每个原子周围半径为 2 或 3 个键的环境哈希到某一位。

MolDraw 工具使用 **512 位片段字典指纹**，与[分子比较插件](https://www.moldraw.com/zh/blog/compare-molecules-plugin-tanimoto-similarity.html)相同。阿司匹林置位了 512 位中的 74 位，水杨酸置位了 41 位。较大的分子通常置位更多。

指纹记录哪些原子相互键合，但不记录楔形键或 3D 形状。这就是 L-丙氨酸和 D-丙氨酸得分为 1.000 的原因。

## Tanimoto 公式与计算示例

设 a 为分子 A 中为开的位数，b 为分子 B 中的位数，c 为两者共有的位数。

- **Tanimoto：**T = c / (a + b − c)
- **Dice：**D = 2c / (a + b) = 2T / (1 + T)

**计算示例，阿司匹林与水杨酸：**

1. 阿司匹林，CC(=O)Oc1ccccc1C(=O)O：a = 74 位。
2. 水杨酸，OC(=O)c1ccccc1O：b = 41 位。
3. 两者共有：c = 41。水杨酸的每一位也都在阿司匹林中。
4. 并集 = a + b − c = 74 + 41 − 41 = 74。
5. T = 41 / 74 = **0.554**。D = 82 / 115 = **0.713**。

水杨酸是阿司匹林的子结构，但得分只是中等。阿司匹林乙酰酯基多出的 33 位拉低了分数。Tanimoto 会惩罚大小差异，当你想找大小相近的类似物时，这一点很有用。

Tanimoto 是**对称的**：A 对 B 与 B 对 A 的结果相同。完全相同的指纹得分恰好为 1。

## Tanimoto 分数的含义

| 0.85 至 1.00 | 非常相似。近似类似物，或在 1.00 时为同一分子。 |
| --- | --- |
| 0.70 至 0.85 | 相似。共有核心结构，只有一两个基团不同。 |
| 0.50 至 0.70 | 中等相似。有一些共同片段，骨架或取代基不同。 |
| 0.30 至 0.50 | 弱相似。只有一个环或一个官能团相同。 |
| 低于 0.30 | 不相似。 |

这些阈值适用于这里使用的 512 位片段指纹。使用 ECFP4 等环形指纹时，同一对分子的分数往往更低，0.4 就可能意味着相关化合物。永远不要在同一张表中混用两种指纹的分数。

## 用于子结构搜索的 SMARTS 基础

普通 SMILES 本身就是一个查询：`c1ccccc1` 可以找到每个苯环。方括号为单个原子添加条件。

| `#7` | 原子序数 7：任何氮，无论是否芳香。 |
| --- | --- |
| `c` / `C` | 芳香碳 / 脂肪碳。 |
| `H1`、`!H0` | 恰好一个氢 / 至少一个氢。 |
| `X3`、`D2` | 总共三个连接（含 H）/ 两个重原子邻居。 |
| `R`、`R0`、`r5` | 在环中 / 不在环中 / 在五元环中。 |
| `,` `;` `!` | 或 / 与 / 非。`[F,Cl,Br,I]` 表示任意卤素。 |
| `-` `=` `#` `:` `~` | 单键、双键、三键、芳香键和任意键。 |

常用模式：

- 羧酸：`[CX3](=O)[OX2H1]`
- 酯：`[#6][CX3](=O)[OX2][#6]`
- 伯烷基胺：`[NX3;H2][CX4]`
- 芳基卤：`c[F,Cl,Br,I]`
- Lipinski 氢键供体：`[#7,#8;!H0]`。Lipinski 氢键受体：`[#7,#8]`

该工具目前还不支持用 `$( )` 写的递归 SMARTS 或用点分隔的查询。请用相邻原子改写这类条件。

## 如何使用 MolDraw 相似性与子结构工具

1. 打开[分子相似性与子结构搜索](https://www.moldraw.com/zh/tools/free-chem-tools/molecular-similarity-substructure-search.html)页面。默认打开的是**相似性**标签页。
2. 在**分子 A（SMILES）**和**分子 B（SMILES）**中输入 SMILES，然后点击**比较**。如果想绘图，在**绘图填入**旁边选择**分子 A**或**分子 B**，然后在编辑器中绘制。点击**吗啡 vs 可待因**等示例试一试。
3. 查看 Tanimoto 和 Dice 分数、相似程度判断和彩色条。表中显示 a、b 和 c，你可以核对计算。着色的原子是最大公共子结构。
4. 要对许多分子排序，在**将一组分子与分子 A 排序比较**下每行粘贴一个 SMILES（SMILES 后面可以加名称），然后点击**排序**。用 **Download CSV** 保存表格。
5. 进行模式搜索时，打开**子结构搜索**。输入查询或点击速查表按钮，粘贴目标分子，然后点击**搜索**。勾选**只显示匹配的分子**可隐藏其余分子。

## 例题

### 例 1：对乙酰氨基酚与非那西丁

非那西丁（CCOc1ccc(NC(C)=O)cc1）在对乙酰氨基酚的 OH 位置上是乙氧基。Tanimoto = **0.846**，Dice = 0.917。判断：相似，刚好低于“非常相似”的界线。共同核心是整个乙酰苯胺单元。

### 例 2：以布洛芬为参照对 NSAID 排序

点击**示例：NSAIDs 与布洛芬比较**。萘普生排第一（0.711），其次是酮洛芬（0.691）和氟比洛芬（0.681）。这三者都是 2-芳基丙酸。双氯芬酸得分 0.336，咖啡因以 0.106 排在最后。

### 例 3：哪些药物是羧酸？

在 9 种示例药物上查询 `[CX3](=O)[OX2H1]`：**9 种中有 6 种匹配**。对乙酰氨基酚、塞来昔布和咖啡因不匹配。每个酸基都在结构图中着色显示。

### 例 4：对乙酰氨基酚中的 Lipinski 供体

在 CC(=O)Nc1ccc(O)cc1 上查询 `[#7,#8;!H0]`，得到 **2 个匹配**：酰胺 N–H 和酚 O–H。受体查询 `[#7,#8]` 得到 3 个：N、C=O 的氧和 OH 的氧。

### 例 5：对映异构体

L-丙氨酸与 D-丙氨酸的 Tanimoto 为 **1.000**。工具会附加提示，说明两者只在立体化学上不同。

## 汇总表

| 阿司匹林 vs 水杨酸 | T = 0.554，D = 0.713，中等相似 |
| --- | --- |
| 对乙酰氨基酚 vs 非那西丁 | T = 0.846，相似 |
| 吗啡 vs 可待因 | T = 0.944，非常相似 |
| 布洛芬 vs 萘普生 | T = 0.711，相似 |
| 苯 vs 环己烷 | T = 0.000，不相似 |
| 羧酸 SMARTS | `[CX3](=O)[OX2H1]` |
| 供体和受体 SMARTS | `[#7,#8;!H0]` 和 `[#7,#8]` |

## 常见错误

- **比较不同指纹得到的分数。**一种指纹上的 0.6 并不等于另一种指纹上的 0.6。
- **期望立体异构体得分不同。**二维指纹忽略立体化学。
- **把相似度当作活性。**改变一个原子就可能让药物失效。
- **查询中省略了氢。**`C(=O)O` 也会匹配酯。羧酸的 OH 请用 `[OX2H1]`。
- **混淆 c 和 C。**`C1CCCCC1` 是环己烷，不会匹配苯。
- **忘记盐和电荷。**羧酸根 `[O-]` 不会匹配 OH 查询。

## 问题与解答

### 多少 Tanimoto 相似度分数算高？

对于 MolDraw 工具使用的 512 位片段指纹，0.85 及以上为非常相似，0.70 至 0.85 为相似，0.50 至 0.70 为中等相似，0.30 至 0.50 为弱相似，低于 0.30 为不相似。阈值会随指纹类型变化，所以只能比较同一种方法得到的分数。

### 如何计算 Tanimoto 系数？

数出分子 A 中被置位的位数（a）、分子 B 中的位数（b）以及两者共有的位数（c）。Tanimoto = c / (a + b − c)。阿司匹林（a = 74）与水杨酸（b = 41），c = 41，Tanimoto = 41 / 74 = 0.554。

### Tanimoto 相似度和 Dice 相似度一样吗？

不一样。两者使用相同的计数，但 Dice = 2c / (a + b)。Dice 总是等于或高于 Tanimoto，两者的关系为 Dice = 2T / (1 + T)。Tanimoto 0.554 对应 Dice 0.713。

### 为什么工具对两个不同的分子给出 1.000？

指纹记录的是连接关系，而不是 3D 形状。对映异构体、非对映异构体和 E/Z 异构体具有相同的片段，所以得分为 1.000。当两个输入只在立体化学上不同时，工具会显示一条提示。

### SMILES 和 SMARTS 有什么区别？

SMILES 描述一个分子。SMARTS 描述许多分子都可能包含的一种模式。每个 SMILES 都是合法的 SMARTS，但 SMARTS 还增加了条件，例如 H1（一个氢）、X3（三个连接）、R（在环中），以及用逗号（或）、分号（与）和感叹号（非）表示的逻辑。

### 如何在一组分子中找出所有羧酸？

打开“子结构搜索”标签页，在速查表中点击 Carboxylic acid 载入 [CX3](=O)[OX2H1]，粘贴你的 SMILES 列表并点击“搜索”。在 9 种药物的示例集中，有 6 种匹配：布洛芬、萘普生、酮洛芬、氟比洛芬、双氯芬酸和阿司匹林。

### 能用 SMARTS 数氢键供体吗？

能。模式 [#7,#8;!H0] 匹配每个至少带一个氢的氮或氧，这就是 Lipinski 供体计数。对乙酰氨基酚得到 2 个匹配，受体模式 [#7,#8] 得到 3 个。

### 相似度高是否意味着两个分子活性相同？

不一定。相似的分子往往具有相似的活性，这就是相似性搜索被用来寻找类似物的原因。但一个小改动，比如一个甲基或一个手性中心，就可能使活性消失。请把分数当作参考，而不是证据。

## 相关工具

[分子相似性与子结构搜索](https://www.moldraw.com/zh/tools/free-chem-tools/molecular-similarity-substructure-search.html) [肽和 DNA 序列转结构式](https://www.moldraw.com/zh/tools/free-chem-tools/peptide-dna-sequence-to-structure.html) [官能团识别工具](https://www.moldraw.com/zh/tools/free-chem-tools/functional-group-identifier.html) [Lipinski 五规则计算器](https://www.moldraw.com/zh/tools/free-chem-tools/lipinski-rule-calculator.html) [类药性计算器](https://www.moldraw.com/zh/tools/free-chem-tools/druglikeness-calculator.html) [TPSA 计算器](https://www.moldraw.com/zh/tools/free-chem-tools/tpsa-calculator.html) [SMILES 表示法指南](https://www.moldraw.com/zh/tools/free-chem-tools/smiles-notation-guide.html)

## 相关指南

[肽和 DNA 序列转结构指南](https://www.moldraw.com/zh/blog/peptide-dna-sequence-to-structure-guide.html) [“比较分子”插件](https://www.moldraw.com/zh/blog/compare-molecules-plugin-tanimoto-similarity.html) [ChEMBL 生物活性查询](https://www.moldraw.com/zh/blog/chembl-plugin-bioactivity-lookup.html) [pKa 与微观物种插件](https://www.moldraw.com/zh/blog/pka-plugin-protonation-states-microspecies.html) [所有免费的 MolDraw 化学工具](https://www.moldraw.com/zh/blog/moldraw-all-free-chemistry-tools-guide.html)

最后更新：2026年10月19日
