2

我正在从数据框创建一个 Copus。我将其作为 a 传递,因为VectorSource我只想将一列用作文本源。这项工作发现但是我需要语料库中的文档 ID 来匹配数据框中的文档 ID。文档 ID 存储在原始数据框中的单独列中。

df <- as.data.frame(t(rbind(c(1,3,5,7,8,10), 
                        c("text", "lots of text", "too much text", "where will it end",         "give peas a chance","help"))))
colnames(df) <- c("ids","textColumn")
library("tm")
library("lsa")
corpus <- Corpus(VectorSource(df[["textColumn"]]))

运行此代码会创建一个语料库,但文档 ID 为 1-6。有什么方法可以创建文档 ID 为 1、3、5、7、8、10 的语料库?

4

3 回答 3

5

我知道@user1098798 可能已经晚了,但是有一种方法可以在创建语料库时直接指定 ID。您需要将数据加载为DataframeSource()并将映射添加到列:

corpus = VCorpus(DataframeSource(df), readerControl = list(reader = readTabular(mapping = list(content = "textColumn", id = "ids"))))
于 2016-03-23T10:26:44.830 回答
3

好吧,一种简单但不是很优雅的方式将您的 id 分配给您的文档,可能如下:

for (i in 1:length(corpus)) {
   attr(corpus[[i]], "ID") <- df$ids[i]
}
于 2013-02-13T11:28:32.620 回答
0

这是解决此问题的qdap方法,可以在没有循环的情况下处理它:

从一开始就使用qdap 版本 >= 1.1.0将数据帧转换为 aCorpus并且将自动添加 ID 标签。

with(df, as.Corpus(textColumn, ids))

## <<VCorpus>>
## Metadata:  corpus specific: 0, document level (indexed): 3
## Content:  documents: 6


## Look around a bit
meta(with(df, as.Corpus(textColumn, ids)), tag="id")
inspect(with(df, as.Corpus(textColumn, ids)))
于 2014-02-28T05:09:13.337 回答