2012-04-13 13 views
0

Ich habe ein Korpus, X, in R erstellt aus einem Verzeichnis mit DirSource. Jedes Dokument ist eine Textdatei, die den vollständigen HTML-Code einer verwandten vBulletin-Forum-Webseite enthält. Da es ein Thread ist, hat jedes Dokument mehrere separate Posts, die ich mit meinem XPath erfassen möchte. Der XPath scheint zu funktionieren, aber ich kann nicht alle meine erfassten Knoten zurück in den Korpus legen.XPath für jedes Dokument in R Corpus

Wenn mein Korpus 25 Dokumente enthält, die durchschnittlich 4 Beiträge haben, dann sollte mein neues Korpus 100 Dokumente haben. Ich frage mich, ob ich eine Schleife machen und ein neues Korpus erstellen muss.

Hier ist meine schmutzige Arbeit so weit. Jede Quelle aus einem Thread in www.vbulletin.org/forum/ ist ein Beispiel für die Struktur.

#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')]") 

Antwort

1

Ich habe es vor einiger Zeit herausgefunden. htmlParse benötigt 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") 

Um alle Dateien, ich list.files verwenden, um die Dateiliste Karte/clusterMap mit getXpath zu bekommen(), um sie in einer Liste zu setzen, do.call sie in einem Vektor zu bekommen, und Corpus (VectorSource (res)) um sie in ein Corpus zu legen.

Verwandte Themen