2012-04-13 29 views
0

我有一个使用DirSource从目录创建的R中的语料库x。每个文档都是包含相关vBulletin论坛网页的完整HTML的文本文件。由于它是一个线程,每个文档都有多个单独的帖子,我想用我的XPath来捕获这些帖子。 XPath似乎可行,但我无法将所有捕获的节点放回到语料库中。R Corpus中每个文档的XPath

如果我的语料库有25个文件,每个文件平均有4个帖子,那么我的新语料库应该有100个文件。我想知道如果我必须做一个循环,并创建一个新的语料库。

这是我迄今为止的杂乱工作。来自www.vbulletin.org/forum/中某个主题的任何资源都是该结构的一个例子。

#for stepping through 
xt <- x[[5]] 
xpath <- "//div[contains(@id,'post_message')]" 

getxpath <- function(xt,xpath){ 
    require(XML) 

    #either parse 
    doc <- htmlParse(file=xt) 
    #doc <- htmlTreeParse(tolower(xt), asText = TRUE, useInternalNodes = TRUE) 

    #don't know which to use 
    #result <- xpathApply(doc,xpath,xmlValue) 
    result <- xpathSApply(doc,xpath,xmlValue) 

    #clean up 
    result <- gsub(pattern="\\s+",replacement=" ",x=gsub(pattern="\n|\t",replacement=" ",x=result)) 

    result <- c(result[1:length(result)]) 

    free(doc) 

    #converts group of nodes into 1 data frame with numbers before separate posts 
    #require(plyr) 
    #xbythread <- ldply(.data=result,.fun=function(x){unlist(x)}) 

    #don't know what needs to be returned 
    result <- Corpus(VectorSource(result)) 
    #result <- as.PlainTextDocument(result) 

    return(result) 
} 

#call 
x2 <- tm_map(x=x,FUN=getxpath,"//div[contains(@id,'post_message')]") 

回答

1

前一段时间发现了它。 htmlParse需要isURL = TRUE。

getxpath <- function(xt,xpath){ 
    require(XML);require(tm) 
    x <- htmlParse(file=u,isURL=TRUE) 
    resultvector <- xpathSApply(x,xpath,xmlValue) 
    result <- gsub(pattern="\\s+",replacement=" ",x=gsub(pattern="\n|\t",replacement=" ",x=resultvector)) 
    return(result) 
} 

res <- getxpath("http://url.com/board.html","//xpath") 

为了让所有的文件,我用list.files来获取文件列表,地图/的ClusterMap与getxpath()把它们放在一个列表,do.call让他们在一个向量,语料库(VectorSource(res))将它们放入语料库中。