急に化合物名をSMILES表記に一括変換したくなったのでTwitterで嘆いていたところ、フォロワーさんが CIRpy を勧めてくれたので使ってみることにしました。
pip でも入れられるとのことですが、
" UnicodeDecodeError: 'cp932' codec can't decode byte 0x94 in position 1066: illegal multibyte sequence"
が出てきて私の環境では導入できなかったので、
git clone https://github.com/mcs07/CIRpy.git
これで引っ張ってきたうえでsetup.pyの8行目の
long_description = open('README.rst').read()
を
long_description = open('README.rst', encoding='utf-8').read()
に変えた上で
python setup.py install
でいけました。
import cirpy
cirpy.resolve("amorpha-4,11-diene", "smiles")
-> 'C[C@@H]1CC[C@H]([C@H]2C=C(C)CC[C@@H]12)C(C)=C'
これで化合物名をSMILES表記に変換するのが捗りますね。
ちなみに結構色々な名前に対応しているっぽく、
cirpy.resolve("insulin", "smiles")
-> 'CC[C@H](C)[C@H](NC(=O)CN)C(=O)N[C@@H](C(C)C)C(=O)N[C@@H](CCC(O)=O)C(=O)N[C@@H](CCC(N)=O)C(=O)N[C@H]1CSSC[C@@H]2NC(=O)[C@@H](NC(=O)[C@H](CO)NC(=O)[C@@H](NC(=O)[C@H](CSSC[C@H](NC(=O)[C@H](CC(C)C)NC(=O)[C@H](Cc3[nH]cnc3)NC(=O)[C@H](CCC(N)=O)NC(=O)[C@H](CC(N)=O)NC(=O)[C@@H](NC(=O)[C@@H](N)Cc4ccccc4)C(C)C)C(=O)NCC(=O)N[C@@H](CO)C(=O)N[C@@H](Cc5[nH]cnc5)C(=O)N[C@@H](CC(C)C)C(=O)N[C@@H](C(C)C)C(=O)N[C@@H](CCC(O)=O)C(=O)N[C@@H](C)C(=O)N[C@@H](CC(C)C)C(=O)N[C@@H](Cc6ccc(O)cc6)C(=O)N[C@@H](CC(C)C)C(=O)N[C@@H](C(C)C)C(=O)N[C@@H](CSSC[C@H](NC(=O)[C@H](Cc7ccc(O)cc7)NC(=O)[C@H](CC(N)=O)NC(=O)[C@H](CCC(O)=O)NC(=O)[C@H](CC(C)C)NC(=O)[C@H](CCC(N)=O)NC(=O)[C@H](Cc8ccc(O)cc8)NC(=O)[C@H](CC(C)C)NC(=O)[C@H](CO)NC2=O)C(=O)N[C@@H](CC(N)=O)C(O)=O)C(=O)NCC(=O)N[C@@H](CCC(O)=O)C(=O)N[C@@H](CCCNC(N)=N)C(=O)NCC(=O)N[C@@H](Cc9ccccc9)C(=O)N[C@@H](Cc%10ccccc%10)C(=O)N[C@@H](Cc%11ccc(O)cc%11)C(=O)N[C@@H]([C@@H](C)O)C(=O)N%12CCC[C@H]%12C(=O)N[C@@H](CCCCN)C(=O)N[C@@H]([C@@H](C)O)C(O)=O)NC1=O)[C@@H](C)O)[C@@H](C)CC'
こんな感じになったりします。