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