删除矩阵中的稀疏性

时间:2015-07-22 03:49:04

标签: r matrix sparse-matrix

removeSparseTerms中的sparsity参数有什么作用?

这很有效。

TrigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 3, max = 3))
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2))
tdm <- DocumentTermMatrix(corpus, control = list(tokenize = TrigramTokenizer))
x <- as.matrix(removeSparseTerms(tdm, 0.99991))

然而,当我改为

x <- as.matrix(removeSparseTerms(tdm, 0.10))

这不起作用。矩阵返回稀疏矩阵。我不正确理解吗? 0.10参数确定术语必须出现在语料库中至少10%的文档中?

这是由于我的矩阵的稀疏性吗?

运行语料库会返回此结果

corpus
<<DocumentTermMatrix (documents: 42695, terms: 326740)>>
Non-/sparse entries: 393990/13949770310
Sparsity           : 100%
Maximal term length: 97
Weighting          : term frequency (tf)

1 个答案:

答案 0 :(得分:3)

稀疏性参数可帮助您删除至少具有一定百分比稀疏元素的术语。 (非常)粗略地说,如果要保持3%的时间出现的条件,请将参数设置为0.97。如果要在70%的时间内出现术语,请将参数设置为0.3。值必须大于0且小于1.

在您的情况下,如果您希望该术语至少在10%的时间内出现,则需要将稀疏度设置为0.9。

参见代码示例。

  libary(tm)

  data("crude")
  crude <- as.VCorpus(crude)
  crude <- tm_map(crude, stripWhitespace)
  crude <- tm_map(crude, removePunctuation)
  crude <- tm_map(crude, content_transformer(tolower))
  crude <- tm_map(crude, removeWords, stopwords("english"))
  crude <- tm_map(crude, stemDocument)
  dtm <- DocumentTermMatrix(crude)
  sdtm <- removeSparseTerms(dtm, 0.3)
  sdtm2 <- removeSparseTerms(dtm, 0.7)

  sdtm$ncol
  inspect(sdtm) # 4 words returned 
  sdtm2$ncol      
  inspect(sdtm2) # 24 words returned