हां , हालांकि यहां आपका भ्रम समझ में आता है, क्योंकि इस संदर्भ में शब्द "स्पार्सिटी" को स्पष्ट रूप से परिभाषित करना कठिन है।
sparse
तर्क के अर्थ में removeSparseTerms()
, एक अवधि के लिए सापेक्ष दस्तावेज़ आवृत्ति की दहलीज को संदर्भित करता है , जिसके ऊपर यह शब्द हटा दिया जाएगा। यहां सापेक्ष दस्तावेज़ आवृत्ति का अर्थ है एक अनुपात। कमांड राज्यों के लिए मदद पृष्ठ के रूप में (हालांकि बहुत स्पष्ट रूप से नहीं), 1.0 के करीब होने के कारण स्पार्सिटी छोटी है । (ध्यान दें कि स्पार्सिटी 0 या 1.0 के मान नहीं ले सकती, केवल बीच में मान।)
तो आपकी व्याख्या सही है कि sparse = 0.99
केवल उन्हीं शर्तों को हटाया जाएगा जो 0.99 से अधिक विरल हैं । इसके लिए सटीक व्याख्या sparse = 0.99
यह है कि शब्द , आप उन सभी शर्तों को बनाए रखेंगे जिनके लिए
, जहां दस्तावेजों की संख्या है - इस मामले में शायद सभी शर्तें बरकरार रहेंगी (नीचे उदाहरण देखें) ।जेघचजे> एन* ( 1 - 0.99 )एन
अन्य चरम के पास, यदि sparse = .01
, तो केवल (लगभग) हर दस्तावेज़ को बनाए रखने वाले शब्द बनाए जाएंगे। (बेशक यह शब्दों की संख्या और दस्तावेजों की संख्या पर निर्भर करता है, और प्राकृतिक भाषा में, "द" जैसे सामान्य शब्द हर दस्तावेज़ में होने की संभावना है और इसलिए कभी भी "विरल" नहीं होना चाहिए।)
0.99 की विरलता दहलीज का एक उदाहरण है, जहां एक शब्द जो 0.01 दस्तावेजों से कम (पहले उदाहरण) में सबसे अधिक होता है, और 0.01 से अधिक दस्तावेजों में (दूसरा उदाहरण):
> # second term occurs in just 1 of 101 documents
> myTdm1 <- as.DocumentTermMatrix(slam::as.simple_triplet_matrix(matrix(c(rep(1, 101), rep(1,1), rep(0, 100)), ncol=2)),
+ weighting = weightTf)
> removeSparseTerms(myTdm1, .99)
<<DocumentTermMatrix (documents: 101, terms: 1)>>
Non-/sparse entries: 101/0
Sparsity : 0%
Maximal term length: 2
Weighting : term frequency (tf)
>
> # second term occurs in 2 of 101 documents
> myTdm2 <- as.DocumentTermMatrix(slam::as.simple_triplet_matrix(matrix(c(rep(1, 101), rep(1,2), rep(0, 99)), ncol=2)),
+ weighting = weightTf)
> removeSparseTerms(myTdm2, .99)
<<DocumentTermMatrix (documents: 101, terms: 2)>>
Non-/sparse entries: 103/99
Sparsity : 49%
Maximal term length: 2
Weighting : term frequency (tf)
यहाँ वास्तविक पाठ और शर्तों के साथ कुछ अतिरिक्त उदाहरण दिए गए हैं:
> myText <- c("the quick brown furry fox jumped over a second furry brown fox",
"the sparse brown furry matrix",
"the quick matrix")
> require(tm)
> myVCorpus <- VCorpus(VectorSource(myText))
> myTdm <- DocumentTermMatrix(myVCorpus)
> as.matrix(myTdm)
Terms
Docs brown fox furry jumped matrix over quick second sparse the
1 2 2 2 1 0 1 1 1 0 1
2 1 0 1 0 1 0 0 0 1 1
3 0 0 0 0 1 0 1 0 0 1
> as.matrix(removeSparseTerms(myTdm, .01))
Terms
Docs the
1 1
2 1
3 1
> as.matrix(removeSparseTerms(myTdm, .99))
Terms
Docs brown fox furry jumped matrix over quick second sparse the
1 2 2 2 1 0 1 1 1 0 1
2 1 0 1 0 1 0 0 0 1 1
3 0 0 0 0 1 0 1 0 0 1
> as.matrix(removeSparseTerms(myTdm, .5))
Terms
Docs brown furry matrix quick the
1 2 2 0 1 1
2 1 1 1 0 1
3 0 0 1 1 1
पिछले उदाहरण में sparse = 0.34
, केवल दो-तिहाई दस्तावेजों में होने वाली शर्तों को बरकरार रखा गया था।
दस्तावेज़ आवृत्ति पर आधारित दस्तावेज़-टर्म मैट्रिक्स से शब्दों को ट्रिम करने के लिए एक वैकल्पिक दृष्टिकोण पाठ विश्लेषण पैकेज क्वांटेड है । यहां समान कार्यक्षमता का तात्पर्य स्पार्सिटी से नहीं है , बल्कि सीधे शब्दों की दस्तावेज़ आवृत्ति से है (जैसा कि tf-idf में )।
> require(quanteda)
> myDfm <- dfm(myText, verbose = FALSE)
> docfreq(myDfm)
a brown fox furry jumped matrix over quick second sparse the
1 2 1 2 1 2 1 2 1 1 3
> trim(myDfm, minDoc = 2)
Features occurring in fewer than 2 documents: 6
Document-feature matrix of: 3 documents, 5 features.
3 x 5 sparse Matrix of class "dfmSparse"
features
docs brown furry the matrix quick
text1 2 2 1 0 1
text2 1 1 1 1 0
text3 0 0 1 1 1
यह प्रयोग मुझे अधिक सीधा लगता है।