附注:不要问我为什么写这么快,是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系列:分词、去停用词、画词云(词云形状可自定义)的更多相关文章

  1. python利用jieba进行中文分词去停用词

    中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词. 分词模块jieba,它是python比较好用的分词模块.待分词的字符串可以是 unicod ...

  2. 更新几篇之前写在公众号上的文章:线性可分时SVM理论推导;关联分析做捆绑销售和推荐;分词、去停用词和画词云

    适合阅读人群:有一定的数学基础. 这几篇文章是16年写的,之前发布在个人公众号上,公众号现已弃用.回过头来再看这几篇文章,发现写的过于稚嫩,思考也不全面,这说明我又进步了,但还是作为学习笔记记在这里了 ...

  3. python使用jieba实现中文文档分词和去停用词

    分词工具的选择: 现在对于中文分词,分词工具有很多种,比如说:jieba分词.thulac.SnowNLP等.在这篇文档中,笔者使用的jieba分词,并且基于python3环境,选择jieba分词的理 ...

  4. IKAnalyzer进行中文分词和去停用词

    最近学习主题模型pLSA.LDA,就想拿来试试中文.首先就是找文本进行切词.去停用词等预处理,这里我找了开源工具IKAnalyzer2012,下载地址:(:(注意:这里尽量下载最新版本,我这里用的IK ...

  5. [超详细] Python3爬取豆瓣影评、去停用词、词云图、评论关键词绘图处理

    爬取豆瓣电影<大侦探皮卡丘>的影评,并做词云图和关键词绘图第一步:找到评论的网页url.https://movie.douban.com/subject/26835471/comments ...

  6. python jieba分词(结巴分词)、提取词,加载词,修改词频,定义词库 -转载

    转载请注明出处  “结巴”中文分词:做最好的 Python 中文分词组件,分词模块jieba,它是python比较好用的分词模块, 支持中文简体,繁体分词,还支持自定义词库. jieba的分词,提取关 ...

  7. 萌新学习Python爬取B站弹幕+R语言分词demo说明

    代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...

  8. 本地编译全志R系列的步骤7(Ubuntu 17.04非长期支持版本)

    本地编译全志R系列的步骤7(Ubuntu 17.04非长期支持版本) 2017/6/29 13:49 0.获取全志R系列的Android源码包: 请通过渠道/代理商/方案公司获取全志R系列的Andro ...

  9. 本地编译全志R系列的步骤(Ubuntu16.04.4版本)

    本地编译全志R系列的步骤(Ubuntu16.04.4版本) 2018/6/14 9:32 版本:V1.0 0.获取全志R系列的Android源码包: 请通过渠道/代理商/方案公司获取全志R系列的And ...

随机推荐

  1. 学习生命周期activity

    2014年4月2日 08:31:27 开始学习activity周期, 简单了解了几个方法,写了几个打印语句,知道了先后顺序

  2. CentOS 7修复MBR和GRUB

    (转载) 一.修复MBR: MBR(Master Boot Record主引导记录): 硬盘的0柱面.0磁头.1扇区称为主引导扇区.其中446Byte是bootloader,64Byte为Partit ...

  3. python中使用urllib2伪造HTTP报头的2个方法

    在采集网页信息的时候,经常需要伪造报头来实现采集脚本的有效执行 下面,我们将使用urllib2的header部分伪造报头来实现采集信息 方法1. ? 1 2 3 4 5 6 7 8 9 10 11 1 ...

  4. iOS 使用 github

    1. 创建 github 账号 登陆官网 https://github.com 进行创建. 2. 创建 github 仓库 3. 添加Pods依赖库所需文件 4. github 之 下载历史版本 5. ...

  5. YII 1.0 上传文件

    $upload = CUploadedFile::getInstance($articleModel,'thumb'); if($upload){ $name = date("Ymd&quo ...

  6. Cassandra 单机入门例子——有索引

    入门例子: http://wiki.apache.org/cassandra/GettingStarted 添加环境变量并source生效,使得可以在任意位置执行cassandra/bin安装目录下的 ...

  7. js控制href内容的连接内容的变化

    html: <a data-toggle="modal" href="#myModal_devices" id="check_devices&q ...

  8. MySQL XtraBackup备份脚本

     #backup.sh #!/bin/sh #on xtrabackup 2.1.8 # 第一次执行它的时候它会检查是否有完全备份,否则先创建一个全库备份 # 当你再次运行它的时候,它会根据脚本中的设 ...

  9. cssText 和 this

    一.cssText 元素.style.width = '200px';   ==>   元素.style.cssText = 'width:200px;height:200px;' 二.this ...

  10. C# 程序集 和 反射

    .Net反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为.Net的反射机 ...