代码地址如下:
http://www.demodashi.com/demo/14233.html

详细说明:

“词云”就是数据可视化的一种形式,给出一段文本,根据文本中词语的出现频率而生成的一幅图像,从而过滤掉大量的文本信息,人们只要扫一眼就能够明白文章主旨,使得数据分析的结果更加直观。

准备工作:

1.安装必要的第三方库:

 pip install wordcloud
pip install jieba
pip install numpy
pip install wxPython

安装PIL,在以下地址下载PIL库进行安装:

http://effbot.org/media/downloads/PIL-1.1.7.win32-py2.7.exe

(或在http://effbot.org/downloads/ 中找到与你操作系统及python版本相对应

版本的PIL)

需要注意一点,因为wordcloud自带的字体文件不支持中文,为了让wordcloud支持中文词云的生成,安装完wordcloud库后需要hack一下,具体做法如下:

复制一个中文字体文件(在本项目中为方正姚体 FZYTK.TTF)到wordcloud安装路径下(如:C:\Python27\Lib\site-packages\wordcloud),然后打开wordcloud库中的wordcloud.py文档,将其中的

"FONT_PATH = os.environ.get('FONT_PATH', os.path.join(FILE, 'DroidSansMono.ttf'))"

(本项目的附件中将附带 FZYTK.TTF 字体文件)

改写为

"FONT_PATH = os.environ.get('FONT_PATH', os.path.join(FILE, 'FZYTK.TTF'))".

这样wordcloud将会以"FZYTK.TTF"作为字体文件.

项目结构:

整体的项目结构十分简单,一共三个脚本文件,一个是GUI界面脚本(draw_gui.py),

一个是GUI菜单的辅助性脚本(utility_template.py),

一个是词云生成器脚本(wordcloud_gen.py)。

如下:

程序实现

以下是程序的实现思路,以及步骤,实现步骤里,附上了关键代码,全部的代码,请下载代码后阅读

  1. 在wordcloud_gen.py中导入相关的库:
from os import path
from PIL import Image
import numpy as np
import time
from wordcloud import WordCloud, STOPWORDS
import jieba
  1. 编写wordcloud_gen.py中的相关函数,

读取传入文档:

def get_text(fn):
text = open(fn).read()
return text

中文分词:

def get_text_cn(fn):
t0 = get_text(fn)
t0 = jieba.cut(t0,cut_all = False)
text = " ".join(t0)
return text

生成词云:

def draw_wc(text,mask_path,stopwords):
mask = np.array(Image.open(mask_path)) wc = WordCloud(max_words = 1000,mask = mask,stopwords = stopwords,
margin = 0,random_state=1).generate(text)
im = wc.to_image()
im.show()
fn = str(int(time.time()))+'.jpg'
im.save(fn)
return im

3.在draw_gui.py中编写用户界面:

导入相关的库:

import wx
import os
from os import path
from collections import namedtuple
import wx.lib.rcsizer as rcs
from wordcloud import STOPWORDS from utility_template import layout_template #自定义的库
import wordcloud_gen as wcg #自定义的库

编写界面:

class MainWindow(wx.Frame):
def __init__(self,parent,title):
wx.Frame.__init__(self,parent,title=title,size=(600,-1))
Size = namedtuple("Size",['x','y'])
s = Size(100,50) self.cn_text = None
self.en_text = None
cwd = os.getcwd()
self.mask_path = path.join(path.abspath(cwd),'alice_mask.png')
self.user_sw = STOPWORDS self.lt = layout_template()
self.name = 'WordCloud draw'
self.version = '0.2'
self.des = '''Draw the word cloud.\n'''
self.git_website = "https://github.com/WellenWoo/WordCloud_draw"
self.copyright = "(C) 2018 All Right Reserved" """创建菜单栏"""
filemenu = wx.Menu()
menuExit = filemenu.Append(wx.ID_EXIT,"E&xit\tCtrl+Q","Tenminate the program") confmenu = wx.Menu()
menuSw = confmenu.Append(wx.ID_ANY,"StopWords","Add user StopWrods dict")
menuMask = confmenu.Append(wx.ID_ANY,"Mask","Set mask") helpmenu = wx.Menu ()
menuAbout = helpmenu.Append(wx.ID_ABOUT ,"&About","Information about this program") menuBar = wx.MenuBar ()
menuBar.Append(filemenu,"&File")
menuBar.Append(confmenu,"&Configure")
menuBar.Append(helpmenu,"&Help")
self.SetMenuBar(menuBar) """创建输入框"""
self.in1 = wx.TextCtrl(self,-1,size = (2*s.x,s.y)) """创建按钮"""
b1 = wx.Button(self,-1,'text')
b2 = wx.Button(self, -1, "run") """设置输入框的提示信息"""
self.in1.SetToolTipString('choose a text file') """界面布局"""
self.sizer0 = rcs.RowColSizer()
self.sizer0.Add(b1,row = 1,col = 1)
self.sizer0.Add(self.in1,row = 1,col = 2)
self.sizer0.Add(b2,row = 1,col = 3) """绑定回调函数"""
self.Bind(wx.EVT_BUTTON, self.choose_cn, b1)
self.Bind(wx.EVT_BUTTON, self.draw_cn, b2) '''菜单绑定函数'''
self.Bind(wx.EVT_MENU,self.OnExit,menuExit)
self.Bind(wx.EVT_MENU,self.OnAbout,menuAbout) self.Bind(wx.EVT_MENU,self.get_stopwords,menuSw)
self.Bind(wx.EVT_MENU,self.get_mask,menuMask) self.SetSizer(self.sizer0)
self.SetAutoLayout(1)
self.sizer0.Fit(self)
self.CreateStatusBar()
self.Show(True)

界面如下:

编写控件的回调函数:

    def choose_cn(self,evt):
"""Choose a Chinses text file"""
self.cn_text = None
self.cn_text = self.choose_file(txtformat)
if self.cn_text is None:
pass
else:
self.in1.Clear()
self.in1.write(self.cn_text) def choose_file(self,wildcard):
'''choose img'''
dlg = wx.FileDialog(
self, message="Choose a file",
defaultDir=os.getcwd(),
defaultFile="",
wildcard=wildcard,
style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR
)
if dlg.ShowModal() == wx.ID_OK:
paths = dlg.GetPaths()
dlg.Destroy()
return paths[0]
else:
return None def draw_cn(self,evt):
if self.cn_text is None:
self.raise_msg(u'plaese Choose a Chinses text file first.')
return None
else:
text = wcg.get_text_cn(self.cn_text)
wcg.draw_wc(text,self.mask_path,self.user_sw)

运行效果如下:



(英文文档即是程序代码文档本身)Python 实现的、带GUI界面的词云生成器

代码地址如下:
http://www.demodashi.com/demo/14233.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

Python 实现的、带GUI界面的词云生成器的更多相关文章

  1. python实现的、带GUI界面电影票房数据可视化程序

    代码地址如下:http://www.demodashi.com/demo/14588.html 详细说明: Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采 ...

  2. python使用matplotlib画图,jieba分词、词云、selenuium、图片、音频、视频、文字识别、人脸识别

    一.使用matplotlib画图 关注公众号"轻松学编程"了解更多. 使用matplotlib画柱形图 import matplotlib from matplotlib impo ...

  3. 用python爬取微博数据并生成词云

    很早之前写过一篇怎么利用微博数据制作词云图片出来,之前的写得不完整,而且只能使用自己的数据,现在重新整理了一下,任何的微博数据都可以制作出来,放在今天应该比较应景. 一年一度的虐汪节,是继续蹲在角落默 ...

  4. python抓取电影<海王>影评词云生成

    海王是前段时间大热的影片,个人对这种动漫题材的电影并不是很感兴趣.然鹅,最近这部电影实在太热了,正好最近看自然语言处理的时候,无意间发现了word cloud这个生成词云的库,还蛮好玩的,那就抓抓这部 ...

  5. python:用wordcloud生成一个文本的词云

    今天学习了wordcloud库,对<三国演义>生成了词云图片,非常漂亮.就想多尝试几个,结果发现一系列问题.最常出现的一个错误就是"UnicodeDecodeError : .. ...

  6. 利用python实现简单词频统计、构建词云

    1.利用jieba分词,排除停用词stopword之后,对文章中的词进行词频统计,并用matplotlib进行直方图展示 # coding: utf-8 import codecs import ma ...

  7. 【Python】利用豆瓣短评数据生成词云

    在之前的文章中,我们获得了豆瓣爬取的短评内容,汇总到了一个文件中,但是,没有被利用起来的数据是没有意义的. 前文提到,有一篇微信推文的关于词云制作的一个实践记录,准备照此试验一下. 思路分析 读文件 ...

  8. python中文及符号检测工具带GUI界面

    import tkinter import webbrowser import re #本程序是一个中文字符和中文检测工具 #中文字符自己添加,我只添加了一点 #输入字符串,点击检查文本即可判断有没有 ...

  9. Python——五分钟带你弄懂迭代器与生成器,夯实代码能力

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是周一Python专题,给大家带来的是Python当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉 ...

随机推荐

  1. symbol(s) not found for architecture armv7

    Undefined symbols for architecture i386: “_OBJC_CLASS_$_XXX”, referenced from: objc-class-ref in XXX ...

  2. windowsmobile 开发环境

    Windows Mobile 6开发环境的配置过程 需要的文件列表:1.Visual Studio 2005 Professional及更高的版本(Visual Studio 2005 Express ...

  3. spring boot注解 --@spring-boot-devtools 自动加载修改的文件和类

    spriing boot中有一个注解,是自动加载修改后的类或者文件. 使用方法为: spring-boot-devtools=true 需要引入devtools包依赖: <dependency& ...

  4. kafka系列文章索引(结束)

    apache kafka在数据处理中特别是日志和消息的处理上会有很多出色的表现,这里写个索引,关于kafka的文章暂时就更新到这里,最近利用空闲时间在对 kafka做一些功能性增强,并java化,虽然 ...

  5. Oracle 10g AND Oracle 11g手工建库案例--Oracle 10g

    Oracle 10g AND Oracle 11g手工建库案例--Oracle 10g 系统环境: 操作系统: RedHat EL6 Oracle:  Oracle 10g and Oracle 11 ...

  6. struts从2.3.X升级到2.5.18中遇到的问题及解决办法

    1,2.5.X版本不再提供xwork.jar ,整合到了 struts-core包中.2,需要升级替换的jar文件:commons-langcommons-lang3ognl其他所有struts2开头 ...

  7. 似然和对数似然Likelihood & LogLikelihood

    One of the most fundamental concepts of modern statistics is that of likelihood. In each of the disc ...

  8. CF 327B. Hungry Sequence

    B. Hungry Sequence time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  9. RabbitMQ Zabbix 监控

    RabbitMQ Zabbix 监控 参考: https://github.com/jasonmcintosh/rabbitmq-zabbix copy api.py list_rabbit_node ...

  10. eclipse无法解析导入 java.util

    eclipse无法解析导入 java.util是因为jre配置错误. 1.点击需要导入jar的项目,右击项目属性(properties),进入到如下图界面: 2.选择Java Build Path选项 ...