非プログラマーがデータ処理を行う上で便利なツールとしてワークフローツールがあります。有名なものはKNIMEとPipeline Pilotです。この内KNIMEについては無償のオープンソースソフトウェアとして提供されており、気軽に使える点が便利ですね。
KNIMEではデータ処理を「ノード」の単位で自由に組み合わせることができるため、計算化学を専門としないメドケムの方々の間でも創薬研究のデータ処理ツールとして広く使われています。KNIMEの大きな特徴はそのコミュニティの強さでしょうか。日本の総代理店であるインフォコム様1のセミナーが定期的に開催されている他、TeachOpenCADDといった有志の教育活動によるサポートが心強いです。
ChemAxonの各種ツールもKNIME上で使えるようになっているため、RDKitをはじめとしたサードパーティのノードと共にChemAxonのノードを使ったワークフローを実現できます。無償で提供されている「Marvin Chemistry Extensions」と有償版の「JChem Extensions」に分かれており、無償版では化学構造描画、閲覧、簡単な化学フォーマット変換機能を利用できる一方、有償版ではほぼ全てのChemAxon製品の機能が網羅されています。ライセンスの仕組みが少々ややこしいこと、及び有償版は情報が少ないので、実際に使ってみた結果を紹介できればと思い今回記事にしてみました。
ChemAxonのKNIMEノードは日本のインフォコム様が開発して下さいました。今回もこの記事を書くにあたり快くライセンスを提供していただきましたこと、感謝申し上げます。
JChem Extensionsでは幅広いChemAxon製品をカバーしており、様々なケモインフォマティクスの処理を行うことができるため、ノードの説明ページだけではわかりにくい部分もあるかと思います。実際のワークフロー例は、ChemAxonの製品紹介ページ下部にあるResources > Training & Examplesのリンクからダウンロードできます。動かすにはChemAxonのライセンスが必要なのですが、重複構造の排除、ECFPフィンガープリントを使ったk平均法によるクラスタリング、反応ルールベースのライブラリーエニュメレーションなどのワークフローがサンプルとして入っています。
その他、公式ページでは以下のワークフローを実現できます、と紹介されています。
- virtual screening and hit expansion
- library design including enumeration and filtering
- basic compound registration
- predictive model building based on ChemAxon descriptors and fingerprints
- analysis and visualization of chemical space with clustering
- IP processes like Markush overlap analysis and automated Markush composition
- automated data mining from document sources by using naming technology
- checking compliance by using Compliance Checker with KNIME REST node
創薬データ処理についてはいくつか記事を見かけましたので、今回はあまり触れられておらずかつワークフローツールと相性の良い、テキスト処理系のワークフローを作ってみました。
以下の処理を行うワークフローを紹介しています。
ワークフローの説明に入る前にJChem Extensionsを使用するために必要なライセンスについて説明します。
有償版ChemAxonノードであるJChem Extensionsを動かすためには、2つのライセンスグループが必要となります。
以前に記事にもしましたが化学構造を表記する方法は様々あり、特に化合物名はIUPAC名、慣用名、薬物名などドキュメントにより異なる形で表記されます。このことが化学特許などのドキュメントから化学構造をテキストマイニングする際に問題となります。この問題に対応するため、ChemAxonは以前から名前変換用ツール2を提供してきました。
化合物名から化学構造を認識する(Name to Structure)他、化学構造を化合物名に変換する(Structure to Name)こともできます。IUPAC推奨(IUPAC Recommendations and Preferred Names 2013)に準拠しており、日本語と中国語にも対応しています。このChemAxonの名前変換テクノロジーを使うことにより、以下の異なる形式に対応できます。
KNIMEを調べてみると同様な機能を提供しているノードが見つかりました。OPSINやNIHのCADDをリゾルバーとして使っているようです。その様なノードと比べた際のChemAxonノードの特徴は以下になるかと思います。
Marvin SketchやExcelなどで使うことももちろんできますが、今回はKNIMEノードとして使ってみました。
JChem Extensionsのライセンス、ChemAxonのライセンスを適切に配置した上、KNIME HubよりJChem Extensionsのノード群をインストールしました。
Name to Structureを応用した製品として、Document to Structure (以下D2S)があります。KNIME上ではDocument Extractorとして使用可能です。ノードの設定を開いてみると色々と設定オプションがありますが、要するにどの形式の化合物名を読み取り、どのように出力するかということを設定できます。
このD2Sでできることは具体的には以下となります。
つまりファイルパスやURLを指定することで、D2Sを起点としたテキストマイニングワークフローを作成することができます。
。。。という説明だけでは芸がありませんので、実用的かもしれない以下のワークフローを考えました。
横に長くなってしまいましたが、以下のフローによるローカルフォルダのファイルから化学構造ファイルを抽出して一覧化するワークフローとなります。記事の下部にダウンロードリンクを用意しています。
最終的に以下のようなリストが得られます。
"Molecule","Formula","Mass","FileName","type","text","context","page","Iteration","MolName"
"Clc1ccccc1","C6H5Cl",112.56,"XXX.pdf","smiles","c1ccccc1Cl","XXX...",6,0,
"O=Cc1ccccc1","C7H6O",106.124,"XXX.pdf","smiles","O=Cc1ccccc1","XXX...",8,0,
...
他にtxtやcsv形式のファイルを読み込む場合分けを作ればより汎用性が高まりそうです。また、化合物をリストするだけでなくDBに保存するなどのフローも面白そうですね。
テキストマイニング関係では、化学特許から構造を抽出したいという問合せが多くあります。本当に可能なのでしょうか?
目的が単なる構造の抽出であればD2Sを使ってテキストから構造を認識できます。しかし、多くの場合ではMarkush構造を抽出したいという要望がメインとなるかと思います。この目的での問合せは多いのですが、構造データの提供されない特許ファイルからMarkush構造を自動抽出することは正直難しいです。大きく分けて以下2つのアプローチがあるかと思います。
1では自動化は難しいです。様々に描かれる骨格構造をOSRツールを使って画像から読み取っても、ほぼ必ず手作業による修正が必要となります。また、Rグループの関係性を認識することがまず難しく、Rグループの名称では分子式や略語が多く使われるため、官能基の認識も多分に失敗します。
2では自動化は可能であり、いくつかのグループの報告例がありました。また、KNIME Hub上でも類似のコンセプトのワークフローが公開されています。自然言語処理により実施例の箇所にラベルを付け、そこから構造を読み取って共通骨格をMCSなどを使って特定しています。この目的ではMarkush ComposerなどいくつかのJChem Extensionsノードが有用です。ただし、この場合に作成されるMarkush構造は実施例をカバーするものであるため、特許のスコープであるMarkush構造でない点に注意が必要です。
結局のところ1を目的としている方が大半なため、弊社では特許からMarkush構造を抽出することを手助けするツールであるChemCuratorをお勧めしています。自動化ではありませんが、テキストからの構造認識やMarkush構造の階層化等の機能が備わっているデスクトップアプリケーションです。
ChemAxonの名前変換テクノロジーでは辞書のカスタマイズが可能という説明をしました。カスタマイズして構造に起こしたい化合物は様々かと思いますが、代表的な例として非天然アミノ酸を対象としたワークフローを紹介します。
カスタマイズするためには、まず所定のフォーマットの辞書ファイルを作成し、ChemAxonの設定フォルダ(デフォルトでは「C:\Users\[user_name]\chemaxon\」)に配置する必要があります。ChemAxonドキュメントサイトの説明を参考にして、以下の「custom_aminoacids.dict」を作成しました。それぞれタブ区切りで、左からアミノ酸名、三文字略号、一文字略号、OH末端を省略したSMARTS、SMARTSにおけるN末の位置番号、C末の位置番号です。
molName=Phosphoserine Sep X(Sep) [N;X3]-[C@@H;H1X4](-[C;X4H1]-[O]P([OH])([OH])=O)-[C;X3]=O 1 9
このdictファイルをChemAxonの設定フォルダに配置した後、以下のワークフローをKNIMEに作りました。
テキストからアミノ酸配列を読み取った後に構造に起こしています。
MarvinViewで以下の様に表示されることを確認しました。右がテーブルにテキストとして入力した配列で、そこから読み取った構造が左に表示されています。
HELMプロジェクトで公開されているツールなどを使ってモノマーライブラリーを作っておくと安心ですが、単に構造に変換したいだけならこのKNIMEフローの方が手軽ですね。
簡単なワークフローであればバッチを作ることでも対応可能ですが、KNIMEを使うとプロセスが動いている様が可視化されるため、見ていて楽しいです。
今回作成したワークフローはオンライン上にアップロードしました。ライセンスが無いと動きませんが、ご参考までに以下のリンクからダウンロードしていただけます。
※パトコアは提供するワークフローにより生じ得る一切の損害に対して責任を持ちません。
※リンクは予告なく失効する可能性があります。
KNIME(インフォコム社HP):https://knime-infocom.jp/↩
Chemical Name and Structure Conversion: https://chemaxon.com/products/chemical-name-conversion↩
Chemical Data Extraction: https://chemaxon.com/products/chemical-data-extraction↩