繁体   English   中英

如何使用tm_map向tm Corpus对象添加元数据

[英]How to add metadata to tm Corpus object with tm_map

我一直在阅读不同的问题/答案(特别是在这里这里 ),而没有设法适用于我的情况。

我有一个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"))

我想用它创建一个tm语料库。 我可以快速创建我的语料库

tm_corpus <- Corpus(VectorSource(m[,3]))

它终止了我的11,390行矩阵的执行

   user  system elapsed 
  2.383   0.175   2.557 

但是当我尝试将元数据添加到语料库中时

meta(tm_corpus, type="local", tag="Author") <- m[,2]

执行时间超过15分钟并计数(然后我停止执行)。

根据这里的讨论可能会大大减少使用tm_map处理语料库的时间; 就像是

tm_corpus <- tm_map(tm_corpus, addMeta, m[,2])

我仍然不知道该怎么做。 可能它会是这样的

addMeta <- function(text, vector) {
  meta(text, tag="Author") = vector[??]
  text
}

首先,如何将一个值向量传递给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")

现在你的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"))

现在,除了微小的变化之外,语料库的创建与以往一样:

## create the corpus
tm_corpus <- DataframeSource(matrix)
tm_corpus <- Corpus(tm_corpus,
    readerControl = list(reader=myReader))

现在看看第一项的内容和元数据:

lapply(tm_corpus, as.character)
lapply(tm_corpus, meta)
## output just as expected.

这应该很快,因为它是包装的一部分并且极具适应性 在我自己的项目中,我在带有大约20个变量的data.table上使用它 - 它就像一个魅力。

但是,我无法为您已经批准的答案提供基准测试。 我只是觉得它更快更有效。

是的tm_map更快,它是要走的路。 你应该在这里使用全球计数器。

auths <- paste0('Author',seq(11390))
i <- 0
tm_corpus = tm_map(tm_corpus, function(x) {
   i <<- i +1
   meta(x, "Author") <- m[i,2]
   x
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM