アブストラクト取得クラスの修正
ある筆者名についての文献IDでefetchを呼び出すと、文献によってはタイトルが無かったり、アブストが無かったりするので、対応付けをちゃんとやる必要を感じました。
なので今回は、RubyのXMLパーサのREXMLについて、ドキュメンテーションを読みながら、うまくタイトルとアブストを関連づけてまとめて回収できるようにコードを書き換えました。
ある文献IDについて、そのタイトルとアブストの親要素となるXML Elementをまず検索し、その後その子要素の「ArticleTitle」と「AbstractText」のElementを取得する、というようにコードを修正しました。
doc.elements.each('PubmedArticleSet/PubmedArticle/MedlineCitation/Article') do |article|
title = article.elements['ArticleTitle']
abst = article.elements['Abstract/AbstractText']
...
REXML::ElementとREXML::Elementsとで継承しているクラスが異なるので、検索ができるElementsの方のクラスを使う必要がありました。これで必要な子要素がとれるので、あとはその要素がnilでないこと、text要素を持っていることを確認してから、ハッシュに登録するというようにしました。
いくつかのポスター筆者について実行してみたところ、問題なくアブストが取得できたので、ワークステーションを利用して全4000人のアブストラクトを取得しようと試みています。一人あたり約5秒で取得できるので、約5時間ぐらいで完了するはずです。
次回は得られたアブストリストの確認と、特徴語抽出のプログラム作成に入っていこうと思います。