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

来源:互联网 发布:java 当前时间减1小时 编辑:程序博客网 时间:2024/05/22 09:04

在提取文本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矩阵。


0 0
原创粉丝点击