我使用运行良好的 tm 包在 R 中有一些文本挖掘代码。然后,我更新了 R 以及 tm 和 R-Weka 包。现在,代码不起作用,我不知道为什么。
我的原始代码指南来自:https ://gist.github.com/benmarwick/6127413
在这一点上,这段代码(上面链接)和我的代码(下面)都没有给出预期的结果。当我的代码成功执行时(在以前版本的包中),它提供了涉及特定关键字的 n-gram。它还将根据与 n-gram 集中的关键字的距离提供一个有序的单词列表。
具体有两个问题:
- 每次都会产生错误(可能导致下一个/第二个问题)的一个 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 格式,因为我发现有些人说这一步没有必要。当我这样做时,文档文本矩阵就形成了(或者似乎准确地形成了)。但是我想解决这个错误,因为我之前在该行没有执行时遇到了问题。
- 但是,不管怎样,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 组词只是感兴趣的关键词,所有其他高频搭配都被删除(此时,我知道代码不起作用)。任何帮助或线索将不胜感激。最初需要很长时间才能使事情正常进行。然后,随着更新,我没有行动了。谢谢你。