本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

Rで解析:便利!Rで読み込むxmlファイル

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ファイルのダウンロード

  1. PubMedにアクセスする。http://www.ncbi.nlm.nih.gov/pubmed
  2. 検索する。
  3. 検索結果の右上に表示される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] &gt;= 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で公開されているものもあります。ぜひ試してください。

少しでも、あなたのウェブ解析が楽になりますように!!

このコードの続きをAIに聞く

スポンサーリンク
Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.