用R语言生成DocumentTermMatrix(DTM)矩阵

在提取文本LDA时,需要先生成文档的DTM矩阵。

对于DTM矩阵,维基百科上给出了详细的解释。

有两个document分别名为D1,D2:

也就是说DTM矩阵是每个Document中每个term(单词,或是词汇表vocab)出现的次数。


R语言的tm包给出了直接求取dtm的接口

library(SnowballC)  
library(NLP)
library(tm)  
#vignette("tm")   #调用函数包文件  
  
  
##1.Data Import  导入自带的路透社的20篇xml文档  
#找到/texts/crude的目录,作为DirSource的输入,读取20篇xml文档 
 
reut21578 <- system.file("texts", "wiki_sentence", package = "tm")  
reuters <- Corpus(DirSource(reut21578), readerControl = list(language = "english"))  
  
##2.Data Export  将生成的语料库在磁盘上保存成多个纯文本文件
  
writeCorpus(reuters)  
  
##3.Inspecting Corpora 查看语料库   
#can use inspect(),print(),summary()  
#由于是从xml读取过来,所以现在的corpus还是非常杂乱  

inspect(reuters)  
print(reuters)   
summary(reuters) 

##4.Transformations   
#对于xml格式的文档用tm_map命令对语料库文件进行预处理,将其转为纯文本并去除多余空格,  
#转换小写,去除常用词汇、合并异形同意词汇,如此才能得到类似txt文件的效果  
#可以用inspect(reuters)查看此时的效果,明显好很多  

reuters <- tm_map(reuters, PlainTextDocument)#将reuters转化为纯文本文件,去除标签  
reuters <- tm_map(reuters, stripWhitespace)#去掉空白  
reuters <- tm_map(reuters, tolower)#转换为小写  
reuters <- tm_map(reuters, removeWords, stopwords("english"))#去停用词

tm_map(reuters, stemDocument) 

##5.创建文档矩阵 Creating Term-Document Matrices  
#将处理后的语料库进行断字处理,生成词频权重矩阵(稀疏矩阵)也叫词汇文档矩阵 

reuters <- tm_map(reuters, PlainTextDocument)#将reuters转化为纯文本文件,去除标签  
dtm <- DocumentTermMatrix(reuters)     

#查看词汇文档矩阵内容  
#inspect(dtm[1:5, 100:105])   

#d<-c("price","crude","oil","use")   #以这几个关键词为查询工具  
#inspect(DocumentTermMatrix(reuters,control=list(dictionary=d))) 
inspect(dtm) 

#dtm1<- removeSparseTerms(dtm, sparse=0.2)
#inspect(dtm1)

dtmm<-as.matrix(dtm)
coln = colnames(dtmm)
write.table(coln, file = "D:/vocab.txt",row.names = FALSE,col.names = FALSE)
#行数和列数
dtmm_r<-nrow(dtmm) 
dtmm_c<-ncol(dtmm) 
write.table(dtmm, file = "D:/dtm.txt",row.names = FALSE,col.names = FALSE)
#write.table(dtmm[2,], file = "C:/Users/Mandy/Desktop/5.txt")

但是,从vocab.txt中可以看出,R语言的分词效果并不好。因此在做LDA时,不建议利用R的接口生成DTM矩阵。


  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值