在程序包更新后,在tm中查找n-gram不起作用

时间:2017-05-31 20:10:02

标签: r tm rweka

我在R中使用了运行良好的tm软件包中的一些文本挖掘代码。然后,我更新了R以及tm和R-Weka包。现在,代码不起作用,我不知道为什么。

我的原始代码指南来自:https://gist.github.com/benmarwick/6127413

此代码(上面链接的)和我的代码(下面)都没有给出所需的结果。当我的代码成功执行时(在以前版本的软件包下), 它提供了涉及特定关键词的n-gram。它还将根据它们与n-gram集合中关键词的距离提供有序的单词列表。

有两个具体问题:

  1. 每次生成错误的一个tm功能(可能导致下一个/第二个问题)是PlainTextDocument。那行代码是:
  2. eventdocs< - tm_map(eventdocs,PlainTextDocument)

    下一行代码是:

    eventdtm <- DocumentTermMatrix(eventdocs)   
    

    尝试创建文档文本矩阵(eventdtm)时,代码会给出错误:

    simple_triplet_matrix中的错误(i,j,v,nrow = length(terms),ncol = length(corpus),:   'i,j'无效

    我已经更新了所有,包括java,但仍然会出现此错误。

    我注释了PlainTextDocument代码,因为我使用的文本已经是.txt格式,因为我发现有些人说这个步骤不是必需的。当我这样做时,形成文档 - 文本矩阵(或似乎准确地形成)。但我想解决这个错误,因为我之前遇到的问题是该行没有执行。

    1. 但是,无论如何,n-gram的形成似乎都存在问题。第一个街区对我来说是最可疑的。我不确定NGramTokenizer正在做它应该做的事情。
    2. 该代码是:

      span <- 4 
      span1 <- 1 + span * 2 
      ngramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = span1, max = span1))
      dtmevents <- TermDocumentMatrix(eventdocs, control = list(tokenize = ngramTokenizer))
      
      #find ngrams that have the key word of interest
      word <- "keyword"
      subset_ngrams <- dtmevents$dimnames$Terms[grep(word, dtmevents$dimnames$Terms)]
      
      subset_ngrams <- subset_ngrams[sapply(subset_ngrams, function(i) {
      tmp <- unlist(strsplit(i, split=" "))
      tmp <- tmp[length(tmp) - span]
      tmp} == word)]
      
      allwords <- paste(subset_ngrams, collapse = " ")
      uniques <- unique(unlist(strsplit(allwords, split=" ")))
      

      唯一的单词集只是感兴趣的关键词,删除了所有其他高频配置(此时,我知道代码不起作用)。任何帮助或线索将不胜感激。花了很长时间让事情最初起作用。然后,随着更新,我失去了行动。谢谢。

1 个答案:

答案 0 :(得分:0)

它的软件包版本问题。 您需要安装0.6-2版本。 解决方案:

  1. 代码 - 更快:
  2. require(devtools) install_version("tm", version = "0.6-2", repos = "http://cran.r-project.org")

    1. 如果不起作用,请下载软件包并手动安装。