生成包含R中给定术语的DocumentTermMatix

生成包含R中给定术语的DocumentTermMatix,r,data-mining,text-mining,tm,R,Data Mining,Text Mining,Tm,我正在使用语料库上的tm生成DocumentTermMatrix,只使用频繁出现的术语。(即MinDocFrequency=50) 现在我想用不同的语料库生成一个DTM,但计算的术语与前一个完全相同,没有额外的,也没有更少的。(交叉验证) 如果我使用与第一个语料库相同的方法生成DTM,我最终会包含更多或更少的术语,或者只是不同的术语,因为它们与原始语料库的频率不同 我该怎么做呢?我需要指定要计算的术语,但我不知道如何计算 感谢所有能为我指明正确方向的人 -N 编辑:我被要求提供一个可复制的示例,

我正在使用语料库上的
tm
生成DocumentTermMatrix,只使用频繁出现的术语。(即MinDocFrequency=50)

现在我想用不同的语料库生成一个DTM,但计算的术语与前一个完全相同,没有额外的,也没有更少的。(交叉验证)

如果我使用与第一个语料库相同的方法生成DTM,我最终会包含更多或更少的术语,或者只是不同的术语,因为它们与原始语料库的频率不同

我该怎么做呢?我需要指定要计算的术语,但我不知道如何计算

感谢所有能为我指明正确方向的人

-N

编辑:我被要求提供一个可复制的示例,所以我在这里粘贴了一些示例代码 重新编辑:

require(tm)

text这里有一种方法。。。它适用于您的数据吗有关OP数据的详细信息,请参阅下文

# load text mining library    
library(tm)

# make first 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, MinDocFrequency=5)
crude1 <- tm_map(corpus1, FUN = tm_reduce, tmFuns = funcs)
crude1.dtm <- TermDocumentMatrix(crude1, control = list(wordLengths = c(3,10))) 

# prepare 2nd corpus
corpus2 <- Corpus(VectorSource(crude[11:20]))

# process text as above
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 <- TermDocumentMatrix(crude1, control = list(wordLengths = c(3,10))) 

crude2.dtm.mat <- as.matrix(crude2.dtm)

# subset second corpus by words in first corpus
crude2.dtm.mat[rownames(crude2.dtm.mat) %in% crude1.dtm.freq, ]
    Docs
 Terms    reut-00001.xml reut-00002.xml reut-00004.xml reut-00005.xml reut-00006.xml
 oil                 5             12              2              1              1
 opec                0             15              0              0              0
 prices              3              5              0              0              0
    Docs
Terms    reut-00007.xml reut-00008.xml reut-00009.xml reut-00010.xml reut-00011.xml
oil                 7              4              3              5              9
opec                8              1              2              2              6
prices              5              1              2              1              9
如何在第二个语料库中找到高频词的总数:

colSums(common)
text 
   1

这里有一个方法。。。它适用于您的数据吗有关OP数据的详细信息,请参阅下文

# load text mining library    
library(tm)

# make first 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, MinDocFrequency=5)
crude1 <- tm_map(corpus1, FUN = tm_reduce, tmFuns = funcs)
crude1.dtm <- TermDocumentMatrix(crude1, control = list(wordLengths = c(3,10))) 

# prepare 2nd corpus
corpus2 <- Corpus(VectorSource(crude[11:20]))

# process text as above
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 <- TermDocumentMatrix(crude1, control = list(wordLengths = c(3,10))) 

crude2.dtm.mat <- as.matrix(crude2.dtm)

# subset second corpus by words in first corpus
crude2.dtm.mat[rownames(crude2.dtm.mat) %in% crude1.dtm.freq, ]
    Docs
 Terms    reut-00001.xml reut-00002.xml reut-00004.xml reut-00005.xml reut-00006.xml
 oil                 5             12              2              1              1
 opec                0             15              0              0              0
 prices              3              5              0              0              0
    Docs
Terms    reut-00007.xml reut-00008.xml reut-00009.xml reut-00010.xml reut-00011.xml
oil                 7              4              3              5              9
opec                8              1              2              2              6
prices              5              1              2              1              9
如何在第二个语料库中找到高频词的总数:

colSums(common)
text 
   1

你好!请让你的文章可以复制,让我们来帮助你。谢谢。另外,请向我们展示你到目前为止所做的工作。好的,我已经制作了一个例子(有点),请看我的编辑和粘贴!请让你的文章可以复制,让我们来帮助你。谢谢你。另外,请告诉我们你到目前为止做了什么。好吧,我已经制作了一个例子(有点),看看我的编辑和粘贴在这里,这回答了问题(附言:如果有人愿意从我对dwonvote的评论中获益,我不会dwonvote),第二个语料库和第一个语料库有相同的术语吗?干杯,本,我设法从中得到了一些东西。然而,您的确切代码并没有真正的帮助,因为您的DTM实际上是TDM:PI会接受这一点,因为它让我找到了正确的答案,但值得强调最后一行,因为这是关键。Thanks@N.McA. 最好将此答案升级,并将您的新答案作为好答案发布。感谢您的评论,我已对我的答案进行了编辑,以使其更符合问题。在回答问题的过程中(PS:如果有人愿意从我对dwonvote的评论中获益,我将不进行dwonvote),第二个语料库是否与第一个语料库具有相同的术语?欢呼Ben,我设法从中得到了一些东西。然而,您的确切代码并没有真正的帮助,因为您的DTM实际上是TDM:PI会接受这一点,因为它让我找到了正确的答案,但值得强调最后一行,因为这是关键。Thanks@N.McA. 最好将此答案向上投票,并将您的新答案作为好答案发布。谢谢您的评论,我已编辑了我的答案,使其更符合问题。
# now look into second DTM
ValiTextDTM.mat <- as.matrix(ValiTextDTM)
common <- data.frame(ValiTextDTM.mat[, intersect(colnames(ValiTextDTM.mat), TextDTM.hifreq) ])
names(common) <- intersect(colnames(ValiTextDTM.mat), TextDTM.hifreq)
     text
1    0
2    0
3    1
4    0
colSums(common)
text 
   1