假设我有一个基于文本的训练数据和测试数据。 更具体地讲,我有两个数据集 - 培训和测试 - 二者均具有包含文本,是为手头的工作兴趣一列。
我用TM包中的R,以处理在训练数据组中的文本列。 除去白色空格,标点符号,以及停止的话,我梗胼并最终创建的包含的每个文档中的单词频率/计数1克文档词矩阵。 然后,我注意到,比方说,50预先确定的截止并保持只有那些具有大于50的计数条款。
在此之后,我训练,比方说,使用DTM和因变量(这是目前在训练数据)GLMNET模型。 一切运行顺利和容易至今。
但是,我怎么继续当我想得分/预测上测试数据或者可能会在未来任何新的数据模型?
具体来说,我试图找出是如何创建新的数据准确DTM?
如果新的数据集没有任何相似字的原始训练数据,那么所有的术语应该具有计数为零(这是罚款)。 但我希望能够复制完全相同的DTM(在结构方面)对任何新的语料库。
任何想法/想法?
如果我理解正确的话,你已经做出了DTM,并希望从具有相同的列(即条件)作为第一个DTM新文件做出新的DTM。 如果是这样的话,那么它应该是一个事分设置在第一,也许是这样的条款第二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
是测试文档的数据帧,但具有相同的结构,训练文档(即同一列,但其中不乏含有NA,如SchaunW注释)。
是沿着你想要的路线?
tm
有这么多的陷阱...查看更有效text2vec和矢量小插曲充分问题的答案。
对于tm
这里可能是一个更简单的方法,以重建为第二语料库DTM矩阵:
crude2.dtm <- DocumentTermMatrix(crude2, control = list
(dictionary=Terms(crude1.dtm), wordLengths = c(3,10)) )