0

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

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

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

具体有两个问题:

  1. 每次都会产生错误(可能导致下一个/第二个问题)的一个 tm 功能是 PlainTextDocument。那行代码是:

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 是否在做它应该做的事情。

该代码是:

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=" ")))

uniques 组词只是感兴趣的关键词,所有其他高频搭配都被删除(此时,我知道代码不起作用)。任何帮助或线索将不胜感激。最初需要很长时间才能使事情正常进行。然后,随着更新,我没有行动了。谢谢你。

4

1 回答 1

0

这是 tm 包版本问题。您需要安装 0.6-2 版本。解决方案:

  1. 代码 - 更快:

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

  1. 如果这不起作用,请下载软件包并手动安装。
于 2017-12-06T22:15:32.423 回答