在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
#清除内存空间 rm(list=ls()) #导入tm包 library(tm) library(SnowballC) #查看tm包的文档 #vignette("tm") ##1.Data Import 导入自带的路透社的20篇xml文档 #找到/texts/crude的目录,作为DirSource的输入,读取20篇xml文档 reut21578 <- system.file("texts", "crude", package = "tm") reuters <- Corpus(DirSource(reut21578), readerControl = list(reader = readReut21578XML)) ##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, as.PlainTextDocument)#将reuters转化为纯文本文件,去除标签 reuters <- tm_map(reuters, stripWhitespace)#去掉空白 reuters <- tm_map(reuters, tolower)#转换为小写 reuters <- tm_map(reuters, removeWords, stopwords("english"))#去停用词 #采用Porter's stemming 算法 提取词干 #Stem words in a text document using Porter's stemming algorithm #install.packages("SnowballC") tm_map(reuters, stemDocument) ##5.Creating Term-Document Matrices #将处理后的语料库进行断字处理,生成词频权重矩阵(稀疏矩阵)也叫词汇文档矩阵 dtm <- DocumentTermMatrix(reuters) #查看词汇文档矩阵 inspect(dtm[1:5, 100:105]) #Non-/sparse entries: 1990/22390 ---非0/是0 #Sparsity : 92% ---稀疏性 稀疏元素占全部元素的比例 #Maximal term length: 17 ---切词结果的字符最长那个的长度 #Weighting : term frequency (tf) #如果需要考察多个文档中特有词汇的出现频率,可以手工生成字典, #并将它作为生成矩阵的参数 d<-c("price","crude","oil","use") inspect(DocumentTermMatrix(reuters,control=list(dictionary=d))) ##6.Operations on Term-Document Matrices #找出次数超过5的词 findFreqTerms(dtm, 5) #找出与‘opec’单词相关系数在0.8以上的词 findAssocs(dtm,"opec",0.8) #因为生成的矩阵是一个稀疏矩阵,再进行降维处理,之后转为标准数据框格式 #我们可以去掉某些出现频次太低的词。 dtm1<- removeSparseTerms(dtm, sparse=0.6) inspect(dtm1) data <- as.data.frame(inspect(dtm1)) #再之后就可以利用R语言中任何工具加以研究了,下面用层次聚类试试看 #先进行标准化处理,再生成距离矩阵,再用层次聚类 data.scale <- scale(data) d <- dist(data.scale, method = "euclidean") fit <- hclust(d, method="ward.D") #绘制聚类图 #可以看到在20个文档中,489号和502号聚成一类,与其它文档区别较大。 plot(fit,main ="文件聚类分析") #主成分分析 ozMat <- TermDocumentMatrix(makeChunks(reuters, 50), list(weighting = weightBin)) k <- princomp(as.matrix(ozMat), features = 2) screeplot(k,npcs=6,type='lines') windows() biplot(k)
|
请发表评论