私の理解が正しければ、あなたは dtm を作成しており、最初の dtm と同じ列 (つまり用語) を持つ新しいドキュメントから新しい dtm を作成したいと考えています。その場合は、2 番目の dtm を最初の用語でサブセット化する必要があります。おそらく次のようになります。
最初に再現可能なデータを設定します...
これはあなたの訓練データです...
library(tm)
# make corpus for text mining (data comes from package, for reproducibility)
data("crude")
corpus1 <- Corpus(VectorSource(crude[1:10]))
# process text (your methods may differ)
skipWords <- function(x) removeWords(x, stopwords("english"))
funcs <- list(tolower, removePunctuation, removeNumbers,
stripWhitespace, skipWords)
crude1 <- tm_map(corpus1, FUN = tm_reduce, tmFuns = funcs)
crude1.dtm <- DocumentTermMatrix(crude1, control = list(wordLengths = c(3,10)))
そして、これはあなたのテストデータです...
corpus2 <- Corpus(VectorSource(crude[15:20]))
# process text (your methods may differ)
skipWords <- function(x) removeWords(x, stopwords("english"))
funcs <- list(tolower, removePunctuation, removeNumbers,
stripWhitespace, skipWords)
crude2 <- tm_map(corpus2, FUN = tm_reduce, tmFuns = funcs)
crude2.dtm <- DocumentTermMatrix(crude2, control = list(wordLengths = c(3,10)))
これがあなたが望むことをするビットです:
ここで、トレーニング データに存在するテスト データの項のみを保持します...
# convert to matrices for subsetting
crude1.dtm.mat <- as.matrix(crude1.dtm) # training
crude2.dtm.mat <- as.matrix(crude2.dtm) # testing
# subset testing data by colnames (ie. terms) or training data
xx <- data.frame(crude2.dtm.mat[,intersect(colnames(crude2.dtm.mat),
colnames(crude1.dtm.mat))])
最後に、テスト データにないトレーニング データの用語のすべての空の列をテスト データに追加します...
# make an empty data frame with the colnames of the training data
yy <- read.table(textConnection(""), col.names = colnames(crude1.dtm.mat),
colClasses = "integer")
# add incols of NAs for terms absent in the
# testing data but present # in the training data
# following SchaunW's suggestion in the comments above
library(plyr)
zz <- rbind.fill(xx, yy)
zz
テスト ドキュメントのデータ フレームも同様ですが、トレーニング ドキュメントと同じ構造です (つまり、SchaunW が指摘しているように、多くの列には NA が含まれていますが、同じ列です) 。
それはあなたが望むものに沿っていますか?