【问题标题】:Filter rows/documents from Document-Term-Matrix in R从 R 中的 Document-Term-Matrix 过滤行/文档
【发布时间】:2014-08-05 03:12:08
【问题描述】:

使用 R 中的 tm-package 创建一个 Document-Term-Matrix:

dtm <- DocumentTermMatrix(cor, control = list(dictionary=c("someTerm")))

结果如下:

A document-term matrix (291 documents, 1 terms)

Non-/sparse entries: 48/243
Sparsity           : 84%
Maximal term length: 8 
Weighting          : term frequency (tf) 

                   Terms
Docs                someTerm
doc1                       0
doc2                       0
doc3                       7
doc4                       22
doc5                       0

现在我想根据文档中 someTerm 出现的次数来过滤这个 Document-Term-Matrix。例如。仅过滤出 someTerm 至少出现一次的文档。 IE。 doc3 和 doc4 在这里。

我怎样才能做到这一点?

【问题讨论】:

    标签: r matrix text-mining tm


    【解决方案1】:

    这与您将常规 R 矩阵子集化的方式非常相似。例如,要从示例 Reuters 数据集创建一个文档术语矩阵,其中仅包含术语“would”出现多次的行:

    reut21578 <- system.file("texts", "crude", package = "tm")
    
    reuters <- VCorpus(DirSource(reut21578),
        readerControl = list(reader = readReut21578XMLasPlain))
    
    dtm <- DocumentTermMatrix(reuters)
    v <- as.vector(dtm[,"would"]>1)
    dtm2 <- dtm[v, ]
    
    > inspect(dtm2[, "would"])
    A document-term matrix (3 documents, 1 terms)
    
    Non-/sparse entries: 3/0
    Sparsity           : 0%
    Maximal term length: 5 
    Weighting          : term frequency (tf)
    
         Terms
    Docs  would
      246     2
      489     2
      502     2
    

    tm 文档术语矩阵是来自包slam 的简单三元组矩阵,因此slam 文档有助于弄清楚如何操作 dtms。

    【讨论】:

    • 这完美地解决了它 - 非常感谢!对 slam 包也有很好的提示。
    【解决方案2】:

    或者,您可以使用 removeSparseTerms 函数来删除空元素(查看文档here)。

    dtm <- removeSparseTerms(dtm, 0.1) # This makes a matrix that is 10% empty space, maximum
    

    【讨论】:

      猜你喜欢
      • 2014-08-16
      • 2012-10-29
      • 1970-01-01
      • 2014-07-24
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      相关资源
      最近更新 更多