我一直在阅读不同的问题/答案(特别是在这里和这里),而没有设法适用于我的情况.
我有一个11,390行矩阵,其中包含属性id,作者,文本,例如:
library(tm)
m <- cbind(c("01","02","03","04","05","06"),
c("Author1","Author2","Author2","Author3","Author3","Auhtor4"),
c("Text1","Text2","Text3","Text4","Text5","Text6"))
Run Code Online (Sandbox Code Playgroud)
我想用它创建一个tm语料库.我可以快速创建我的语料库
tm_corpus <- Corpus(VectorSource(m[,3]))
Run Code Online (Sandbox Code Playgroud)
它终止了我的11,390行矩阵的执行
user system elapsed
2.383 0.175 2.557
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将元数据添加到语料库中时
meta(tm_corpus, type="local", tag="Author") <- m[,2]
Run Code Online (Sandbox Code Playgroud)
执行时间超过15分钟并计数(然后我停止执行).
根据这里的讨论,可能会大大减少处理语料库的时间tm_map; 就像是
tm_corpus <- tm_map(tm_corpus, addMeta, m[,2])
Run Code Online (Sandbox Code Playgroud)
我仍然不知道该怎么做.可能它会是这样的
addMeta <- function(text, vector) {
meta(text, tag="Author") = vector[??]
text
}
Run Code Online (Sandbox Code Playgroud)
首先,如何传递给tm_map值的向量以分配给语料库的每个文本?我应该在循环中调用该函数吗?我应该把tm_map功能包括在内vapply吗?
你有没有尝试过优秀的readTabular?
## your sample data
matrix <- cbind(c("01","02","03","04","05","06"),
c("Author1","Author2","Author2","Author3","Author3","Auhtor4"),
c("Text1","Text2","Text3","Text4","Text5","Text6"))
## simple transformations
matrix <- as.data.frame(matrix)
names(matrix) <- c("id", "author", "content")
Run Code Online (Sandbox Code Playgroud)
现在你的ex-matrix now data.frame可以使用readTabular作为语料库轻松阅读.ReadTabular希望您定义一个本身采用映射的Reader.在您的映射中,"内容"指向文本数据和其他名称 - 好 - 指向元.
## define myReader, which will be used in creation of Corpus
myReader <- readTabular(mapping=list(id="id", author="author", content="content"))
Run Code Online (Sandbox Code Playgroud)
现在,除了微小的变化之外,语料库的创建与以往一样:
## create the corpus
tm_corpus <- DataframeSource(matrix)
tm_corpus <- Corpus(tm_corpus,
readerControl = list(reader=myReader))
Run Code Online (Sandbox Code Playgroud)
现在看看第一项的内容和元数据:
lapply(tm_corpus, as.character)
lapply(tm_corpus, meta)
## output just as expected.
Run Code Online (Sandbox Code Playgroud)
这应该很快,因为它是包装的一部分并且极具适应性.在我自己的项目中,我在带有大约20个变量的data.table上使用它 - 它就像一个魅力.
但是,我无法为您已经批准的答案提供基准测试.我只是觉得它更快更有效.
| 归档时间: |
|
| 查看次数: |
4830 次 |
| 最近记录: |