パトコアの技術ブログ

化学情報管理・創薬支援のためのケモインフォマティクス製品を扱うパトコアです。本ブログは技術チームにより運営されており、各種ツールを使うとどんなことができるの?という観点から、技術情報をお届けします。

パトコアの技術ブログ

KNIMEでChemAxonノードを使ってみる

f:id:patcore:20211001140425p:plain

投稿者 Patcore, Inc.

非プログラマーがデータ処理を行う上で便利なツールとしてワークフローツールがあります。有名なものは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

創薬データ処理についてはいくつか記事を見かけましたので、今回はあまり触れられておらずかつワークフローツールと相性の良い、テキスト処理系のワークフローを作ってみました。

以下の処理を行うワークフローを紹介しています。

  • Document to Structureの機能を使ってローカルフォルダの中にあるファイル群から化学構造を抽出し、リスト化する。
  • 非天然型アミノ酸を含むアミノ酸の配列(テキスト)から構造に変換する。


ライセンス

ワークフローの説明に入る前にJChem Extensionsを使用するために必要なライセンスについて説明します。

有償版ChemAxonノードであるJChem Extensionsを動かすためには、2つのライセンスグループが必要となります。

  1. インフォコム様から提供されるJChem Extensions用ライセンスファイル(「*.dat」形式)
    インフォコム様にお問合せの上、ライセンスファイルを取得して下さい。
    KNIMEを開いた後、File > Preferences > KNIME > JChemを開いて、取得したライセンスファイルの保存先を指定すると読み込まれます。
  2. 使用するノードに応じたChemAxonライセンス(「*.cxl」形式)
    ノードの種類に応じて必要なライセンスが異なりますので、お問合せ下さい。
    ChemAxonのライセンスはKNIMEが起動する際に自動的に読み込まれます。デフォルトのロケーションは"C:\Users\[user_name]\chemaxon\license.cxl"(Windowsの場合)です。


ChemAxon名前変換テクノロジー

以前に記事にもしましたが化学構造を表記する方法は様々あり、特に化合物名はIUPAC名、慣用名、薬物名などドキュメントにより異なる形で表記されます。このことが化学特許などのドキュメントから化学構造をテキストマイニングする際に問題となります。この問題に対応するため、ChemAxonは以前から名前変換用ツール2を提供してきました。

化合物名から化学構造を認識する(Name to Structure)他、化学構造を化合物名に変換する(Structure to Name)こともできます。IUPAC推奨(IUPAC Recommendations and Preferred Names 2013)に準拠しており、日本語と中国語にも対応しています。このChemAxonの名前変換テクノロジーを使うことにより、以下の異なる形式に対応できます。

  • IUPAC名
  • 慣用名 (e.g. Toluene)
  • 薬物名 (e.g. Paracetamol, Doliprane)
  • 略語 (e.g. ATP for "Adenosine Triphosphate")
  • CAS登録番号

KNIMEを調べてみると同様な機能を提供しているノードが見つかりました。OPSINNIHのCADDをリゾルバーとして使っているようです。その様なノードと比べた際のChemAxonノードの特徴は以下になるかと思います。

  • リゾルバーがローカルにあるため、外部通信を必要としない(CAS登録番号を除く)。
  • インプットのフォーマットを揃える必要がなく、自動認識する。
  • 簡易的OCRエラー校正機能(e.g. 3-rnethyl-l-me-thoxynaphthalene -> 3-methyl-1-methoxynaphthalene)。
  • 名前変換辞書をカスタマイズ可能。
  • 他のChemAxonツールとネイティブに連携。
  • Document to Structure3を使うことにより、ファイルから自動で抽出してくれる(次項で紹介)。

Marvin SketchやExcelなどで使うことももちろんできますが、今回はKNIMEノードとして使ってみました。


名前 ↔ 構造変換ワークフロー

JChem Extensionsのライセンス、ChemAxonのライセンスを適切に配置した上、KNIME HubよりJChem Extensionsのノード群をインストールしました。


Document to Structureを使った化学テキストマイニング

Name to Structureを応用した製品として、Document to Structure (以下D2S)があります。KNIME上ではDocument Extractorとして使用可能です。ノードの設定を開いてみると色々と設定オプションがありますが、要するにどの形式の化合物名を読み取り、どのように出力するかということを設定できます。

f:id:patcore:20211001140409p:plain

このD2Sでできることは具体的には以下となります。

  • 対応フォーマットのファイル(pdf, html, pptx, docx, xlsx, etc...)中のテキストから構造を自動で抽出する
  • オフィスファイルに埋め込まれた構造式ファイル(MarvinやChemDrawで描画された化学構造がOLE形式で埋め込まれたファイル)から構造を自動抽出する
  • URLを指定するとウェブページから構造を自動抽出する
  • OSRツール(OSRA, CLiDE)と連携した画像ファイルから構造の認識を試みる

つまりファイルパスやURLを指定することで、D2Sを起点としたテキストマイニングワークフローを作成することができます。


。。。という説明だけでは芸がありませんので、実用的かもしれない以下のワークフローを考えました。

f:id:patcore:20211001140418p:plain

横に長くなってしまいましたが、以下のフローによるローカルフォルダのファイルから化学構造ファイルを抽出して一覧化するワークフローとなります。記事の下部にダウンロードリンクを用意しています。

  1. ローカルフォルダの下部にある全てのファイルパスを読み込む
  2. ファイル形式がpdf, pptx, xlsxなどのD2Sが対応しているファイルだけフィルターする
  3. Flow Variableを使ってファイルパスをD2Sに読み込ませ、以下をループする。
  4. D2Sによる構造抽出 -> 分子量100以上の構造のみフィルター -> 構造正規化 -> 構造をSMILES形式に変換 -> 重複を排除 -> リスト化
  5. 同時に、ファイル形式がmol, sdf, cdxなどの化学構造形式のファイルを読み込んでSMILES形式でリスト化する
  6. 4と5で作成されたリストを結合して出力する。

最終的に以下のようなリストが得られます。

"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. 請求項の骨格構造(画像)を読み取り、同時にRグループの名称から構造を起こす。
  2. 実施例の構造群を読み取り、それらをカバーするMarkush構造を作成する。

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に作りました。

f:id:patcore:20211001140406p:plain:w500

テキストからアミノ酸配列を読み取った後に構造に起こしています。

MarvinViewで以下の様に表示されることを確認しました。右がテーブルにテキストとして入力した配列で、そこから読み取った構造が左に表示されています。

f:id:patcore:20211001140427p:plain

HELMプロジェクトで公開されているツールなどを使ってモノマーライブラリーを作っておくと安心ですが、単に構造に変換したいだけならこのKNIMEフローの方が手軽ですね。


ワークフローファイル

簡単なワークフローであればバッチを作ることでも対応可能ですが、KNIMEを使うとプロセスが動いている様が可視化されるため、見ていて楽しいです。

今回作成したワークフローはオンライン上にアップロードしました。ライセンスが無いと動きませんが、ご参考までに以下のリンクからダウンロードしていただけます。

ダウンロードリンク

※パトコアは提供するワークフローにより生じ得る一切の損害に対して責任を持ちません。

※リンクは予告なく失効する可能性があります。



  1. KNIME(インフォコム社HP):https://knime-infocom.jp/

  2. Chemical Name and Structure Conversion: https://chemaxon.com/products/chemical-name-conversion

  3. Chemical Data Extraction: https://chemaxon.com/products/chemical-data-extraction