1

spam / no-spam に分類されたN 個のドキュメントのコーパスがあります。R でデータを前処理するための標準的な手順に従っています ( code here )。前処理は、重みをtfidfとして使用して終了します。DocumenTermMatrix

ここで、モデルを使用して新しいドキュメントを分類したいと考えています。

単一の新しいドキュメントに対応する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 で直接予測するときに vector を 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 に答える