zoukankan      html  css  js  c++  java
  • R语言 文本挖掘 tm包 使用

    
    #清除内存空间
    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)  
  • 相关阅读:
    linux 压缩当前文件夹下所有文件
    redis从入门到精通
    焦点小组测试和可用性测试
    面包屑的故事
    VSCode导入两个工程示例
    数据库规格化
    mergeCI一点小波澜
    Java中List与Set相互转化
    MyBatis中in的使用
    长寿时代的养老风险管理
  • 原文地址:https://www.cnblogs.com/qianwen/p/3721903.html
Copyright © 2011-2022 走看看