代码之家  ›  专栏  ›  技术社区  ›  AdeeThyag

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

  •  0
  • AdeeThyag  · 技术社区  · 6 年前

    我的文档术语矩阵中有空文档。我需要移除它们。这是我用来构建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
    

    你知道怎么做吗?感谢您提前提出建议。

    1 回复  |  直到 6 年前
        1
  •  0
  •   phiver    6 年前

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

    以及 apply 不需要函数。有用于稀疏矩阵的函数。因为dtm是 simple_triplet_matrix 您可以使用slam中的row\u和。

    以下操作应该有效。

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

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