r中的LDAvis不起作用:错误和空输出

时间:2017-07-01 17:36:31

标签: r text-mining lda topic-modeling

我是R和文本挖掘的初学者。我已经完成了LDA,现在我希望用LDAvis包可视化我的结果。我已经从github示例(https://ldavis.cpsievert.me/reviews/reviews.html)开始跟踪每个步骤,从可视化'章节。但是,我要么得到错误通知或空页。

我尝试了以下内容:

RedditResults <- list(phi = phi, 
                      theta = theta, 
                      doc.length = doc.length, 
                      vocab = vocab, 
                      term.frequency = term.frequency)
json <- createJSON(phi = RedditResults$phi, 
                   theta = RedditResults$theta, 
                   doc.length = RedditResults$doc.length, 
                   vocab = RedditResults$vocab, 
                   term.frequency = RedditResults$term.frequency)
serVis(json, out.dir = "vis", open.browser = FALSE)

然而,这给了我一个错误显示说:

Error in cat(list(...), file, sep, fill, labels, append) : 
  argument 1 (type 'closure') cannot be handled by 'cat'

我认为这可能发生了,因为&#39; json&#39;对象具有类&#39;功能&#39;而不是一个字符串,我读取该对象必须在其中执行serVis。因此,我尝试在使用serVis之前通过

转换它
RedditResults <- sapply(RedditResults, toJSON)

导致以下错误:

Error in run(timeoutMs) : 
      Evaluation error: argument must be a character vector of length 1.

我觉得我在某个地方犯了一个非常明显的错误,但经过几天的反复试验后,我无法发现我应该做的不同。

对我来说最奇怪的是,有时它确实有效,但是当我尝试打开html文件时,我只看到一个空白页面。我尝试在多个浏览器中打开它以及打开这些浏览器来显示本地文件。我也尝试使用servr包打开它,但这给了我相同的结果,即错误通知(字符向量长度不等于1)或空页。

希望任何人都能发现我做错了什么。谢谢!

编辑:上面代码所基于的对象/代码:

方便了解:

  • 在将数据转换为我的文档术语矩阵(tdm3)之前,我以语料库形式(reddit_data_textcleaned)清理了数据。
  • 将其转换为tdm3后,我删除了任何空的&#39;排除少于2个字的文件。因此,&#39; reddit_data_textclea&#39;包含的文档多于相关文档和&#39; tdm3&#39;包含我想要使用的数据。
  • &#39; FIT3&#39;是在tdm3上进行LDA的拟合模型
  • &#39; DTM&#39;术语 - 文档矩阵与tdm3具有完全相同的数据,但具有转置的行/列。
  • 我知道调用你的术语 - 文档矩阵“DTM”是没有意义的。同时命名您的文档 - 术语矩阵&#39; tdm&#39;,查看缩写。对不起。

           phi <- as.matrix(posterior(fit3)$terms)
           theta <- as.matrix(posterior(fit3)$topics)
           dp <- dim(phi)  # should be K x W
           dt <- dim(theta)  # should be D x K
           D <- length(as.matrix(tdm3[, 1])) # number of documents (2812)
           doc.length <- colSums(as.matrix(DTM)) #number of tokens in each document
           N <- sum(doc.length)  # total number of tokens in the data (54,136)
           vocab <- colnames(phi)# all terms in the vocab
           W <- length(vocab)  # number of terms in the vocab (6470)
    
       temp_frequency <- inspect(tdm3)
       freq_matrix <- data.frame(ST = colnames(temp_frequency),
                                 Freq = colSums(temp_frequency))
       rm(temp_frequency)
       term.frequency <- freq_matrix$Freq
    
       doc.list <- as.list(reddit_data_textcleaned, "[[:space:]]+")
       get.terms <- function(x) {
         index <- match(x, vocab)
         index <- index[!is.na(index)]
         rbind(as.integer(index - 1), as.integer(rep(1, length(index))))
       }
       documents <- lapply(doc.list, get.terms)
    

我认为在创建“get.terms”中会出现问题。和&#39;文件&#39;对象,因为我不知道那里发生了什么。我根据我在这个平台上阅读的类似问题的答案使用了这些方法。此外,&#39; doc.list&#39;对象仍包含我在转换后从数据中删除的空文档&#39; reddit_data_textcleaned&#39;到&#39; tdm3&#39;。但是,上面的代码不适用于文档术语矩阵对象,因此我使用了“reddit_data_textcleaned&#39;而不是&#39; tdm3&#39;。我想我稍后会解决这个问题。

0 个答案:

没有答案