文献クラスタリングプログラムの構想&PubMed APIのXMLパーサ作成まで
前回までで、与えられた文献リストから、文献の著者の情報を使ってどのような分野の研究をしているのかをクラスタリングする、というプログラムを作る、ということになったので、今回はその大まかな流れを決めつつ、どこまでを1つのクラスとして実装するのがいいか考えました。
流れとしては以下のような感じです。
- 文献リストから、文献内容と付随するメタ情報(筆者名、キーワードなど)をパースする
- 筆者名から、PubMed APIを利用し論文IDを取得し、それらの論文のアブストラクトを取得する
- アブストラクトについて英文の品詞解析を行い、出現する名詞のスコア付けを行う
- 各文献のスコアリストから共通項を抜き出してクラスタリング
- クラスタごとに内容の相関解析を行う
この順番にクラスを作り、実装していくことにしました。今回はまず2番目のAPIを使って得られたXMLをパースし、必要な情報をまとめる部分までを実装していました。
XMLパーサはRuby標準のREXMLを使用して、XMLからIDリストを作成しようとしています。
require 'rexml/document'
...
xml = open(api, 'User-Agent' => 'ruby').read
doc = REXML::Document.new(xml); #XMLパーサを作成
doc.elements.each('eSearchResult/IdList/Id') do |id|
puts id.text
end
とりあえずこのようにしてIDの値を回収できることは確認できたので、次回はIDからアブストラクトを取得して、品詞解析するところまで実装できたらなと思っています。