从R中的Document-Term-Matrix过滤行/文档

时间:2014-06-14 21:07:02

标签: r matrix text-mining tm

在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至少出现一次的文档。即doc3和doc4在这里。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:6)

它与您如何将常规R矩阵子集化非常相似。例如,要从示例路透社数据集创建一个文档术语矩阵,其中只有行中的术语&#34;&#34;出现不止一次:

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。

答案 1 :(得分:1)

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

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