2015-07-22 129 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