1

我有一个包含N个文档的语料库,分类为spam / no-spam。我正在按照标准程序对 R 中的数据进行预处理(此处为代码)。预处理以DocumenTermMatrix使用权重作为tfidf结束。

现在我想用我的模型对新文档进行分类。

如何计算单个新文档的对应DocumentVector(使用文档的tf和语料库的idfs )?我想避免重新计算DocumentTermMatrix整个语料库。

4

2 回答 2

1

过去我遇到过类似的问题,并且此功能不包含在 tm 包中。Ingo Feinerer 建议构建一个函数来获取 DocumentVector。该函数需要使用语料库和新文档中先前构建的 tm 或 dtm。首先以与语料库相同的方式预处理新文档,并使用单词和 tf. 您可以合并 tm/dtm 中的单词(例如 tdm$dimnames$Terms),将新文档转换为具有与文档的 tf 值相同的语料库术语(简单合并)。然后以标准方式将 tf 除以语料库的 idfs:

cs<-row_sums(tm>0)
 lnrs<-log2(nDocs(tm)/cs)
 tf*lnrs  # 

完成返回您的 DocumentVector。然后,您可以在直接使用 SVM 进行预测时将向量用作 data.frame。

于 2013-04-17T19:55:55.083 回答
0

我不知道您使用什么 svm 库,但您的 SVM 模型似乎存储在Corpus.svm - 对吗?

对于新文档的预测,您可以按照以下所述的过程进行操作:http: //planatscher.net/svmtut/svmtut.html任务 2。如果您使用其他库,过程将类似。IRIS 数据集也有实际示例。唯一的区别是您的新文档必须以与训练示例相同的方式处理(即删除停用词、tf-idf、...)

于 2013-04-12T08:51:16.503 回答