我是文本挖掘數以千計的文檔(基本上是做頻率計數),並想知道是否有其他方法來加速以下過程?目前運行整個分析需要超過10個小時。謝謝(來自R初學者)。加快R中的文本挖掘(和循環)
sessionInfo()
#R version 3.2.3 (2015-12-10)
library(bitops)
library(RCurl)
library(XML)
library(stringr)
library(tm)
setwd("F:/testing_folder")
path = "F:/testing_folder"
file.names <- dir(path, pattern =".txt")
filename <- vector()
totalword <- vector()
system.time(
for(i in 1:length(file.names)){
text.v <- scan(file.names[i], what="character", sep="\n",encoding = "UTF-8")
report.v <- paste(text.v, collapse=" ")
#Count total number of words
words.l <- strsplit(report.v, "\\W")
word.v <- unlist(words.l)
not.blanks.v <- which(word.v!="")
word.v <- word.v[not.blanks.v]
totalword <- append(totalword,length(word.v))
filename <- append(filename,print(file.names[i]))
x <- data.frame(filename,totalword)
write.csv(x, file= "results.csv") #export results
}
)
而不是'filename < - vector(); totalword < - vector()'你應該預先分配它們到正確的大小。這會給你一個明顯的加速。另外,不要在循環的每次迭代中運行'write.csv' - 它會簡化覆蓋每次運行的結果,這需要時間並且沒有多大意義 –
謝謝,但我不確定我完全理解你的意思是。比如說,如果我總共有10,300份文件,你能說得更具體嗎?我應該怎麼做? – kxiang
你的問題不可重現,所以很難確切知道你在做什麼。我所說的是一般性的評論,你不應該在一個循環中增長一個對象(相反,你應該預先分配它,查看'vector'),並且你只是在每個循環操作中覆蓋了csv文件的結果,因此你應該簡單地將它從循環中移除並寫入之後 –