2015-07-22 127 views
0

removeSparseTerms中的这个稀疏参数有什么作用?删除矩阵中的稀疏

This Works。

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) 

回答

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