Vâng , mặc dù sự nhầm lẫn của bạn ở đây là dễ hiểu, vì thuật ngữ "độ thưa" rất khó để xác định rõ ràng trong bối cảnh này.
Theo nghĩa của sparse
đối số removeSparseTerms()
, độ thưa thớt đề cập đến ngưỡng tần suất tài liệu tương đối cho một thuật ngữ, trên đó thuật ngữ này sẽ bị xóa. Tần số tài liệu tương đối ở đây có nghĩa là một tỷ lệ. Là trang trợ giúp cho các trạng thái lệnh (mặc dù không rõ ràng lắm), độ thưa thớt nhỏ hơn khi nó tiến đến 1.0. (Lưu ý rằng độ thưa thớt không thể lấy các giá trị 0 hoặc 1.0, chỉ các giá trị ở giữa.)
Vì vậy, việc giải thích của bạn là chính xác trong đó sparse = 0.99
sẽ chỉ xóa các cụm từ mà nhiều thưa thớt hơn 0,99. Giải thích chính xác sparse = 0.99
cho thuật ngữ , bạn sẽ giữ lại tất cả các thuật ngữ mà
, trong đó là số lượng tài liệu - trong trường hợp này có thể tất cả các thuật ngữ sẽ được giữ lại (xem ví dụ bên dưới) .jdfj>N∗(1−0.99)N
Gần cực đoan khác, nếu sparse = .01
, thì chỉ các thuật ngữ xuất hiện trong (gần) mọi tài liệu sẽ được giữ lại. (Tất nhiên điều này phụ thuộc vào số lượng thuật ngữ và số lượng tài liệu và trong ngôn ngữ tự nhiên, các từ phổ biến như "the" có thể xảy ra trong mọi tài liệu và do đó không bao giờ là "thưa thớt".)
Một ví dụ về ngưỡng thưa thớt 0,99, trong đó một thuật ngữ xảy ra nhiều nhất trong (ví dụ đầu tiên) ít hơn 0,01 tài liệu và (ví dụ thứ hai) chỉ hơn 0,01 tài liệu:
> # 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)
Dưới đây là một vài ví dụ bổ sung với văn bản và thuật ngữ thực tế:
> 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
Trong ví dụ cuối cùng sparse = 0.34
, chỉ các điều khoản xảy ra trong hai phần ba tài liệu được giữ lại.
Một cách tiếp cận khác để cắt xén các thuật ngữ từ ma trận thuật ngữ tài liệu dựa trên tần số tài liệu là gói phân tích văn bản quanteda . Chức năng tương tự ở đây không phải là sự thưa thớt mà là trực tiếp đến tần suất tài liệu của các thuật ngữ (như trong 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
Cách sử dụng này có vẻ đơn giản hơn nhiều đối với tôi.