t_kahi’s blog

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

【KNIME】PubMedの検索結果(タイトル・出版年月日・アブストラクト等)をKNIMEを使ってまとめて取得する

PubMedで検索した結果(タイトル・出版年月日・アブストラクト等)を複数取得したいと思い,KNIMEを使用してまとめてみました.

下記ブログでpythonなどを使って論文情報を取得していることを,今回はKNIMEを使って行いました.
PubMed APIの書き方などは以下のブログを参考にしました.

qiita.com

また,KNIMEのXPathなどの使い方は す さんのブログを見て勉強しました(ありがとうございます)
KNIMEを使ってChEMBLから情報をとってくるンゴ - 非プログラマーのためのインフォマティクス入門。(仮)

NCBIのこちらにAPIの詳細が書いてあったので,これも参考にしました.

The E-utilities In-Depth: Parameters, Syntax and More - Entrez Programming Utilities Help - NCBI Bookshelf


さて,実際に作成したフローは以下のようになりました

f:id:t_kahi:20180514212521p:plain

まず,Table creatorに検索したいワードを入力しておきます.
"cancer"みたいなワードだとそのままでいいのですが,"Neuroendocrine carcinoma"などを検索したいときは"Neuroendocrine++carcinoma"などと入力します.(スペースはURLなので使えません)

続いてstring manipulation nodeを使って,
http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term= 』+『検索ワード』+『retmat』という文字列を作成します.

f:id:t_kahi:20180514213208p:plain

retmatは取得するIDの数で,デフォルトは20です.今回はretmat=50で設定しておきます.

GET requestを使って,先ほどのURLをもとに,PubMedへアクセスして情報を取得します.

ブラウザーで以下のページを開いてみると,以下のようにIDが取得できていることがわかります.

https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=neuroendocrine++carcinoma&retmax=50

f:id:t_kahi:20180514214959p:plain

続いて,XPathを使ってID部分だけを抜き出してきます. XML previewの部分で,必要な部分をダブルクリックするとXpath queryを入手することができます.
データは複数あるので,multiple rowsで表示させておきます.

f:id:t_kahi:20180514215156p:plain

output tableを見ると,IDだけを抜き出せていることがわかります.

f:id:t_kahi:20180514215819p:plain

つづいて,得られたpubmed IDから,タイトルやアブストラクトを抽出します.

タイトルや著者,ジャーナル名などはESummaryでとってこれます. Base URL :
https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi

こちらを,先ほどと同様にstring manipulationでIDとつなぎ合わせます.

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

アブストラクトはEFetchでとってこれます.
Base URL :
https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi

こちらも,先ほどと同様にstring manipulationでIDとつなぎ合わせます. 一点ポイントがあります.データの取得の仕方をretmodeで選択しておきます.今回はXML形式で取得したいのでredmode=xmlを付けておきます.

詳しくはこちらを参照してください

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

取得したファイルをXPathをそれぞれ使って,欲しい部分だけを抜き出します.
左側がESummaryの結果で,タイトルや日付などを取得しています.
右側がEFetchの結果で,アブストラクトを取得しています.

f:id:t_kahi:20180514221116p:plain

得られた結果をPubMed IDをタグとしてjoinerでつなぎ合わせ,不必要なカラムを除きます.
結果をCSV writerで出力すれば,以下のようなファイルを得ることができました!

f:id:t_kahi:20180514221538p:plain

KNIME上でPubMed検索からアブストラクトの入手までプログラムを使わずにできるのは大変便利です…いろいろと応用ができそうなので,今後も活用して行きたいです.