2013-02-13 58 views
2

我从数据框创建Copus。我将它作为VectorSource传递,因为只有一列我想用作文本源。这可以发现,但是我需要文集中的文档ID来匹配数据框中的文档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创建语料库?

回答

2

那么,一个简单但不分配你的ID,以您的文档非常优雅的方式,后来可能是以下几点:

for (i in 1:length(corpus)) { 
    attr(corpus[[i]], "ID") <- df$ids[i] 
} 
+0

它的工作原理!我会稍微等一下,看看是否有人能够想出更优雅的东西,也许在实际的语料库创建过程中分配它们。但是,如果他们不能,我会很乐意接受这一点,如果不是你单独回答的速度;) – user1098798 2013-02-13 11:31:16

+0

@ user1098798谢谢!我稍微修改了我的答案,因为显然你可以直接重用原始数据中的ID ... – juba 2013-02-13 11:43:13

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))) 
+0

'df2tm_corpus'已弃用;你可以编辑你的答案,并用'as.Corpus'代替吗? – coip 2015-06-11 21:05:27

+0

这不起作用!,我总是有他的结果空值 – bicepjai 2015-07-26 22:37:05

2

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

corpus = VCorpus(DataframeSource(df), readerControl = list(reader = readTabular(mapping = list(content = "textColumn", id = "ids"))))