#-*- coding: utf-8 -*-
import re, collections, jieba, wordcloud
import numpy as np
import pandas as pd
from PIL import Image
import matplotlib.pyplot as plt
#读取文件
inputfile = open('article.txt', encoding='utf-8') #打开文件
data = inputfile.read() #读出整个文件
inputfile.close() #关闭文件
remove_word = open('remove_word.txt', encoding='utf-8') #存放无意义词,一行一个
remove_words = []
picture = 'redheart.jpg' #背景图
while True:
mystr = remove_word.readline()
if not mystr:
break
remove_words.append(str(mystr).replace("\n",""))
#文本预处理
pattern =re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"') #定义正则表达式匹配模式
string_data = re.sub(pattern, '', data) #将复合模式的字符去除
# 文本分词
seg_list_exact = jieba.cut(string_data, cut_all = False) #精确模式分词
object_list = []
for word in seg_list_exact: #循环读出每个分词
if word not in remove_words: #如果不在去除词库中
object_list.append(word) #将分词追加到列表
#词频统计
word_counts = collections.Counter(object_list) #对分词作词频统计
word_counts_top100 = word_counts.most_common(100)
results = pd.DataFrame(word_counts_top100) #输出前100最高频的词存到wordcloud.csv里面,第一遍运行之后将排名靠前的无意词复制到remove_word.txt里面
results.to_csv('wordcloud.csv', index = False) #输出词频统计结果
#词频展示
background = np.array(Image.open(picture)) #定义词频背景,网上随便下一张图
reviews_cloud = wordcloud.WordCloud(
background_color = 'white', #设置背景颜色
font_path = r'C:\WINDOWS\Fonts\FZYTK.TTF', #设置字体格式,不需要安装软件,直接去C盘找就好了,找到Fonts文件夹后在里面找到自己要的字体,单击右键查看属性就能复制文件名了。
mask = background,
max_words = 200, #最多显示词数
# max_font_size = 100, #字体最大值
width = 2400,
height = 1600
)
reviews_cloud.generate_from_frequencies(word_counts) #从字典生成词云
image_colors = wordcloud.ImageColorGenerator(background) #从背景图建立颜色方案
reviews_cloud.recolor(color_func = image_colors) #将词云颜色设置为背景图方案
reviews_cloud.to_file("temp.jpg") #将图片输出为文件
plt.imshow(reviews_cloud) #显示词云
plt.axis('off') #关闭坐标轴
plt.show() #显示图像
做词云图的数据来源是《Python数据分析与挖掘实战》里京东上美的热水器的评论,下面是剔除了出现频次最高的前100个词里的无意义词之后的结果,主要是安装、速度、价格、售后服务、质量这些。