PubMedは文献検索サイトで検索結果をxmlで出力できます。xmlはRで編集が可能なので、PubMed検索結果のxmlから論文タイトルとアブストラクトを読み込み、タグプロットと単語の出現数をまとめたcsvを出力するコードを作成しました。なお、PubMed以外のxmlファイルでもRで操作が可能なので参考例としてご覧ください。
解析の前準備
パッケージの導入
- XMLファイルの操作に必要な”XML”
- 英語のテキストマイニングに必要な”tm”
- タグクラウドに必要な”wordcloud”
- 色の設定に必要な”RColorBrewer”
*パッケージの一括導入は下記コードで可能です。
install.packages(c("XML", "tm", "wordcloud", "RColorBrewer"))
なお、install.packages(パッケージ名)にすることで個別にインストールができます。
xmlファイルのダウンロード
- PubMedにアクセスする。http://www.ncbi.nlm.nih.gov/pubmed
- 検索する。
- 検索結果の右上に表示されるSend toをクリックしFile→FormatをxmlとしCreate Filを押す。そうすると、xmlファイルがダウンロードできます。
コードの実行
コードを実行すると、読み込むxmlファイルと保存先フォルダの確認があります。結果は保存先フォルダに、論文タイトルとアブストラクトそれぞれの単語出現数をまとめたcsvファイルとタグプロットが出力されます。詳細はコードにコメントを記述していますのでご確認ください。
###ライブラリーの読み込み#####
library("tcltk")
library("XML")
library("tm")
library("wordcloud")
library("RColorBrewer")
########
###タグクラウドのテキストの色を設定#####
Col <- brewer.pal(8, "Dark2") #文字色の指定
########
###プロットする単語の出現数設定。"論文タイトル", "アブストラクト"の設定です。以上での抽出結果となります。#####
WordFreq <- c(5, 15)
########
###データの読み込み#####
selectAXlm <- paste(as.character(tkgetOpenFile(title = "xmlファイルを選択",filetypes = '{"xmlファイル" {".xml"}}',initialfile = "*.xml")), sep = "", collapse =" ")
MasterAnaData <- xmlInternalTreeParse(selectAXlm)
########
###結果保存先のフォルダを設定#####
SaveDir <- as.data.frame(paste(as.character(tkchooseDirectory(title = "データ保存フォルダを選択"), sep = "", collapse =" "))) #初期dirpathの取得準備
SaveDir <- paste(SaveDir[1:(nrow(SaveDir)),], sep = " ", collapse = "/" ) #保存pathの取得
setwd(SaveDir)
########
###xmlファイルから論文タイトルとアブストラクトを抽出#####
###xmlの操作は要素名を抽出し、その値をまとめることが多いと思います。多くはxpathSApply()で補えると思います。多くの要望があればxmlライブラリのコマンドをまとめようかなと思います。#####
Title <- as.data.frame(xpathSApply(MasterAnaData, "//ArticleTitle", xmlValue)) #論文タイトルの抽出
Abstract <-as.data.frame(xpathSApply(MasterAnaData, "//AbstractText", xmlValue)) #アブストラクトの抽出
########
AnaList <- c("Title", "Abstract") #抽出するデータ名により変更
for(i in seq(AnaList)){
###テキストマイニングの設定、お好みに合わせてください#####
CorMaster <- Corpus(DataframeSource(eval(parse(text = AnaList[i])))) #コーパスの作成
CorMaster <- tm_map(CorMaster, stripWhitespace) #空白の削除
CorMaster <- tm_map(CorMaster, removeNumbers) #数字の削除
CorMaster <- tm_map(CorMaster, removePunctuation) #句読点の削除
CorMaster <- tm_map(CorMaster, removeWords, stopwords("english")) #and, or等の削除
TermVec <- DocumentTermMatrix(CorMaster) #タームマトリックスの集計
########
###単語解析結果をデータフレーム化#####
AnalyticsAllWords <- as.data.frame(apply(TermVec, 2, sum)) #単語の出現率を集計
AnalyticsAllWords <- cbind(rownames(AnalyticsAllWords), AnalyticsAllWords)
AnalyticsAllWords <- subset(AnalyticsAllWords, !(AnalyticsAllWords[, 1] %in% c("chlorella", "the", "this", "can", "thus", "these")) )#除去したい単語を設定
AnalyticsAllWords <- AnalyticsAllWords[sort.list(AnalyticsAllWords[, 2], decreasing=TRUE),] #出現数を降順で並び替え
AnalyticsWords <- subset(AnalyticsAllWords, AnalyticsAllWords[, 2] >= WordFreq[i]) #指定した数以上で抽出
colnames(AnalyticsAllWords) <- c("単語", "出現数") #行名の設定
########
png(paste(AnaList[i], ".png", seq = ""), width = 1280, height = 800) #plotをpngで保存
###タグクラウドのプロット#####
wordcloud(AnalyticsWords[, 1], AnalyticsWords[, 2], scale=c(8,.2),
random.order = FALSE, rot.per = .15, colors = Col)
########
dev.off()
write.csv(AnalyticsAllWords, paste(AnaList[i], "_結果.csv", seq = ""), row.names = FALSE) #結果をcsvで保存
}
出力結果
図のようなタグクラウドとcsvファイルが保存先に指定したフォルダに出力されます。補足ですが、紹介したコードでは出力する単語の出現数を論文タイトルは5以上, アブストラクトは15以上にしています。適時変更してください。なお、PubMed以外のxmlファイルでもRで操作が可能です。統計情報はxmlで公開されているものもあります。ぜひ試してください。
少しでも、あなたのウェブ解析が楽になりますように!!