Rでコマンド:「textreadr」パッケージとdocx, txtファイルを読み込むコマンド


docxファイルの読み込みに便利な「textreadr」パッケージとパッケージを使用せずにdocx、txtファイルを読み込むコマンドの紹介です。

「textreadr」パッケージは今後のバージョンアップによりpdfファイルやフォルダ内のtxtファイルを一括で読み込むコマンドが追加されるようです。今後が楽しみなパッケージです。

また、read_docxコマンドを参考にdocx、txtファイルを単独またはフォルダに含まれる全てを読み込むコマンド例を作成しました。なお、txtファイルはエンコードがutf-8以外だと環境によっては文字化けする場合があります。

なお、処理に使用したdocx、txtファイルの内容は下記画像の通りです。

textreadr

パッケージバージョンは0.0.1。実行コマンドはR version 3.2.2で確認しています。


パッケージのインストール

下記、コマンドを実行してください。

#パッケージのインストール
install.packages("pacman")
pacman::p_load_gh("trinker/textreadr")

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("textreadr")
#ファイル選択をGUIで行うために読み込み
library("tcltk")

#docxファイルを読み込み:read_docxコマンド
#読み込まない範囲の最終行を指定:skipオプション;1から指定した範囲を飛ばします,0で全て読み込み
#結果は文字列で返されます
#docxファイルを選択
OpenFile <- paste0(as.character(tkgetOpenFile(title = "docxファイルを選択",
                                              filetypes = '{"docxファイル" {".docx"}}',
                                              initialfile = c("*.docx"))))
#ファイルを読み込み
ReadDocx <- read_docx(OpenFile, skip = 0)
#内容の確認
#改行のみは無視されます
ReadDocx
[1] "データ表現、時間節約、ストレス軽減を目指したRのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。 アニメもからだにいいものですよ。からだにいいもの運営で得た、ノウハウ?もウェブでGoodで公開中。"
[2] "「からだにいいもの」が皆様の生活に役に立てばと思います。"                                                                                                                                                              
[3] "そういえば、『GOODSMILE RACING & TeamUKYO』の2016年度個人スポンサーが16/01/01から募集していますよ。"                                                                                                                   
[4] "まだ、ねんどろいどの画像は公開されていませんが期待です。"                                                                                                                                                              
[5] "URLはこちら"                                                                                                                                                                                                           
[6] "http://www.goodsmileracing.com/sponsor/personal/" 
#一部のデータを取り出し
ReadDocx[c(2, 4)]
[1] "「からだにいいもの」が皆様の生活に役に立てばと思います。" "まだ、ねんどろいどの画像は公開されていませんが期待です。"

#read_docxコマンドの内容
read_docx <- function (file, skip = 0) {
  #tempフォルダを作成
  tmp <- tempfile()
  if (!dir.create(tmp)) stop("Temporary directory could not be established.")
  #ファイルを作成したフォルダに解凍
  #docxファイルはzip解凍ソフトで解凍することができます
  utils::unzip(file, exdir = tmp)
  #解凍したdocxファイルパスを取得
  xmlfile <- file.path(tmp, "word", "document.xml")
  #XMLパッケージを利用してdocument.xmlの内容を読み込み
  doc <- XML::xmlTreeParse(xmlfile, useInternalNodes = TRUE)
  #tempフォルダの削除
  unlink(tmp, recursive = TRUE)
  #段落を示すw:pタグのノードセットを取得
  nodeSet <- XML::getNodeSet(doc, "//w:p")
  #ノードセットに含まれる値(w:tタグ)の内容を取得
  pvalues <- sapply(nodeSet, XML::xmlValue)
  #空白を削除
  pvalues <- pvalues[pvalues != ""]
  #skipで指定した行までを削除
  if (skip > 0) pvalues <- pvalues[-seq(skip)]
  #最終的に取得できたデータ
  pvalues
}

docx、txtファイルを単独またはフォルダに含まれる全てを読み込む例

doxcファイル処理内容の詳細は実行コマンドを参照ください。なお、フォルダ内に拡張子がdocx及びtxt以外が含まれているとコンソールに該当ファイル名を含むエラーメッセージが表示され処理は中止となります。また、該当ファイルは1処理あたり1つの検出としています。

###パッケージを利用しないでdocx or textファイルを読み込む例#####
#必要パッケージの読み込み
library("tcltk")
install.packages("XML")
library("XML")

###単独で処理#####
#ファイルを選択
file <- paste0(as.character(tkgetOpenFile(title = "ファイルを選択",
                                          filetypes = '{"ファイル" {".docx" ".txt"}}',
                                          initialfile = c("*.docx", "*.txt"))))

#ファイルの種類を取得
#配列を逆順にして拡張子を選択
FExtension <- rev(unlist(strsplit(file, split = "\\.")))[1]

#ファイルの種類によって処理内容を変更
if(identical(all.equal("docx", FExtension), TRUE)){
  
  #docxファイルの処理
  tmp <- tempfile()
  unzip(file, exdir = tmp)
  xmlfile <- file.path(tmp, "word", "document.xml")
  doc <- xmlTreeParse(xmlfile, useInternalNodes = TRUE)
  unlink(tmp, recursive = TRUE)
  nodeSet <- getNodeSet(doc, "//w:p")
  ReadResult <- sapply(nodeSet, xmlValue)
  #空白の値を削除
  #ReadResult <- ReadResult[ReadResult != ""]
  
  } else {
    
  #txtファイルの処理
  ReadResult <- readLines(file, encoding = "utf-8")
  
  }

#内容の確認
ReadResult
[1] "データ表現、時間節約、ストレス軽減を目指したRのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。 アニメもからだにいいものですよ。からだにいいもの運営で得た、ノウハウ?もウェブでGoodで公開中。"
[2] ""                                                                                                                                                                                                                      
[3] "「からだにいいもの」が皆様の生活に役に立てばと思います。"                                                                                                                                                              
[4] ""                                                                                                                                                                                                                      
[5] "そういえば、『GOODSMILE RACING & TeamUKYO』の2016年度個人スポンサーが16/01/01から募集していますよ。"                                                                                                                   
[6] ""                                                                                                                                                                                                                      
[7] "まだ、ねんどろいどの画像は公開されていませんが期待です。"                                                                                                                                                              
[8] ""                                                                                                                                                                                                                      
[9] "URLはこちら"                                                                                                                                                                                                           
[10] "http://www.goodsmileracing.com/sponsor/personal/" 

###フォルダ内全てのdocx,txtファイルを処理
#フォルダを選択
FoldPath <- paste(as.character(tkchooseDirectory(title = "フォルダを選択"), sep = "", collapse =""))
#フォルダ内のファイルを取得
ItemList <- list.files(path = FoldPath)
#データ格納listclassを作成
ResultData <- vector("list", length(ItemList))
names(ResultData) <- ItemList
#繰り返し処理
for(i in seq(ItemList)){
#ファイルの読み込み
file <- paste(FoldPath, "/", ItemList[i],
              sep = "", collapse = "")

#ファイルの種類を取得
#配列を逆順にして拡張子を選択
FExtension <- rev(unlist(strsplit(file, split = "\\.")))[1]

#ファイルの種類によって処理内容を変更
if(identical(all.equal("docx", FExtension), TRUE)){
  
  #docxファイルの処理
  tmp <- tempfile()
  unzip(file, exdir = tmp)
  xmlfile <- file.path(tmp, "word", "document.xml")
  doc <- xmlTreeParse(xmlfile, useInternalNodes = TRUE)
  unlink(tmp, recursive = TRUE)
  nodeSet <- getNodeSet(doc, "//w:p")
  ResultData[[i]] <- sapply(nodeSet, xmlValue)
  #空白の値を削除
  #ResultData[[i]] <- ResultData[[i]][ResultData[[i]] != ""]
  
} else {
  
  if(identical(all.equal("txt", FExtension), TRUE)){
    
    #txtファイルの処理
    ResultData[[i]] <- readLines(file, encoding = "utf-8")
  
  } else {
    
    #エラー処理
    stop(paste0("docx,txtファイル以外が含まれています。ファイル名は ", ItemList[i], " です。"))
    
  }
  
}
}
#内容の確認
ResultData
$TEST.docx
 [1] "データ表現、時間節約、ストレス軽減を目指したRのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。 アニメもからだにいいものですよ。からだにいいもの運営で得た、ノウハウ?もウェブでGoodで公開中。"
 [2] ""                                                                                                                                                                                                                      
 [3] "「からだにいいもの」が皆様の生活に役に立てばと思います。"                                                                                                                                                              
 [4] ""                                                                                                                                                                                                                      
 [5] "そういえば、『GOODSMILE RACING & TeamUKYO』の2016年度個人スポンサーが16/01/01から募集していますよ。"                                                                                                                   
 [6] ""                                                                                                                                                                                                                      
 [7] "まだ、ねんどろいどの画像は公開されていませんが期待です。"                                                                                                                                                              
 [8] ""                                                                                                                                                                                                                      
 [9] "URLはこちら"                                                                                                                                                                                                           
[10] "http://www.goodsmileracing.com/sponsor/personal/"                                                                                                                                                                      

$TEST.txt
 [1] "データ表現、時間節約、ストレス軽減を目指したRのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。 アニメもからだにいいものですよ。からだにいいもの運営で得た、ノウハウ?もウェブでGoodで公開中。"
 [2] ""                                                                                                                                                                                                                      
 [3] "「からだにいいもの」が皆様の生活に役に立てばと思います。"                                                                                                                                                              
 [4] ""                                                                                                                                                                                                                      
 [5] "そういえば、『GOODSMILE RACING & TeamUKYO』の2016年度個人スポンサーが16/01/01から募集していますよ。"                                                                                                                   
 [6] ""                                                                                                                                                                                                                      
 [7] "まだ、ねんどろいどの画像は公開されていませんが期待です。"                                                                                                                                                              
 [8] ""                                                                                                                                                                                                                      
 [9] "URLはこちら"                                                                                                                                                                                                           
[10] "http://www.goodsmileracing.com/sponsor/personal/" 

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

スポンサードリンク

おすすめコンテンツ


スポンサードリンク