将虚拟变量添加到tdm矩阵

时间:2016-07-13 04:49:18

标签: r machine-learning tm

这就是我得到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级中 我在我的原始数据中定义了这个类dummy,由data $ class调用。 我想知道是否有办法将这个变量“转移”到我的tdm中。

非常感谢你。

编辑:很抱歉之前不清楚 - 我原来的班级假人是为了文件而不是用于条款。而我要做的是将类重新分配给术语,因此1表示术语仅出现在第1类中,0表示它仅出现在第0类中。

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))

你在这里提到的另一件事&#34;将类重新分配给术语,因此1表示术语仅出现在等级1中,0表示它仅出现在等级0和#34;对我来说没有多大意义,对于不属于你的1级和0级的术语你会怎么做?过滤掉它们?你的意图是什么?