PubMedで検索した結果(タイトル・出版年月日・アブストラクト等)を複数取得したいと思い,KNIMEを使用してまとめてみました.
下記ブログでpythonなどを使って論文情報を取得していることを,今回はKNIMEを使って行いました.
PubMed APIの書き方などは以下のブログを参考にしました.
また,KNIMEのXPathなどの使い方は す さんのブログを見て勉強しました(ありがとうございます)
KNIMEを使ってChEMBLから情報をとってくるンゴ - 非プログラマーのためのインフォマティクス入門。(仮)
NCBIのこちらにAPIの詳細が書いてあったので,これも参考にしました.
さて,実際に作成したフローは以下のようになりました
まず,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』という文字列を作成します.
retmatは取得するIDの数で,デフォルトは20です.今回はretmat=50で設定しておきます.
GET requestを使って,先ほどのURLをもとに,PubMedへアクセスして情報を取得します.
ブラウザーで以下のページを開いてみると,以下のようにIDが取得できていることがわかります.
続いて,XPathを使ってID部分だけを抜き出してきます.
XML previewの部分で,必要な部分をダブルクリックするとXpath queryを入手することができます.
データは複数あるので,multiple rowsで表示させておきます.
output tableを見ると,IDだけを抜き出せていることがわかります.
つづいて,得られた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の結果で,アブストラクトを取得しています.
得られた結果をPubMed IDをタグとしてjoinerでつなぎ合わせ,不必要なカラムを除きます.
結果をCSV writerで出力すれば,以下のようなファイルを得ることができました!
KNIME上でPubMed検索からアブストラクトの入手までプログラムを使わずにできるのは大変便利です…いろいろと応用ができそうなので,今後も活用して行きたいです.