如何从 R 中的文档术语矩阵中删除空文档

How to remove the empty documents from the Document Term Matrix in R

我的文档术语矩阵中有空文档。我需要删除它们。这是我用来构建 DocumentTermMatrix 的代码:

 tweets_dtm_tfidf <- DocumentTermMatrix(tweet_corpus, control = list(weighting = weightTfIdf))

这是我收到的警告消息:

Warning message:
In weighting(x) :
  empty document(s): 823 3795 4265 7252 7295 7425 8240 8433 9303 12160 12278 14465 15166 15485 15933 20775 21666 21807 26131 27039 34035 34050 34101

我尝试使用以下代码删除这些空文档:

rowTotals <- apply(tweets_dtm_tfidf , 1, sum)
dtm_tfidf   <- tweets_dtm_tfidf[rowTotals> 0, ]

这是我在尝试删除它们时遇到的错误:

> rowTotals <- apply(tweets_dtm_tfidf , 1, sum)

Error: cannot allocate vector of size 6.8 Gb

知道如何解决这个问题吗?感谢您提前提出任何建议。

apply 中的求和将您的稀疏矩阵转换为密集矩阵,如果它是一个大的稀疏矩阵,这会占用大量内存。

并且不需要apply函数。有稀疏矩阵的函数。由于 dtm 是 simple_triplet_matrix,您可以使用 slam 中的 row_sums。

以下应该有效。

rowTotals <- slam::row_sums(tweets_dtm_tfidf)
dtm_tfidf <- dtm_tfidf[rowTotals > 0, ]

但是请记住,如果您有很多单词,您为从稀疏矩阵中获取数据所做的任何操作都可能会导致占用大量内存的对象。在继续之前,您可能想使用 removeSparseTerms