Так , хоча ваша плутанина тут зрозуміла, оскільки термін "порядність" важко чітко визначити в цьому контексті.
У сенсі sparse
аргументу до " removeSparseTerms()
нерівномірність" посилається на поріг відносної частоти документа для терміну, вище якого термін буде видалений. Відносна частота документів тут означає пропорцію. Як показано на сторінці довідки для команди (хоча це не дуже чітко), обмеженість зменшується в міру наближення до 1,0. (Зверніть увагу, що розрідженість не може приймати значення 0 або 1,0, лише значення між ними.)
Таким чином, ваше тлумачення є правильним, що sparse = 0.99
вилучатиме лише більш низькі терміни, ніж 0,99. Точне тлумачення sparse = 0.99
полягає в тому, що для терміна ви збережете всі терміни, для яких
, де - кількість документів - у цьому випадку, ймовірно, всі терміни будуть збережені (див. Приклад нижче) .jdfj>N∗(1−0.99)N
Якщо інша крайність, якщо 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
, збережені лише терміни, що зустрічаються у двох третинах документів.
Альтернативним підходом до обрізання термінів з матриць документа на термін, заснованих на частоті документа, є пакет даних для аналізу тексту quanteda . Ця ж функціональність стосується не обмеженості, а безпосередньо прямо частоти термінів документа (як у 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
Це використання мені здається набагато простішим.