我正在从数据框创建一个Copus。我将其作为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创建语料库?
答案 0 :(得分:5)
我知道@ user1098798可能已经晚了,但是有一种方法可以在创建语料库时直接指定ID。您需要将数据加载为DataframeSource()
并将映射添加到列:
corpus = VCorpus(DataframeSource(df), readerControl = list(reader = readTabular(mapping = list(content = "textColumn", id = "ids"))))
答案 1 :(得分:2)
嗯,之后将一个简单但不太优雅的方式将您的ID分配给您的文档可能如下:
for (i in 1:length(corpus)) {
attr(corpus[[i]], "ID") <- df$ids[i]
}
答案 2 :(得分:0)
这个问题的 qdap 方法可以在没有循环的情况下处理它:
从开始使用qdap version >= 1.1.0将数据框转换为Corpus
,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)))