RWeka删除稀疏术语

时间:2015-07-19 15:43:15

标签: r tm n-gram rweka

我正在使用RWeka创建一个三元组和四元组模型。我注意到有一种奇怪的行为 对于trigram

TrigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 3, max = 3))
tdm <- TermDocumentMatrix(docs, control = list(tokenize = TrigramTokenizer))

> dim(tdm)
[1] 1540099       3

> tdm
<<TermDocumentMatrix (terms: 1540099, documents: 3)>>
 Non-/sparse entries: 1548629/3071668
 Sparsity           : 66%
 Maximal term length: 180
Weighting          : term frequency (tf)

当我删除稀疏术语时,它会将上述约100万行缩小为8307

 > b <- removeSparseTerms(tdm, 0.66) 
 > dim(b)
 [1] 8307    3

对于Quadgram删除不会影响它

 quadgramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 4, max = 4))
  tdm <- TermDocumentMatrix(docs, control = list(tokenize = QuadgramTokenizer))

 <<TermDocumentMatrix (terms: 1427403, documents: 3)>>
 Non-/sparse entries: 1427936/2854273
 Sparsity           : 67%
 Maximal term length: 185
 Weighting          : term frequency (tf)
> dim(tdm)
[1] 1427403       3
> tdm <- removeSparseTerms(tdm, 0.67)
> dim(tdm)
[1] 1427403       3

删除稀疏术语后有100万件物品。

这看起来不对。

如果我做错了,请告诉我

此致 内甚

1 个答案:

答案 0 :(得分:0)

这很奇怪。一个逻辑行为是删除稀疏项将在两种情况下删除很多,因为三元组和四元组是不常见的单克案例。你的会话中有没有其他QuadgramTokenizer对象?你的原始函数是用一个小的&#34; q&#34; quadgramTokenize。但我想知道为什么它没有显示错误,它可能会把它视为空? 我认为它必须像这样简单。检查一下,如果不是,我将使用数据样本运行它,看看这里可能有什么问题。