python image清除_左手Python右手R —白夜行wordcloud

1f15477b8149ffe88b5e55cee131e125.png

作者:胡言  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')2wordbaseread.csv("white_night.txt")
3dim(wordbase)

OutPut

1## [1] 7851 1

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

1word_cleanNULL
2word_clean$msg " ", replacement ="", wordbase[,1]) 
3word_clean$msg "\t", "", word_clean$msg) 
4word_clean$msg ",", "???", word_clean$msg)
5word_clean$msg "~|'", "", word_clean$msg)
6word_clean$msg "\\\"", "", word_clean$msg)
7#head(word_clean)

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

1insertWords(c('亮司','雪穗'))2seg_wordas.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))4v5d6d=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')2mydataread.table('white_night_cloud.txt')
3#mydata=10)
4wordcloud2(mydata,size=1,fontFamily='宋体')

f979597a98838cd8e50f45430f878fbd.png

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

亮司与雪穗:

1write.table(wordResult,'white_night_cloud.txt')2mydataread.table('white_night_cloud.txt')
3#mydata=10)
4wordcloud2(mydata,size=4,fontFamily='楷体',figPath='boyandgirl.jpg')

dc7bd9a056258885beb66c56a8c11f79.png

只想和你手牵着手再阳光下漫步
二、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()

58fdcbc6a0f7ee514ed6e95c2f1dc2a1.png

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

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

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

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

cd7962eae0f695dc111b41957a2ae0a0.gif

往期精彩:

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

  • R语言轻巧的时间包hms

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

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

f22c7fe058c06bc097fb09b3340ad9bd.png

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

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

给我【好看】

你也越好看!

bc463f3e2094ebe2ad34f3cfda082955.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值