摘要
SMILES是一種用于描述化合物結構的字元串表示法,其中子結構搜尋是在大規模化合物資料庫中查找特定的結構。然而,這種搜尋方法存在一個誤解,即将化合物的子結構視為一個獨立的實體進行搜尋,而忽略了它們在更大的化合物中的上下文。
我們使用Chemistry Development Kit (CDK)進行搜尋。這種方法可以避免由于上下文缺失而導緻的搜尋結果不準确的問題。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL0Y2M0YTYkljY5QTY1QzY4YGNhRDZjRmZ0YjM0QWN0I2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
上圖為我們開發的一個編輯器,用于友善查詢。
Chemistry Development Kit (CDK)介紹
CDK是一種廣泛使用的開源化學資訊學工具包,提供表示化學概念的資料結構以及操縱此類結構和對其執行計算的方法。該庫實作了各種各樣的化學資訊學算法,從化學結構規範化到分子描述符計算和藥效團感覺。它用于藥物發現、代謝組學和毒理學。
為什麼子串搜尋≠子結構搜尋
吡啶可以用 SMILES 表示:
n1ccccc1. n1ccccc1 。
但是吡啶也可以用其他五個等效的 SMILES 字元串表示:
c1ncccc1
c1cnccc1
c1ccncc1
c1cccnc1
c1ccccn1
SMILES 是從相應分子圖的深度優先周遊生成的。結果,不同的起始原子和不同的相鄰原子周遊将産生不同的 SMILES。一個簡單的線性子串比較應該在大多數時候失敗。
情況變得更糟。 SMILES 支援雙鍵的多種編碼方案。吡啶的芳香符号是一種形式。另一種形式使用大寫字母和等号 ( = ) 來表示雙鍵。六種可能性是:
N1=CC=CC=C1
C1=NC=CC=C1
C1=CN=CC=C1
C1=CC=NC=C1
C1=CC=CN=C1
C1=CC=CC=N1
情況變得更糟。單鍵是可選的,這意味着 N1=CC=CC=C1 等同于 N-1=C-C=C-C=C-1 。同樣,芳香鍵是可選的,這意味着 c1ncccc1 等同于 c:1:n:c:c:c:c:1 。問題還不止于此。注意子串比對方法在一個很好的反例中變得多麼明顯錯誤。還要考慮可以完美運作的簡單案例的數量。
SMILES 解析器和生成器
IChemObjectBuilder builder = DefaultChemObjectBuilder.getInstance();
SmilesParser parse = new SmilesParser(builder);
String smiles = "N1=CC=CC=C1";
IAtomContainer mol = parse.parseSmiles(smiles);
子結構和 SMARTS 比對
子結構比對是基本的化學資訊學操作,在指紋和描述符生成以及原子分型等許多其他功能中起着關鍵作用。從 CDK v1.2 開始,添加了處理 SMARTS 查詢語言的功能。 SMARTS 語言得到很好的支援,包括立體化學、元件分組和原子圖(以比對反應轉換)等功能。 CDK v2.0 中添加了一個新的 Pattern API,它簡化了搜尋結果的查找、過濾和轉換。 API 是不可變的,允許一個模式被初始化一次,然後與多個分子或跨多個線程的反應進行比對。在初始化期間,檢查模式以确定需要哪些不變量(例如環大小),并且僅計算所需的不變量。内部比對算法提供了一個惰性疊代器,以便僅在需要時才計算下一個比對項。除了分子之外,API 還處理反應,兩者都可以指定為查詢或目标。
public void test2() throws InvalidSmilesException {
IChemObjectBuilder builder = DefaultChemObjectBuilder.getInstance();
SmilesParser parse = new SmilesParser(builder);
String smiles = "你的smiles表達式";
IAtomContainer mol = parse.parseSmiles(smiles);
IAtomContainer query = parse.parseSmiles("N1=C(/C=C/C(N)=O)C=CC=C1");
Pattern pattern = SmartsPattern.findSubstructure(query);
boolean matches = pattern.matches(mol);
System.out.println(matches);
}
比對不上的情況
實踐中我們發現還有一些比對不上的情況,可能需要修改政策,可以私信我溝通。