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で公開されているものもあります。ぜひ試してください。
少しでも、あなたのウェブ解析が楽になりますように!!