每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~

———————————————————————————

R语言︱文本挖掘套餐包之——XML+tm+SnowballC包

笔者寄语:文本挖掘、情感分析是目前非结构数据非常好用、有效的分析方式。

先针对文本挖掘这个套餐包做个简单了解。一般来说一个完整的文本挖掘解决流程是:

网页爬取数据——数据格式转化(分隔)——建立语料库——词频去噪——提取词干——创建文档-词频矩阵——后续分析(聚类、词云等)

XML包可以实现:网页爬取(还有Rcurl包)、格式转化

tm包可以实现:建立语料库、创建文档-词频矩阵、去噪(还有Rwordseg包是中文分词包)

SnowballC包可以实现:提取词干

本篇暂时不介绍XML包的数据爬取,先来看后面两个包的实现。

本文以一个案例介绍SnowballC包+tm包,使用的数据是R语言中自带的数据集,案例部分来源于参考西门吹风博客

一、函数调用、数据导入、生成语料库

library(SnowballC)
library(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))
#Corpus命令读取文本并生成语料库文件

##2.Data Export  将生成的语料库在磁盘上保存成多个纯文本文件
writeCorpus(reuters)

##3.Inspecting Corpora 查看语料库
#can use inspect(),print(),summary()
#由于是从xml读取过来,所以现在的corpus还是非常杂乱
inspect(reuters)
print(reuters)
summary(reuters)

还有查看语料库的几个函数:inspect(),print(),summary()三个。

二、格式转化、去噪

##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"))#去停用词
</pre><pre code_snippet_id="1633870" snippet_file_name="blog_20160404_2_6556358" name="code" class="plain">#采用Porter's stemming 算法 提取词干
#Stem words in a text document using Porter's stemming algorithm
#install.packages("SnowballC")
tm_map(reuters, stemDocument)

三、创建文档-词频矩阵


关于下面的DocumentTermMatrix,前面一定要跟tm_map(reuters,PlainTextDocument),注意与前面的区别,以及执行代码的顺序。

##5.创建文档矩阵 Creating Term-Document Matrices
#将处理后的语料库进行断字处理,生成词频权重矩阵(稀疏矩阵)也叫词汇文档矩阵
reuters <- tm_map(reuters, PlainTextDocument)#将reuters转化为纯文本文件,去除标签
dtm <- DocumentTermMatrix(reuters)
#报错可看http://www.bubuko.com/infodetail-345849.html
#需先执行一下reuters <- tm_map(reuters, PlainTextDocument)
#查看词汇文档矩阵内容
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)))

DocumentTermMatrix生成的矩阵是文档-词频的稀疏矩阵,横向是文档文件,纵向是分出来的词,矩阵里面代表词频,如下图。



创建好文档词频矩阵之后,可以通过一些方式查看这个矩阵的内容,或者用函数筛选出你想要的结果等。

##6.在文本矩阵上实践 Operations on Term-Document Matrices
#找出次数超过50的词
findFreqTerms(dtm, 50)
#找出与‘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 ="文件聚类分析")

聚类说明了根据词频统计,哪些文档较为相近,说明这些文档存在同质。

——————————————————————————————————————————————————————————————————————————

应用一:snowball包中的词干与记号化去哪儿?

词干化:去掉ing,s之类的词,目前适用于英文,中文不适用

SnowballStemmer(c('functions', 'stemming', 'liked', 'doing'))
[1] "function" "stem" "like" "do"

记号化:将一段文本分割成叫做token(象征)过程,token可能是单词、短语、符号或其他有意义的元素。

NGramTokenizer(' 中华人民共和国成立于1949年')
[1] "中华人民共和国成立于" "成立于1949年" "中华人民共和国成立"
[4] "成立于" "于1949年" "中华人民共和国"
[7] "成立" "于" "1949年"

snowball现在这个包已经无法加载了,tm包调用SnowballC可以词干化,函数名字叫:stemDocument;

记号化在tm包中叫做getTokenizers函数。

每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~

———————————————————————————

R语言︱文本挖掘套餐包之——XML+SnowballC+tm包的更多相关文章

  1. R语言·文本挖掘︱Rwordseg/rJava两包的安装(安到吐血)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言·文本挖掘︱Rwordseg/rJava ...

  2. R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:与前面的RsowballC分词不同的 ...

  3. R语言 文本挖掘 tm包 使用

    #清除内存空间 rm(list=ls()) #导入tm包 library(tm) library(SnowballC) #查看tm包的文档 #vignette("tm") ##1. ...

  4. R语言︱文本挖掘——jiabaR包与分词向量化的simhash算法(与word2vec简单比较)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- <数据挖掘之道>摘录话语:虽然我比 ...

  5. R语言-文本挖掘

    ---恢复内容开始--- 案例1:对主席的新年致辞进行分词,绘制出词云 掌握jieba分词的用法 1.加载包 library(devtools) library(tm) library(jiebaR) ...

  6. R语言 一套内容 从入门 到放弃

    [怪毛匠子整理] 1.下载 wget http://mirror.bjtu.edu.cn/cran/src/base/R-3/R-3.0.1.tar.gz 2.解压: tar -zxvf R-3.0. ...

  7. R语言文本挖掘+词云显示(jiebaR包+wordcloud2包)

    利用2018年政府工作报告的例子向大家展示一下R语言如何进行文本挖掘的~用到的包有jiebaR和wordcloud2. 1.安装并加载jiebaR install.packages("jie ...

  8. R语言︱文本挖掘——词云wordcloud2包

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者看到微信公众号探数寻理中提到郎大为Chif ...

  9. R语言︱缺失值处理之多重插补——mice包

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:缺失值是数据清洗过程中非常重要的问题 ...

随机推荐

  1. C#使用Redis

    一,引入dll 1.ServiceStack.Common.dll 2.ServiceStack.Interfaces.dll 3.ServiceStack.Redis.dll 4.ServiceSt ...

  2. MongoDB之副本集

    MongoDB之副本集 一.简介 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库 ...

  3. 记录下直接在git里读取出差异并打包的代码

    一行命令: git diff --name-only HEAD commit_id | xargs tar -zcvf diff_head.tar.gz 这里的HEAD可以理解为最新的版本 HEAD本 ...

  4. 12、SEO工程师指南 - 软件项目角色指南系列文章

    第11章       SEO工程师   SEO工程师是一个比较新兴的职位,在实际的项目管理过程中,SEO工程师的地位相对靠后,只有在项目试运行以及运营期间才能体现出SEO工程师的作用.在项目完成之后, ...

  5. LongAdder基础

    LongAdder是JDK8中并发包中的一个新类,和AtomicLong都使用CAS,但是性能比AtomicLong更好. LongAdder在AtomicLong的基础上进行了热点分离,热点分离类似 ...

  6. CF 570D. Tree Requests [dsu on tree]

    传送门 题意: 一棵树,询问某棵子树指定深度的点能否构成回文 当然不用dsu on tree也可以做 dsu on tree的话,维护当前每一个深度每种字母出现次数和字母数,我直接用了二进制.... ...

  7. BZOJ 1488: [HNOI2009]图的同构 [Polya]

    完全图中选出不同构的简单图有多少个 上题简化版,只有两种颜色....直接copy就行了 太诡异了,刚才电脑上多了一个不动的鼠标指针,然后打开显卡管理界面就没了 #include<iostream ...

  8. Linux系统下LNMP一键搭建Linux、PHP、MySQL环境(适合新手搭建linux下的web生成环境)

    一. 首先要解释一下,什么是LNMP,LNMP起源于LAMP,LAMP是Linux+Apache+Mysql/MariaDB+Perl/PHP/Python的缩写,这里将Web服务端的Apache替换 ...

  9. Asp.Net Core 2.0 之旅---在Ubuntu上部署WEB应用程序

    1.Ubuntu 上 安装NET Core 2.0 SDK 第一步的安装,微软大佬已经写的非常详细了=>直达链接,按照教程来即可. 2.将我们的WEB 发布到一个文件夹,将这个文件夹打包成 压缩 ...

  10. 多路复用select

    多路复用I/O:一个执行体监视多个文件描述符对象的状态是否改变,一旦改变通知其他执行体来实现. 基本思想: 1. 先构造一张有关描述符的表,然后调用一个函数,当这些文件描述符中的一个或者多个已准备好进 ...