我在R中使用tm
并处理10k文档。我想通过索引来检查一些,但它们并不匹配文件。为什么tm以奇怪的顺序加载大量文档,以及如何修复/破坏它?这是一个例子:
library(tm)
docs <- c()
for (i in 1:10000) {
docs <- c(docs, paste('test', i))
}
cor <- VCorpus(VectorSource(docs))
filepath = '/home/nate/Dropbox/MSDS/MSDS682_ncg_F8W2_17/test_cor'
writeCorpus(cor, path = filepath)
cor2 <- VCorpus(DirSource(filepath))
as.character(cor2[[1]])
as.character(cor2[[2]])
as.character(cor2[[3]])
as.character(cor2[[4]])
打印出来:
test 10000
test 1000
test 1001
test 1002
答案 0 :(得分:3)
由于writeCorpus
创建的文件名,导致此结果。在路径中,您会找到名为1.txt, 10.txt, 100.txt, 1000.txt, 1001.txt ... n.txt
当您使用DirSource
阅读它们时,他们会使用该文本排序而非您预期的数字。
要按预期保留排序顺序,可以将filenames
参数添加到writeCorpus
,例如:
writeCorpus(
cor,
path = filepath,
filenames = paste0(sprintf("%05d", 1:length(cor)), ".txt")
)
这将使您的文件输出00001.txt, 00002.txt, 00003.txt ... n.txt
,以及从磁盘返回的导入将以正确的顺序读取。