这就是我的tdm矩阵的方式:
doc.vec <- VectorSource(data$text)
doc.corpus <- Corpus(doc.vec)
tdm <- TermDocumentMatrix(doc.corpus, control = list(wordLengths = c(2, Inf)))
我原始的tdm矩阵如下所示:
doc1 doc2 doc3 ... doc10000
term1 . 1 1 ... 1
term2 . . 1 ... .
...
term99 1 . 1 ... 1
我想要的是:
doc1 doc2 doc3 ... doc10000 class
term1 . 1 1 ... 1 1
term2 . . 1 ... . 0
...
term99 1 . 1 ... 1 0
其中class是一个0/1虚拟对象,指示该术语是包含在0类还是1类中。
我在原始数据中定义了这个类哑元,称为data $ class。
我想知道是否有办法将此变量``转移''到我的tdm中。
非常感谢。
编辑:对不起,因为之前不清楚,我原来的类虚拟对象是文档,而不是术语。我想做的是将类重新分配给术语,以便1表示术语仅出现在1类中,而0表示它仅出现在0类中。
最佳答案
您可以使用tdm或文档术语矩阵(dtm)来代替,但不清楚要从中获得什么,但是当每个文档都有一个类时,第二个方法会有所帮助,例如:
term1 term2 term3 ... term10000 class
doc1 . 1 1 ... 1 1
doc2 . . 1 ... . 0
...
doc99 1 . 1 ... 1 0
现在,您可以使用它来训练模型(分类器)以预测新文档的类。完成此操作最简单的方法是将dtm转换为数据框,而不是附加类列,仅此而已:
dtmDataFrame <- as.data.frame(inspect(dtm))
您在此处提到的另一件事“将类别重新分配给术语,这样1表示一个术语仅在第1类中出现,而0表示该术语仅在第0类中出现”对我来说意义不大,您将如何处理不在您的班级1和0中的术语?过滤掉它们?你打算做什么