作者:胡言  R语言中文社区专栏作者

知乎ID:

https://www.zhihu.com/people/hu-yan-81-25

前言

我的天空里没有太阳,总是黑夜,但并不暗,因为有东西代替了太阳。虽然没有太阳那么明亮,但对我来说已经足够。凭借着这份光,我便能把黑夜当成白天。你明白吗?我从来就没有太阳,所以不怕失去。”

每每读完一本东野圭吾的书,我都要感慨一次:《白夜行》真是太好看了!

本文利用R和python分别对该书做分词并画词云,为今后更深一层的文本分析打基础。

一、R语言wordcloud

R语言最常用的分词包为jiebaR和Rwordseg,jiebaR分词对名称识别更有优势,Rwordseg效率更高。安装包时需要为电脑安装java,安装过程较繁琐,请各位看官自行百度。

1library(rJava)2library(Rwordseg)3library(wordcloud2)

将《白夜行》小说txt版本读入R,查看wordbase有7851行:

1setwd('C:/Users/Administrator/Documents/GitHub/play_20180925_wordcloud_whitenight')2wordbase<-read.csv("white_night.txt")3dim(wordbase)

OutPut

1## [1] 7851 1

清除小说中的各种标点符号,这里用到类似正则表达式的gsub()函数:

1word_clean<-NULL2word_clean$msg <- gsub(pattern = " ", replacement ="", wordbase[,1]) 3word_clean$msg <- gsub("\t", "", word_clean$msg) 4word_clean$msg <- gsub(",", "???", word_clean$msg)5word_clean$msg <- gsub("~|'", "", word_clean$msg)6word_clean$msg <- gsub("\\\"", "", word_clean$msg)7#head(word_clean)

将清理后的文本进行分词,此处手动加入不希望被拆散的词“亮司”、“雪穗”,jieba包对人名的识别很厉害,在后文python部分我们可以看一下二者的对比:

1insertWords(c('亮司','雪穗'))2seg_word<-segmentCN(as.character(word_clean))3head(seg_word)

OutPut

1## [1] "c" "阿" "日本" "第一" "畅销书" "作家"

segmentCN()函数将文本拆成了单个的词汇。

将分词后的结果做频数统计:

1words=unlist(lapply(X=seg_word, FUN=segmentCN))2word=lapply(X=seg_word, FUN=strsplit, " ") 3v=table(unlist(word))4v<-rev(sort(v))5d<-data.frame(word=names(v),cnt=v)6d=subset(d, nchar(as.character(d$word))>1)7d[1:30,]

OutPut

 1## word cnt.Var1 cnt.Freq 2## 22 雪穗 雪穗 823 3## 23 没有 没有 806 4## 28 什么 什么 716 5## 49 知道 知道 483 6## 60 一个 一个 410 7## 66 一成 一成 369 8## 67 他们 他们 355 9## 72 这么 这么 34110## 73 自己 自己 33511## 74 因为 因为 33212## 77 这个 这个 313

上述结果为部分截取,我们可以看到雪穗是小说中出现次数最多的词,而亮司却不在前10位。

但是出现次数最多的词汇里,“没有”、“什么”、“一个”等词没有任何意义,因为任何作品都会

用到这些最常用的词,所以我们下一步需要去掉停用词stopwords。

 1write.table(v,file="word_result2.txt") 2ssc=read.table("word_result2.txt",header=TRUE) 3class(ssc) 4ssc[1:10,] 5ssc=as.matrix(d) 6stopwords=read.table("wordclean_list.txt") 7class(stopwords) 8stopwords=as.vector(stopwords[,1]) 9wordResult=removeWords(ssc,stopwords)10#去11kkk=which(wordResult[,2]=="")12wordResult=wordResult[-kkk,][,2:3]13wordResult[1:40,]

OutPut

 1## cnt.Var1 cnt.Freq 2## 22 "雪穗" "823"  3## 90 "男子" "285"  4## 118 "调查" "218"  5## 121 "警察" "215"  6## 122 "电话" "214"  7## 123 "东西" "212"  8## 131 "回答" "195"  9## 132 "发现" "195" 10## 137 "工作" "189" 11## 149 "公司" "173" 12## 155 "声音" "167"

去停用词后,出现频数很高的词汇,我们明显可以感到《白夜行》特有的严肃和悲凉的气息。

终于可以画词云了,

星星词云:

1write.table(wordResult,'white_night_cloud.txt')2mydata<-read.table('white_night_cloud.txt')3#mydata<-filter(mydata,mydata$cnt>=10)4wordcloud2(mydata,size=1,fontFamily='宋体')

可怜的亮司,存在感太低了

亮司与雪穗:

1write.table(wordResult,'white_night_cloud.txt')2mydata<-read.table('white_night_cloud.txt')3#mydata<-filter(mydata,mydata$cnt>=10)4wordcloud2(mydata,size=4,fontFamily='楷体',figPath='boyandgirl.jpg')

只想和你手牵着手再阳光下漫步

二、python---wordcloud

python同样可以画词云,用到jieba、wordcloud模块。

画词云的过程中需要用到ttf格式的字体,需要手动下载。

1from os import path2from wordcloud import WordCloud, ImageColorGenerator3import jieba4import pandas as pd5import numpy as np6from scipy.misc import imread7from PIL import Image

1

读取文本

用同样的文本,即《白夜行》小说的txt文件,

1txt=open('white_night.txt',encoding="gbk")2line=txt.readlines()   #读取文字3type(line)             #list无法完成jieba分词4line=','.join(line)    #将list转化为str5type(line)

2

构建停用词表

1stoplist=open('wordclean_list.txt',encoding="gbk")2stopwords = [line.strip() for line in open('wordclean_list.txt', 'r',encoding="gbk").readlines()]3#stopwords={}.fromkeys([line.rstrip() for line in stoplist])    #字典4for add in ['雪穗','桐原','笹垣','友彦','唐泽','秋吉','筱冢','今枝','典子','利子','一成','']:5     stopwords.append(add)6#stopwords=','.join(stopwords)   此处不需要转化为string

3

jieba分词

1word_list=jieba.cut(line,cut_all=False)2#word_cut=','.join(word_list)3word_cut=list(word_list)4type(word_cut

4

画词云

 1cloud_mask = np.array(Image.open('/Users/huxugang/Github/boyandgirl.jpeg')) 2 3back_color = imread('/Users/huxugang/Github/boyandgirl.jpeg') 4image_colors = ImageColorGenerator(back_color) 5 6wd=WordCloud(font_path='/Users/huxugang/Github/wordcloud_whitenight/simhei.ttf',\ 7             background_color='white',max_words=500, 8             max_font_size=30, 9             random_state=15,10             width=1200,  # 图片的宽11             height=400,  #图片的长12             mask=cloud_mask)1314WD=wd.generate(word_cut)1516import matplotlib.pyplot as plt17WD.to_file('whitenight.jpg')18# 显示词云图片19plt.figure(figsize=(10,10))20plt.axis('off')  #去掉坐标轴21plt.imshow(WD.recolor(color_func=image_colors))22#plt.show()

我从来就没有太阳,所以不怕失去。

比较R语言和python,个人感觉R语言的wordcloud更人性化一下,字体设置更方便,更漂亮。

python画的词云可以实现字体颜色向背景图片同化(R语言是否可以我尚不清楚,有机会再研究),字体设置不太方便。两种工具我都将继续学习,做更多更有趣的实践。

愿世间没有伤害,愿天底下的雪穗和亮司都能无忧无虑地成长,快乐幸福地度过一生。

往期精彩:

  • R语言决策树:NBA球员如何拿到大合同

  • R语言轻巧的时间包hms

  • R语言中文社区2018年终文章整理(作者篇)

  • R语言中文社区2018年终文章整理(类型篇)

公众号后台回复关键字即可学习

回复 爬虫            爬虫三大案例实战
回复 Python       1小时破冰入门
回复 数据挖掘     R语言入门及数据挖掘
回复 人工智能     三个月入门人工智能
回复 数据分析师  数据分析师成长之路 
回复 机器学习     机器学习的商业应用
回复 数据科学     数据科学实战
回复 常用算法     常用数据挖掘算法

给我【好看】

你也越好看!

左手Python右手R —《白夜行》wordcloud相关推荐

  1. 左手Python 右手R —— 前N阶乘求和、金字塔数求和

    左手Python 右手R -- 前N阶乘求和.金字塔数求和 前言 1.前N阶乘求和 1.1 图解问题 1.2 算法流程 1.3 代码实现 1.3.1 python代码实现 1.3.2 R语言代码实现 ...

  2. python房价预测_您的选房系统已上线——利用python和R如何进行房价预测

    本文约1500字,阅读需要5分钟.讲述了如何使用python进行房价信息获取,如何利用R构建回归模型以达到预测上海某个地区房价的目的. 关键词:买房 Python 选房 R 定价 本文讲述了借助Pyt ...

  3. python实现对《白夜行》的词频统计

    我用的是jieba这个很好用的中文分词库,大家可以已通过pip安装这个库,最好是通过清华大学镜像站安装,速度快,而腾讯云的镜像站没有这个库. 更换清华镜像源 > pip install pip ...

  4. 【自然语言处理】中文文本预处理及词云_以小说《白夜行》为例

    参考:https://www.cnblogs.com/pinard/p/6744056.html import pandas as pd import numpy as np import jieba ...

  5. 独家 | 从全方位为你比较3种数据科学工具的比较:Python、R和SAS(附链接)

    翻译:张玲 校对:吴金笛 本文约3000字,建议阅读5分钟. 关于三种数据科学工具Python.R和SAS,本文从8个角度进行比较分析并在文末提供记分卡,以便你随时调整权重,快速做出选择. 简介 我们 ...

  6. 独家 | 利用Auto ARIMA构建高性能时间序列模型(附Python和R代码)

    作者:AISHWARYA SINGH 翻译:陈之炎 校对:丁楠雅 本文共3400字,建议阅读10+分钟. 本文介绍了ARIMA的概念,并带你用Python和R训练一个数据集实现它. 简介 想象你现在有 ...

  7. 读东野圭吾《白夜行》有感

    道阻且长,行则将至.埋头苦干,不鸣则已,一鸣惊人!加油,骚年!   <白夜行>全书近600页,从主人公人生几个不同的阶段作为主线,以一次次悬而未决的疑案吸引人越发深入,又能从好几个不同的角 ...

  8. 当黑夜自此笼罩-白夜行之感想一二

    [原来在SAE的blog上,都转到CSDN了..] 发表于 2016/04/27 桐原亮司终究逃不过了,仓皇跳下,结果扎到了自己随身携带的那把剪出过漂亮窗花的剪刀上.西本雪穗此刻内心是波涛汹涌惊涛骇浪 ...

  9. 白夜行,在白日黑暗中行走的男女

    原文地址:点击打开链接 读罢<白夜行>,感到相当的受触动,这样震撼的书并不是那么多的.从傍晚开始,我一直通宵到早上读完.之后又回味良久,很想找人讨论讨论,于是就上了豆瓣跟百度白夜行贴吧,看 ...

最新文章

  1. 剑指offer-丑数
  2. 悟道:一位IT高管20年的职场心经
  3. python爬虫提取教学_python爬虫的基本抓取
  4. 逆向建模软件介绍_逆向技术在2代机修理中的应用
  5. Linux tar将分割的小文件进行合并
  6. web js基础3 事件
  7. android 判断文件是否存在_每日一课 | Python检查文件是否存在
  8. hashlib 模块 摘要算法
  9. mysql 循环体 如何测试_mysql里如何循环插入数据,进行测试
  10. 解决eclipse + pydev 编译过程中有中文的问题
  11. linux之移动或重命名文件:mv
  12. 南京江宁软通动力怎么样_南京有什么美食?有哪些必游景点?
  13. “MySQL 服务正在启动 . MySQL 服务无法启动。 服务没有报告任何错误。”的解决方案
  14. Officescan防毒墙安装部署手册
  15. 前端——面试(苏小妍)
  16. Python提取docx格式Word文档中所有尾注
  17. 编写一个压缩软件(Java实现版本)
  18. No mapping for POST
  19. 如何正确关闭MongoDB
  20. 浅谈国产智能手机的自主创新

热门文章

  1. DDR SDRAM芯片DQS的作用以及读写DQS/DQ对齐方式不同的原因
  2. 18款最值得推荐的免费视频编辑软件
  3. 用Rstudio写.Sh/Shell文件
  4. python:实现布赖恩·克尼汉法算法(附完整源码)
  5. HDOJ 2545 树上战争
  6. idea中src/main/resources目录下的applicationContext.xml文件访问src/main/webap目录下的配置文件
  7. SoundNet:根据声音来识别场景环境实践
  8. iObit Driver Booster 8 驱动更新失败 只停留在 1%
  9. LibOpenCM3(一) Linux下命令行开发环境配置
  10. 嘀嘀和快的上演十月围城 020模式被强化