PubMed APIを利用して、クエリから関連著者リストを作成

 前回に続き、著者リストを作成するRubyスクリプトを書いています。今回は、検索ワードをクエリとしてPubMed APIにアクセスし、関連論文リストから著者名を抜き出し、全著者名の出現頻度を計算するところまで完成させました。

 まず、検索ワードにヒットした論文を返却されるとき、PubMed APIのほうに最大いくつまで返すかという設定ができるので、これを利用して取得数を制御できるようにしました。PubMedのマニュアルページ(E-utilities Quick Start)を参照したところ、URLに「&retmax=」を追加すればOKでした。

api += '&retmax=' + @maxIDs.to_s #取得最大ID数を設定
xml = open(api, 'User-Agent' => 'ruby').read

として、取得数を変えられることを確認しました。100件を一気に取得することもできました。
 次に、取得したXMLから各論文の著者名を抜き出し、数を数えるところを実装しました。XMLのなかで「Article/AuthorList/Author」の中の、「LastName」と「ForeName」を回収すればOKでした。
 ただし、LastNameがなかったりすることがあったので、存在するかを確認してから回収するようにしました。

if author_part.elements['LastName'] #フィールドが存在するなら
last_name = author_part.elements['LastName'].text
else
next #無視して次へ
end

if author_part.elements['ForeName'] #フィールドが存在するなら
fore_name = author_part.elements['ForeName'].text
else
fore_name = "" #存在しなければ空配列
end

 あとは、これをハッシュテーブルに登録し、既にハッシュに存在するなら出現数を+=1するようにしました。
 試しに100件論文を取得し、ハッシュテーブルを作成してファイルに書き出してみたところ、全筆者705名が回収できました。そのうち2回以上出現した筆者は36人程度でした。また、やはり筆者名の表記揺れがあるようで、ForeNameがイニシャルな場合とフルネームの場合で、おそらく同一の筆者が別々になってしまっていました。このあたりはまだ改善の余地がありますので、次回以降見直していきたいと思います。