R - 维基百科文章的自动分类

时间:2015-12-22 20:18:32

标签: r text-classification

我一直试图遵循Norbert Ryciak的这个example,我无法与之联系。

由于这篇文章是在2014年写的,所以R中的一些东西已经改变了,所以我能够在代码中更新其中的一些东西,但是我在最后一部分陷入困境。

到目前为止,这是我的工作代码:

$(canvas.wrapperEl).on('mousemove', function(evt) {
    if (evt.button == 2) { // 2 is the right mouse button
        canvas.absolutePan({
            x: evt.clientX,
            y: evt.clientY
        });
    }
});

但是我没能通过这部分:

 library(tm)
 library(stringi)
 library(proxy)

 wiki <- "https://en.wikipedia.org/wiki/"

 titles <- c("Integral", "Riemann_integral", "Riemann-Stieltjes_integral",  "Derivative",
  "Limit_of_a_sequence", "Edvard_Munch", "Vincent_van_Gogh", "Jan_Matejko",
  "Lev_Tolstoj", "Franz_Kafka", "J._R._R._Tolkien")

 articles <- character(length(titles))

 for (i in 1:length(titles)) {
   articles[i] <- stri_flatten(readLines(stri_paste(wiki, titles[i])), col = " ")
  }

 docs <- Corpus(VectorSource(articles))

 docs[[1]]
 docs2 <- tm_map(docs, function(x) stri_replace_all_regex(x, "<.+?>", " "))
 docs3 <- tm_map(docs2, function(x) stri_replace_all_fixed(x, "\t", " "))
 docs4 <- tm_map(docs3, PlainTextDocument)
 docs5 <- tm_map(docs4, stripWhitespace)
 docs6 <- tm_map(docs5, removeWords, stopwords("english"))
 docs7 <- tm_map(docs6, removePunctuation)
 docs8 <- tm_map(docs7, content_transformer(tolower))
 docs8[[1]]

 docsTDM <- TermDocumentMatrix(docs8)
 docsTDM2 <- as.matrix(docsTDM)
 docsdissim <- dist(docsTDM2, method = "cosine")

我试图直接运行“hclust”,然后我能够绘制Plot,但没有任何可读性。

这是我得到的错误:

 docsdissim2 <- as.matrix(docsdissim)
 rownames(docsdissim2) <- titles
 colnames(docsdissim2) <- titles
 docsdissim2
 h <- hclust(docsdissim, method = "ward.D")
 plot(h, labels = titles, sub = "")

另:

 rownames(docsdissim2) <- titles
 Error in `rownames<-`(`*tmp*`, value = c("Integral", "Riemann_integral",  : 
   length of 'dimnames' [1] not equal to array extent

有没有人可以帮我完成这个例子?

最诚挚的问候,

1 个答案:

答案 0 :(得分:1)

由于Norbert Ryciak(本教程的作者),我能够解决这个问题。

由于他使用旧版“tm”(当时可能是最新版本),因此与我使用的版本不兼容。

解决方案是将“docsTDM&lt; - TermDocumentMatrix(docs8)”替换为“docsTDM&lt; - DocumentTermMatrix(docs8)”。

所以最后的代码:

{{1}}