こんにちは!ぼりたそです!今回は化合物の構造式をテキストで表記するSMILES記法について記事をまとめました。
この記事は以下のポイントでまとめています。
構造式は視覚的にわかりやすく、化合物が立体的にどのような構造を有しているか一目で理解できるようになっています。
しかし、データベースとして化合物の情報を格納する場合、結合や原子数、不飽和度などの情報は構造式から数値として得られません。
そこで、構造式をテキストで表記できるSMILES記法について今回はご紹介します。
SMILES記法とは?
SMILES(Simplified Molecular Input Line Entry System)は化合物の構造式をテキスト形式で表現するための表記法です。
構造式では人間からすれば視覚的に理解しやすいのですが、機械からしてみられば構造式からは何も理解できないのです。そこで、機械にもわかるように構造式を変換するのがSMILES式なのです。
SMILESは1980年代初頭にDavid Weiningerにより開発されました。Weiningerは化学構造をテキストで表現するための規則的な形式を作り出すことを目的としてSMILESを開発したのです。
開発されたSMILESは化合物の情報処理における標準的な表現方法として広がり、国際化学連合(IUPAC)の機関にでも標準化されています。
その結果、今日では多くの学者や研究者に使われるまでになりました。
SMILESの規則
続きまして、SMILES表記の規則についてご紹介いたします。
今回は以下の規則について説明いたします。
- 元素記号
- 水素原子
- 結合
- 環構造
- 分岐構造
- 幾何異性体
元素記号
化合物の構造中の元素は全てその元素記号で表記されます。例えば炭素であれば「C」、窒素であれば「N」、酸素であれば「O」といった形で表記されます。
例としてブタン、エタノール、エチルアミンの構造式をSMILES表記にしたものを以下に示します。
化合物 | 構造式 | SMILES表記 |
---|---|---|
ブタン | CCCC | |
エタノール | CCO | |
エチルアミン | CCN |
水素原子
SMILESにおいて水素原子は通常は省略されます。なので、先ほどご紹介したブタン、エタノール、エチルアミンでも水素は省略されていることがわかると思います。
しかし、水素原子を意図的に表記したい場合であれば[H]という形で表記できます。
結合
結合は単結合であれば省略されます。しかし、二重結合は「=」、三重結合は「#」で表記されるルールとなっております。以下に例として1-ブテンとアセチレンのSMILES表記をご紹介します。
化合物 | 構造式 | SMILES表記 |
---|---|---|
1-ブテン | CCC=C | |
アセチレン | C#C |
環構造
環構造は環の最初と最後に数字を記載して直鎖として表記します。例としてベンゼン、ピリジンをSMILES表記にしたものを示します。
化合物 | 構造式 | SMILES表記 |
---|---|---|
ベンゼン | C1=CC=CC=C1 | |
ピリジン | C1=CC=NC=C1 |
分岐構造
分岐構造の場合は「()」で分岐の部分構造を括ることで表現しています。以下に2-メチルペンタン、2-ブタノールのSMILES表記を示します。
化合物 | 構造式 | SMILES表記 |
---|---|---|
2-メチルペンタン | CCCC(C)C | |
2-ブタノール | CCC(C)O |
幾何異性体
cis-, trans-などの幾何異性体の場合は「/」や「\」を使用して表記します。以下に例としてtrans-2-ブテン、cis-2-ブテンのSMILES表記をご紹介します。
化合物 | 構造式 | SMILES表記 |
---|---|---|
trans-2-ブテン | C/C=C/C | |
cic-2-ブテン | C/C=C\C |
他にもまだありますが、よく使用するルールとしては今ご紹介したものになるかと思います。
SMILESの取得方法
最後にSMILESの取得方法について解説します。
この記事では以下の通り、大きく3つの方法についてご紹介します。
- MolView
- SMILES generator
- Pythonによる自動取得
それでは順番に解説していきます。
MolView
まずはMolViewを使用してSMILESを取得する方法についてです。
MolViewは、分子の3D構造を表示し、化学情報を可視化するための化学ソフトウェアプラットフォームでありwebサイトで利用することができます。
MolViewは無料で利用でき、分子モデリングや可視化に役立つツールで描画した化合物のSMILESを取得することができます。
SMILESの取得方法としてはまず、以下のURLからMolViewにアクセスしてください。
MolViewのリンク↓↓↓↓
https://molview.org/
次に下の図のようにSMILESを取得したい化合物を描画します。今回はサリチル酸を描画しました。
次に下の図の赤枠にあるTools内の「Information card」を選択します。
すると、下の赤枠内にあるようにcanonical SMILESとisomaric SMILESが取得できます。
canonical SMILESは正規表現されたSMILESであり、同じ分子であれば同じSMILESで表されます。
isomaric SMILESは立体的な構造も表現できるSMILESになります。どちらもSMILESに変わりありませんが、データ解析する際にはどちらかに統一しないと正しく分析できないことがあるので注意です。
SMILES generator
続いてはSMILES generatorを使用したSMILESの取得についてご紹介します。
SMILES generatorも無料で利用することができ、web上で利用することができます。
具体的なSMILESの取得方法ですが、まず下記URLからSMILES generatorにアクセスします。
SMILES generator↓↓↓↓
https://www.cheminfo.org/flavor/malaria/index.html
次に下図の赤枠のように「UTILITIES」を選択します。
次にUTILITIESの中の「SMILES generator」を選択します。
すると下の図の様に化合物が描画できるのでSMILESを取得したい化合物を描画しましょう。
描画したら下の図の赤枠にあるニコちゃんマークをクリックします。
するとSMILESの式が取得できます。
Pythonによる自動取得
最後にPythonによる自動取得についてご紹介します。
Pythonではpubchempyというライブラリを使用してPubChemから自動でSMILESを取得します。
今回は化合物のCAS No.からSMILESを自動取得するコードを作成しました。
以下が実際のコードになります。
import pubchempy as pcp
# CAS番号を指定
cas_number = "69-72-7" # ここにCAS番号を入力
# PubChemで化合物を検索
compounds = pcp.get_properties('CanonicalSMILES', cas_number, 'name', record_type='3d')
# SMILESを取得
if compounds:
compound = compounds[0] # 一番上の結果を取得
smiles = compound['CanonicalSMILES']
print(f"CAS番号 {cas_number} のSMILESは: {smiles}")
else:
print(f"CAS番号 {cas_number} に対する結果が見つかりませんでした。")
#出力結果
#CAS番号 69-72-7 のSMILESは: C1=CC=C(C(=C1)C(=O)O)O
今回はサリチル酸のCAS No,からSMIELSを自動取得しましたが、うまく取得できている様ですね。
オススメの書籍
最後にSMILESやSMILESを使用した機械学習やデータ分析をしたい方に向けてオススメの書籍をご紹介します。
以下に紹介する「化学のためのPythonによるデータ解析・機械学習入門」ではSMILESなどの化学構造のテキスト表記方法や数値化についてPythonのサンプルコード付きで解説してくれています。
また、SMILESを使用したデータ分析や機械学習について、実際のデータセットを用いた事例をPythonコード付きで解説されているので、研究や開発現場における使用感がよくわかる書籍になっています。
書籍の難易度についても入門と書いてある通り、劇的に難しいこともなく、数学も大学素養レベルで理解できるようになっています。
ご興味のある方はぜひご購入いただければと思います。
終わりに
以上がSMILES表記についての解説になります。機械学習などでは化学構造をSMILES表記に変換して構造情報などを学習させることがあります。また、データベース化する際にSMILESの情報を入力しておけば類似構造などで構造を検索することができますね。
ちなみにSMILES表記はchemdrawやmolviewなどの描画ソフトで構造を描画した際に自動でSMILES表記にしてくれる機能が備わっていますので、実際にSMILES表記を使用する際は自分で表記を考えることはほぼありません。一つずつ表記を考えていたら間違いもありますし、膨大な時間もかかりますからね…
ぜひ、構造情報をデータベース化したいなどありましたらSMILES表記をご使用ください!
ちなみに今回とは逆にSMILESから化学構造を描画する方法については以下の記事にまとめています。