去除矩阵中的稀疏性

Removing Sparsity in matrix

removeSparseTerms 中的稀疏度参数有什么作用?

这有效。

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

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

这是因为我的矩阵稀疏吗?

运行语料库returns这个结果

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

稀疏参数可以帮助您删除那些至少具有一定比例的稀疏元素的项。 (非常)粗略地说,如果要保留 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