gpt4 book ai didi

r - 如何使用 tm_map 将元数据添加到 tm Corpus 对象

转载 作者:行者123 更新时间:2023-12-05 01:23:39 31 4
gpt4 key购买 nike

我一直在阅读不同的问题/答案(尤其是 herehere),但没有设法将任何问题/答案应用于我的情况。

我有一个 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 分钟并且还在继续(然后我停止了执行)。

根据讨论here使用 tm_map 可以显着减少处理语料库的时间;像

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

我仍然不确定该怎么做。可能会是这样的

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

一方面,如何将要分配给语料库每个文本的值向量传递给 tm_map?我应该从循环中调用该函数吗?我应该在 vapply 中包含 tm_map 函数吗?

最佳答案

您是否已经尝试过出色的 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 上使用它 - 它就像一个魅力。

但是,我无法提供您已经认可为合适的答案的基准测试。我只是猜测它更快、更高效。

关于r - 如何使用 tm_map 将元数据添加到 tm Corpus 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21036032/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com