左手Python右手R —《白夜行》wordcloud
作者:胡言? R語言中文社區專欄作者
知乎ID:
https://www.zhihu.com/people/hu-yan-81-25
前言
我的天空里沒有太陽,總是黑夜,但并不暗,因為有東西代替了太陽。雖然沒有太陽那么明亮,但對我來說已經足夠。憑借著這份光,我便能把黑夜當成白天。你明白嗎?我從來就沒有太陽,所以不怕失去。”
每每讀完一本東野圭吾的書,我都要感慨一次:《白夜行》真是太好看了!
本文利用R和python分別對該書做分詞并畫詞云,為今后更深一層的文本分析打基礎。
R語言最常用的分詞包為jiebaR和Rwordseg,jiebaR分詞對名稱識別更有優勢,Rwordseg效率更高。安裝包時需要為電腦安裝java,安裝過程較繁瑣,請各位看官自行百度。
2library(Rwordseg)
3library(wordcloud2)
將《白夜行》小說txt版本讀入R,查看wordbase有7851行:
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
1segmentCN()函數將文本拆成了單個的詞匯。
將分詞后的結果做頻數統計:
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.Freq2#?22?雪穗?雪穗?823
3#?23?沒有?沒有?806
4#?28?什么?什么?716
5#?49?知道?知道?483
6#?60?一個?一個?410
7#?66?一成?一成?369
8#?67?他們?他們?355
9#?72?這么?這么?341
10#?73?自己?自己?335
11#?74?因為?因為?332
12#?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
12
3
4
5
6
7
8
9
10
11
12
去停用詞后,出現頻數很高的詞匯,我們明顯可以感到《白夜行》特有的嚴肅和悲涼的氣息。
終于可以畫詞云了,
星星詞云:
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同樣可以畫詞云,用到jieba、wordcloud模塊。
畫詞云的過程中需要用到ttf格式的字體,需要手動下載。
1from?os?import?path2from?wordcloud?import?WordCloud,?ImageColorGenerator
3import?jieba
4import?pandas?as?pd
5import?numpy?as?np
6from?scipy.misc?import?imread
7from?PIL?import?Image
1
讀取文本
用同樣的文本,即《白夜行》小說的txt文件,
1txt=open('white_night.txt',encoding="gbk")2line=txt.readlines()???#讀取文字
3type(line)?????????????#list無法完成jieba分詞
4line=','.join(line)????#將list轉化為str
5type(line)
2
構建停用詞表
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
3
jieba分詞
2#word_cut=','.join(word_list)
3word_cut=list(word_list)
4type(word_cut
4
畫詞云
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)
13
14WD=wd.generate(word_cut)
15
16import?matplotlib.pyplot?as?plt
17WD.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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html公差符号输入,cad正负公差符号
- 下一篇: Pdg2Pic JPG质量系数