tm结合语料库列表

时间:2014-01-07 12:00:12

标签: r list tm

我有一个URL列表,我已经获取了webcontent,并将其包含在tm语料库中:

library(tm)
library(XML)

link <- c(
"http://www.r-statistics.com/tag/hadley-wickham/",                                                      
"http://had.co.nz/",                                                                                    
"http://vita.had.co.nz/articles.html",                                                                  
"http://blog.revolutionanalytics.com/2010/09/the-r-files-hadley-wickham.html",                          
"http://www.analyticstory.com/hadley-wickham/"  
)               

create.corpus <- function(url.name){
doc=htmlParse(url.name)
parag=xpathSApply(doc,'//p',xmlValue)
if (length(parag)==0){
  parag="empty"
}
cc=Corpus(VectorSource(parag))
meta(cc,"link")=url.name
return(cc)
}

link=catch$url
cc <- lapply(link, create.corpus)

这给了我一个语料库的“大列表”,每个URL一个。 将它们逐一组合起来:

x=cc[[1]]
y=cc[[2]]
z=c(x,y,recursive=T) # preserved metadata
x;y;z
# A corpus with 8 text documents
# A corpus with 2 text documents
# A corpus with 10 text documents

但这对于拥有几千个语料库的列表来说变得不可行。 那么如何在维护元数据的同时将语料库列表合并到一个语料库中呢?

3 个答案:

答案 0 :(得分:5)

您可以使用do.call来致电c

do.call(function(...) c(..., recursive = TRUE), cc)
# A corpus with 155 text documents

答案 1 :(得分:2)

我不认为tm提供任何内置函数来加入/合并许多语料库。但毕竟语料库是一个文档列表,那么问题是如何将列表列表转换为列表。我会使用所有文档创建一个新的语料库,然后手动分配元数据:

y = Corpus(VectorSource(unlist(cc)))
meta(y,'link') = do.call(rbind,lapply(cc,meta))$link

答案 2 :(得分:0)

您的代码无效,因为catch未定义,因此我不确切知道应该做什么。

但是现在可以将语料库放入一个向量中来制作一个大的语料库:https://www.rdocumentation.org/packages/tm/versions/0.7-1/topics/tm_combine

所以也许c(unlist(cc))可行。我无法测试它是否会起作用,因为你的代码没有运行。