t_kahi’s blog

KNIMEやCellProfiler、創薬に関する記事と,日々のメモです

【KNIME】〈後編〉QuickFormが便利!PubMed APIで論文の要旨を取得する

こんばんは,@PKです.

QuickFormノードを使ってPubMed検索ワード入力を行い,PubMed APIで論文アブストラクトを取得するKNIME Workflowの紹介です.

Workflowの概要とQuickformについては前編で紹介しております.
QuickForm素敵なので,ご覧になっていない方は是非参考にしてください.
www.t-kahi.com

前編で紹介しましたが,QuickFormノードを活用してPubMed検索を行うWorkflowを以下の動画で示しています.
youtu.be

後編ではPubMed APIの部分を中心に,Interactive viewを使ったデータ入力を少しご紹介していきます.

KNIME Workflow概要

KNIME Workflowの概要です.
f:id:t_kahi:20190626211312p:plain

  1. QuickFormを使ってデータを入力できる「Wrapped Metanode」
  2. PubMed APIを使って論文情報を取得する「Simple Metanode」
  3. Interactive viewで表を表示してほしいデータを選択できる「Wrapped Metanode」
  4. 選んだデータを出力する「Excel Writer」

1については前編でお話したので,2~4について簡単にご紹介していきます.

PubMed APIを使って論文情報の取得

前編の最後に,「String Manipulation」を使って,QuickFormで入力したワードからPubMed APIのQueryを作成しました.

join("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=",$search$,"&retmax=",$${Snew variable}$$)

ここでは「high+content+analysis」,「new+target+cancer」を検索し,検索したい論文のID数を3と記入して実行してみます.
実行結果の表では,以下のようなQueryが作成されました.

https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=high+content+analysis&retmax=3   
https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=new+target+cancer&retmax=3

このQuery結果を使って,PubMed APIへアクセスします.
f:id:t_kahi:20190627205711p:plain

APIの使い方については,こちらに詳細がありますので,参考にしてください.
A General Introduction to the E-utilities - Entrez Programming Utilities Help - NCBI Bookshelf
The E-utilities In-Depth: Parameters, Syntax and More - Entrez Programming Utilities Help - NCBI Bookshelf

特に,A General Introduction to the E-utilitiesは使用する前に確認したほうがいいと思います.
一番大事なポイントとして以下の部分で,

Frequency, Timing and Registration of E-utility URL Requests
In order not to overload the E-utility servers, NCBI recommends that users post no more than three URL requests per second and limit large jobs to either weekends or between 9:00 PM and 5:00 AM Eastern time during weekdays.

1秒に3回以上Queryを投げないように気を付けましょう. データを取得する際はXML形式化JSON形式か選択できますが,自分的に扱いが楽なのでXML形式でデータを取得します.

APIを使ってデータを取得する際は「String Manipulation」→「GET Request」→「X Path」を繰り返します.(XML形式の場合)

下図では「GET Request」の設定と実行結果を示しています.
f:id:t_kahi:20190627210428p:plain

URL Columnとして先ほど「String Manipulation」で設定したカラムを選び,Delay(ms)で400msecに1回Queryを投げるようにしておきます.
実行結果を確認すると,XML形式でデータが取得できています.

上記データから必要な情報(今回はID)を「X Path」で取得していきます.
IDを取得するX Pathは[/eSearchResult/IdList/Id]です.
下図では「X Path」の設定と実行結果を示しています.
f:id:t_kahi:20190627213016p:plain
上手くIDが抜き出せていますね.

抜き出したIDを使って論文のアブストラクト等を取得していきます.
「String Manipulation」→「GET Request」→「X Path」の流れなので詳細は割愛します.
f:id:t_kahi:20190627214457p:plain

「String Manipulation」で以下のQueryを作成し,「GET Request」でデータを取得します.

join("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=",$Id$,"&retmode=xml")

その後,「X Path」で欲しいデータを取得していきます.
今回取得したデータのX Path queryを以下に示します.

ArticleTitle  
/PubmedArticleSet/PubmedArticle/MedlineCitation/Article/ArticleTitle  
AbstractText  
/PubmedArticleSet/PubmedArticle/MedlineCitation/Article/Abstract/AbstractText  
Jounal Title  
/PubmedArticleSet/PubmedArticle/MedlineCitation/Article/Journal/Title
DOI
/PubmedArticleSet/PubmedArticle/MedlineCitation/Article/ELocationID
Year    
/PubmedArticleSet/PubmedArticle/MedlineCitation/Article/Journal/JournalIssue/PubDate/Year
Month   
/PubmedArticleSet/PubmedArticle/MedlineCitation/Article/Journal/JournalIssue/PubDate/Month    
Day 
/PubmedArticleSet/PubmedArticle/MedlineCitation/Article/Journal/JournalIssue/PubDate/Day

実行すると以下のようにデータをすることができました.
f:id:t_kahi:20190627214843p:plain

Interactive viewでデータの選択

続いてInteractive viewのMetanode部分ですが,こちらはかなりシンプルです.
f:id:t_kahi:20190627215148p:plain

「Table View (Java Script)」を使ってInteractive View表示をし,選択した行を「Row Filter」で選んでExcel Writerに出力します.
f:id:t_kahi:20190627215944p:plain

Interactive NodeはMetanodeの中に複数入れこむこともできます.Metanodeの作り方はこちらを参考にしていただけると幸いです.
【KNIME】CellProfilerの画像解析結果を可視化する - t_kahi’s blog

Interactive viewが使える可視化ノードをMetanodeにすることで,動画で示したようなテーブル表示をすることができます.

まとめ

QuickFormやInteractive viewとMetanodeをうまく使うことで,KNIME Workflowをシンプルにすることができました.
まだまだ勉強不足なので,引き続き勉強したことをご紹介できればと思います.