基于Python展示三国演义_三体_琅琊榜的定制云词频统计

第一部分:准备工作

Python安装wordcloud,命令为:C:\Users\Administrator>pip install wordcloud

安装时候遇到问题,可以参考(Python安装wordcloud第三方插件遇到的问题):

https://www.sharebook.site/articles/python-third-lib-install-troubleshooting/

 

第二部分:wordcloud第三方参考函数使用

函数说明:wc = WordCloud(font_path=font,max_words=2000, mask=mask, stopwords=stopwords, margin=10,random_state=1).generate(text)

参数说明:

font_path:输出字体样式路径

max_words:最大展现的词的个数

mask:面具图,主要是用来,展示的云图以这个为模板进行展现

stopwords:停用词/常用词定义

margin:词之间的边界值

text:要进行云词展现的文件

 

参考资料1(源码位置):https://github.com/amueller/word_cloud

参考资料2(wordcloud官网):http://amueller.github.io/word_cloud/index.html

 

第三部分:对小说三国演义、三体、情书进行云词词频统计展示

三国演示是文言文写的,在进行云词统计的时候,对其中的部分词进行了特殊处理,其中对三国演义做云词展现的时候,用的mask图片为:stormtrooper_mask.png;云词展示的字体为:DroidSansFallbackFull.ttf。

 #-*- coding: utf-8 -*-
import numpy as np
from PIL import Image
from os import path
import matplotlib.pyplot as plt
import random
from matplotlib.font_manager import *
from wordcloud import WordCloud, STOPWORDS

#  指定云词输出的字体样式
font=os.path.join(os.path.dirname(__file__), "../font/DroidSansFallbackFull.ttf")

# 设置颜色
def grey_color_func(word, font_size, position, orientation, random_state=None, **kwargs):
return "hsl(0, 0%%, %d%%)" % random.randint(60, 100)

# 设置样式模板
d = path.dirname(__file__)
mask = np.array(Image.open(path.join(d, "../image/stormtrooper_mask.png")))

# 指定要分词的文本路径,注意格式编码
text = open(u"../demo/三国演义.txt").read().decode('utf-8')

# 对一个文言文词进行白话文处理
text = text.replace(u"玄德曰", u"玄德")
text = text.replace(u"操曰", u"曹操")
text = text.replace(u"孔明曰", u"孔明")
text = text.replace(u"权曰", u"孙权")
text = text.replace(u"布曰", u"吕布")
text = text.replace(u"懿曰", u"懿")
text = text.replace(u"飞曰", u"飞")
text = text.replace(u"肃曰", u"肃")
text = text.replace(u"瑜曰", u"周瑜")
text = text.replace(u"绍曰", u"绍")
text = text.replace(u"允曰", u"允")
text = text.replace(u"云长曰", u"云长")
text = text.replace(u"关公曰", u"关公")
text = text.replace(u"关公曰", u"关公")

# 停用词处理,去掉无意义的常用词
stopwords = {}
def importStopword(filename=''):
global stopwords
f = open(filename, 'r')
# line = f.readline().rstrip()
line = f.readline()

while line:
stopwords.setdefault(line, 0)
stopwords[line] = 1
# line = f.readline().rstrip()
line = f.readline()
f.close()

# 指定停用词文件路径
importStopword(filename='../demo/stopwords.txt')

# 用户也可以通过下面的方式指定一些停用词,如果要指定的常用词比较多,及不适用了
# stopwords = set(STOPWORDS)
# stopwords.add("int")
# stopwords.add("ext")

# Python云词调用的核心函数,其中有用户自定义的字体路径、单词的最大输出数量、停用词以及生成的文本等
wc = WordCloud(font_path=font,max_words=2000, mask=mask, stopwords=stopwords, margin=10,random_state=1).generate(text)

# 方法一:云词展现标题字体设置,下面这种方法是指定默认字体
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family']='sans-serif'
#解决负号'-'显示为方块的问题
matplotlib.rcParams['axes.unicode_minus'] = False

# 方法二,云词展现标题字体设置,用户可以自己指定字体的位置
# myfont = FontProperties(fname='/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc')
# 参考网址:http://blog.csdn.net/dgatiger/article/details/50414549

# 云词图像展现
default_colors = wc.to_array()
plt.subplot(121),plt.imshow(wc.recolor(color_func=grey_color_func, random_state=3)),plt.title('Black-and-white Diagram')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(default_colors),plt.title(u"三国演义-词频统计(Colour Picture)")
# plt.subplot(122),plt.imshow(default_colors),plt.title(u"三国演义-词频统计",fontproperties=myfont)
plt.xticks([]), plt.yticks([])
plt.show()

源代码地址:E:\IdeaProjects_Python\faceprojects\wordCloud\demoByGuan\sanguo_word_cloud.py

三体小说做云词词频统计展现的时候,用的mask图文为:earth.jpg;云词展示的字体为:李旭科漫画体v1.0.ttf

源码地址:E:\IdeaProjects_Python\faceprojects\wordCloud\demoByGuan\santi_word_cloud.py

小说琅琊榜做云词词频统计展现的时候,用的mask图文为:love.jpg;云词展示的字体为:奇思_奔跑吧电影.ttf

源码地址:E:\IdeaProjects_Python\faceprojects\wordCloud\demoByGuan\langyabang_word_cloud.py

总结:本文测试的时候,停用词及常用词的导入不是很完善,需要进一步改善,由于wordcloud第三方库,直接对文本进行分词并自己进行统计的,发现wordcloud在进行计算和统计的时候,用到的函数分别为:generate/generate_from_text/generate_from_frequencies这几个参数,即加载文本、文本分词、单词统计几个步骤。是否在后面自己对NLP非常熟悉的时候,自己分词,自己开发已经将词分好的云分词词频统计库。

第四部分:参考资料

资料1(wordcloud库源码):

https://github.com/amueller/word_cloud

资料2(wordcloud官网Example):

http://amueller.github.io/word_cloud/index.html

资料3(彻底解决matplotlib中文乱码问题):

http://blog.csdn.net/dgatiger/article/details/50414549

资料4(Python中遇到"UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte sequence"之类的编码或解码的错误时如何处理):

http://www.cnblogs.com/fclbky/articles/4175788.html

资料5(程序媛的浪漫表白,Python实现带心图像的图频):

https://github.com/fyuanfen/wordcloud

资料6(python的一个好玩模块wordcloud):

http://blog.csdn.net/fyuanfena/article/details/52038984

资料7(Python给小说做词云):

http://www.cnblogs.com/sunnyeveryday/p/7043399.html

资料8(利用python制作中文词云):

https://github.com/FantasRu/WordCloud

资料9(word_cloud源码阅读位置):E:\IdeaProjects_Python\wordcloud\word_cloud-master

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: