代码地址如下:
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. 4. API之打印函数

      AbortDoc 取消一份文档的打印 AbortPrinter 删除与一台打印机关联在一起的缓冲文件 AddForm 为打印机的表单列表添加一个新表单 AddJob 用于获取一个有效的路径名,以便 ...

  2. MSI failed, 不能卸载VMware

    解决方法; http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&ext ...

  3. 安全:Web 安全学习笔记

    背景 说来惭愧,6 年的 web 编程生涯,一直没有真正系统的学习 web 安全知识(认证和授权除外),这个月看了一本<Web 安全设计之道>,书中的内容多是从微软官方文档翻译而来,这本书 ...

  4. WebLogic Server 12c相对JBoss EAP 6的优势

    原文来自:https://blogs.oracle.com/middlewareplace/entry/why_should_you_choose_oracle 1.多数据中心部署和集群 WebLog ...

  5. UITableView的headerView展开缩放动画

    UITableView的headerView展开缩放动画 效果 源码 https://github.com/YouXianMing/Animations // // HeaderViewTapAnim ...

  6. 第一章 关于html适应手机屏幕的写法

    在网页的中增加以上这句话,可以让网页的宽度自动适应手机屏幕的宽度: <meta name="viewport" content="width=device-widt ...

  7. PHP json_encode转换空数组为对象

    问题描述: php返回json格式的数据,当返回数据的为数组,且key为字符串时,json化后将返回jsonObject,但是如果是空数组,有可能返回的就是jsonArray,数据结构不一致导致端解析 ...

  8. MongoDB学习笔记(二)--Capped集合 && GridFS存储文件

    Capped集合                                                            Capped集合的大小是固定的,如果空间都被用完了,新添加的对象 ...

  9. 网络结构设计——负载均衡之LVS学习笔记(三)

    LVS按个人理解的说就是将一台Linux服务器当作路由器等功能的技术.LVS---Linux虚拟服务器. LVS实现了三种IP负载均衡技术VS/NAT.VS/TUN.VS/DR. 今天简单分享一下我在 ...

  10. 基于Java spring框架的微信企业号开发中关于js-sdk的配置

    在调用js-sdk的第一步,我们需要引入js-sdk的js链接,然后执行wx.config,官方示例如下所示: wx.config({ debug: true, // 开启调试模式,调用的所有api的 ...