这就是我的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中的术语?过滤掉它们?你打算做什么

08-20 02:13