R系列:分词、去停用词、画词云(词云形状可自定义)
附注:不要问我为什么写这么快,是16年写的。
R的优点:免费、界面友好(个人认为没有matlab友好,matlab在我心中就是统计软件中极简主义的代表)、小(压缩包就几十M,MATLAB.R2009b的压缩包是1.46G)、包多(是真的多,各路好友会经常上传新的包)。
R的麻烦之处:经常升级,是经常,非常经常,这就导致你在加载一个包之前需要考虑这个包要在R的哪个版本上才能使用,而往往做一件事情都要加载10个包左右,一般比较方便的做法就是先升级到最新版,因为只有小部分的包在新版本上不能用。
言归正传,下面用R语言画出红楼梦的词云图。主要是为了演示词云图的画法,不涉及分析。
一直对红楼有不可言说的感情,再见,纯真,你好,任重道远!
一、软件准备
版本:R x64 3.2.5(我的电脑是64位的,可根据自己电脑自行安装相应版本)
下载链接:https://mirrors.tuna.tsinghua.edu.cn/CRAN/
二、数据准备
文本:红楼梦txt,1.69M,链接:
http://vdisk.weibo.com/s/AfY-rVkr37U3?sudaref=www.so.com
词典:
http://pinyin.sogou.com/dict/search/search_list/%BA%EC%C2%A5%C3%CE/normal/1
停用词库:根据需要自定义了部分停用词,详情见附录1。
三、算法介绍
采用R语言里的Rwordseg包分词。Rwordseg是R环境下的中文分词工具,用rJava调用Java分词工具Ansj。Ansj也是一个开源的Java中文分词工具,基于中科院ictclas中文分词算法,采用HMM模型。
自带基础词库,支持新加词典。
新加词典放在E:\R-3.2.5\library\Rwordseg\dict目录下。(E是R安装位置)
Rwordseg包的详细说明可在E:\R-3.2.5\library\Rwordseg\doc\Rwordseg_Vignette_CN.pdf目录下查看。
四、程序及结果
1.总耗时:1min左右
1.1.分词耗时:24.54秒
图1 分词耗时

2.结果
2.1分词结果
图2 分词部分结果

2.2过滤单字后结果
图3显示,结果中有部分没有意义的词,如“什么”,“一个”,这些没有意义的词也称为“停用词”,需要把他们去掉。
图3 过滤单字后部分结果

2.3去停用词后结果
到图4这里,我们便完成了词频的统计,实际应用中还需要合并同义词的词频,如“林黛玉”“黛玉”“颦颦”便属于同义词。
图4 去停用词后部分结果

2.4词云
词云结果如下。
图5 词云图



3.程序
#加载分词需要用到的包
library(tm)
library(Rwordseg)
library(wordcloud2)
library(tmcn)
#自定义词典
installDict(dictpath = 'C:/Users/Thinkpad/Desktop/红楼梦/红楼梦诗词.scel',
            dictname ='hlmsc', dicttype = 'scel')
installDict(dictpath = 'C:/Users/Thinkpad/Desktop/红楼梦/红楼梦群成员名字词库.scel',
            dictname ='hlmname', dicttype = 'scel')
installDict(dictpath = 'C:/Users/Thinkpad/Desktop/红楼梦/红楼梦词汇.scel',
            dictname ='hlmch', dicttype = 'scel')
installDict(dictpath = 'C:/Users/Thinkpad/Desktop/红楼梦/红楼词语.scel',
            dictname ='hlmcy', dicttype = 'scel')
installDict(dictpath = 'C:/Users/Thinkpad/Desktop/红楼梦/《红楼梦》词汇大全【官方推荐】.scel',
            dictname = 'hlmch', dicttype = 'scel')
#查看已添加词典
listDict()
#添加新词可以使用函数insertWords(),这里不添加新词
#分词,对segmentCN()第一个参数对应的文本分词,并将结果返回给第二个参数对应的位置,这种方式可以节约很多时间
system.time(segmentCN('C:/Users/Thinkpad/Desktop/红楼梦/红楼梦.txt',outfile='C:/Users/Thinkpad/Desktop/红楼梦/word_result.txt',blocklines=10000))
#统计词频,加载data.table()包,提高读取速度;把上步txt格式的分词结果变为csv格式再读取
library(data.table)
fc_result=fread("C:/Users/Thinkpad/Desktop/红楼梦/word_result.csv")
word_freq=getWordFreq(string = unlist(fc_result))
#按照词频排序,排名前100的词
word_freq[1:100,]
#dim(word_freq)[1]
#过滤前10000个热词中的单字
x=rep(0,times=10000)
for(i in 1:10000){
if(nchar(word_freq[i,])[1]>1)
x[i]=i
}
length(x)
y=sort(x)[2930:10000]
y=word_freq[y,]
#y[1:200,]
write.table(y,file="C:/Users/Thinkpad/Desktop/红楼梦/word_result2.txt")
#去停用词
ssc=read.table("C:/Users/Thinkpad/Desktop/红楼梦/word_result2.txt",header=TRUE)
class(ssc)
ssc[1:10,]
ssc=as.matrix(ssc)
stopwords=read.table("C:/Users/Thinkpad/Desktop/红楼梦/停用词.txt")
class(stopwords)
stopwords=as.vector(stopwords[,1])
wordResult=removeWords(ssc,stopwords)
#去空格
kkk=which(wordResult[,2]=="")
wordResult=wordResult[-kkk,][,2:3]
#去停用词结果
wordResult[1:100,]
write.table(wordResult,file="C:/Users/Thinkpad/Desktop/红楼梦/wordResult.txt")
#画出词云
wordResult=read.table("C:/Users/Thinkpad/Desktop/红楼梦/wordResult.txt")
#词云以"红楼梦"的形式展示
wordcloud2(wordResult,figPath='C:/Users/Thinkpad/Desktop/2.jpg')
#词云以"石头记"的形式展示
wordcloud2(wordResult,figPath='C:/Users/Thinkpad/Desktop/3.jpg')
#词云以汉字“红楼梦”的形式展示
letterCloud(wordResult,"红楼梦")
五、附录
附录1:停用词库
停用词库截图

停用词库详情
什么
一个
我们
那里
你们
如今
起来
出来
知道
说道
这里
他们
自己
一面
怎么
两个
没有
不知
只见
这个
这样
听见
进来
咱们
告诉
就是
东西
回来
出去
这些
所以
过来
心里
如此
不能
一时
只得
今日
几个
这么
一回
只管
今儿
那些
问道
如何
那边
原来
回去
看见
进去
一声
一句
这话
到底
别人
于是
果然
还有
有些
此时
岂不
的话
别的
想起
许多
多少
不用
不如
十分
后来
时候
附录2:画词云使用的图


end!
R系列:分词、去停用词、画词云(词云形状可自定义)的更多相关文章
- python利用jieba进行中文分词去停用词
		中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词. 分词模块jieba,它是python比较好用的分词模块.待分词的字符串可以是 unicod ... 
- 更新几篇之前写在公众号上的文章:线性可分时SVM理论推导;关联分析做捆绑销售和推荐;分词、去停用词和画词云
		适合阅读人群:有一定的数学基础. 这几篇文章是16年写的,之前发布在个人公众号上,公众号现已弃用.回过头来再看这几篇文章,发现写的过于稚嫩,思考也不全面,这说明我又进步了,但还是作为学习笔记记在这里了 ... 
- python使用jieba实现中文文档分词和去停用词
		分词工具的选择: 现在对于中文分词,分词工具有很多种,比如说:jieba分词.thulac.SnowNLP等.在这篇文档中,笔者使用的jieba分词,并且基于python3环境,选择jieba分词的理 ... 
- IKAnalyzer进行中文分词和去停用词
		最近学习主题模型pLSA.LDA,就想拿来试试中文.首先就是找文本进行切词.去停用词等预处理,这里我找了开源工具IKAnalyzer2012,下载地址:(:(注意:这里尽量下载最新版本,我这里用的IK ... 
- [超详细] Python3爬取豆瓣影评、去停用词、词云图、评论关键词绘图处理
		爬取豆瓣电影<大侦探皮卡丘>的影评,并做词云图和关键词绘图第一步:找到评论的网页url.https://movie.douban.com/subject/26835471/comments ... 
- python jieba分词(结巴分词)、提取词,加载词,修改词频,定义词库 -转载
		转载请注明出处 “结巴”中文分词:做最好的 Python 中文分词组件,分词模块jieba,它是python比较好用的分词模块, 支持中文简体,繁体分词,还支持自定义词库. jieba的分词,提取关 ... 
- 萌新学习Python爬取B站弹幕+R语言分词demo说明
		代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ... 
- 本地编译全志R系列的步骤7(Ubuntu 17.04非长期支持版本)
		本地编译全志R系列的步骤7(Ubuntu 17.04非长期支持版本) 2017/6/29 13:49 0.获取全志R系列的Android源码包: 请通过渠道/代理商/方案公司获取全志R系列的Andro ... 
- 本地编译全志R系列的步骤(Ubuntu16.04.4版本)
		本地编译全志R系列的步骤(Ubuntu16.04.4版本) 2018/6/14 9:32 版本:V1.0 0.获取全志R系列的Android源码包: 请通过渠道/代理商/方案公司获取全志R系列的And ... 
随机推荐
- leetcode day8
			[83] Remove Duplicates from Sorted List Given a sorted linked list, delete all duplicates such that ... 
- thinkPHP的学习
			1.版本,以3.1为主,因为手册是基于这个的,最新的版本,还没有对应的手册 2.发现一个问题,echo 中文时,出现乱码,而调用模版则正常. 3.写url的注意大小写.index和Index是不同的 ... 
- Android控件上添加图片
			项目中有一个点赞功能,点赞的小图标添加在点赞列表旁边,在xml里可以进行设置,也可以在代码中进行绘图. 下面是两种方法的设置: 1.xml里:一些控件:button.textView等等里面有个属性是 ... 
- 医院his系统数据库恢复
			医院IT系统的重要性堪比金融行业,“银行系统宕机,老百姓不能取钱:医院HIS系统宕机,老百姓不能看病”, 医院信息系统称得上是迄今为止企业级信息系统中最复杂的一类. 某医院HIS系统SQL2008数 ... 
- UVa 10057 - A mid-summer night's dream
			题目大意:给n个数,找一个数A使得A与这n个数的差的绝对值最小.输出A最小的可能值,n个数中满足A的性质的数的个数以及满足A性质的不同的数的个数(不必从这n个数中挑选). 看见绝对值就想到了数轴上点之 ... 
- OBJECT和EMBED标签
			一.介绍: 我们要在网页中正常显示flash内容,那么页面中必须要有指定flash路径的标 签.也就是OBJECT和EMBED标签.OBJECT标签是用于windows平台的IE浏览器的,而EMBED ... 
- VMware虚拟机出现Reason: Failed to lock the file
			打开VMware出现Cannot open the disk *.vmdk or one of the snapshot disks it depends on.Reason: Failed to l ... 
- Camera.ScreenPointToRay 解析
			Unity官方文档: Camera.ScreenPointToRay public function ScreenPointToRay(position: Vector3): Ray; Descrip ... 
- Windows Server 2008 R2防火墙入站规则
			一般服务器的端口都设置了外网无法访问,iis中创建的网站外网也是访问不了的,需要创建指定端口的入站规则后方可访问. 方法/步骤 服务器管理器-->配置-->高级安全windows防 ... 
- 理解 Objective-C Runtime
			初学 Objective-C(以下简称ObjC) 的人很容易忽略一个 ObjC 特性 —— ObjC Runtime.这是因为这门语言很容易上手,几个小时就能学会怎么使用,所以程序员们往往会把时间都花 ... 
