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

##详细说明:

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

##准备工作:
1.安装必要的第三方库:

 pip install wordcloudpip install jiebapip install numpypip 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 STOPWORDSfrom 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 = Noneself.en_text = Nonecwd = os.getcwd()self.mask_path = path.join(path.abspath(cwd),'alice_mask.png')self.user_sw = STOPWORDSself.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 = Noneself.cn_text = self.choose_file(txtformat)if self.cn_text is None:passelse: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 Nonedef draw_cn(self,evt):if self.cn_text is None:self.raise_msg(u'plaese Choose a Chinses text file first.')return Noneelse: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随机生成器_Python 实现的、带GUI界面的词云生成器

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

  2. python词云去除词_使用Python制作一个带GUI界面的词云自动生成工具(连载五)

    上一篇中我们介绍了自动生成词云工具(GUI)中数据清洗界面的实现过程(详解词云自动生成工具的数据清洗界面制作过程(连载四)),了解掌握了Grid.Pack混合布局的方法.本篇我们将讨论Python自动 ...

  3. python制作软件界面_使用Python制作一个带GUI界面的词云自动生成工具(一)

    在现实生活中你可能会遇到这种情况:想知道一篇论文中哪个词语最多,哪些词语最少(以此判断文章的主要内容):想知道一部小说中哪一个人物出现的次数最多(当然,出现次数最多的那个人也不一定是主脚):想知道一部 ...

  4. python color属性_使用Python制作一个带GUI界面的词云自动生成工具(连载七)

    前几篇向大家介绍了词云自动生成工具(GUI)的详解GUI词云自动生成工具中词云属性设置界面的实现(连载六).通过前面内容我们基本构建出了词云自动生成工具的主要框架.本篇结合tkinter中的filed ...

  5. 路径选择算法|Floyd算法|Dijkstras算法(带GUI界面带实验报告)

    源码地址:https://github.com/lllunaticer/pathFindGUI 使用python 做的带GUI界面的最短路径算法实现 下面是实际效果: 转载于:https://www. ...

  6. Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序

    Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序 一.项目背景 电影逐渐成为人们生活的不可或缺的一部分,而了解一部电影的可以通过电影评分与大众推荐度,但以上的方式都太过于片面, ...

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

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

  8. Python四行代码实现的猜数字小游戏,基于thinker,带GUI界面

    Python四行代码实现的猜数字小游戏,基于thinker,带GUI界面 from tkinter import * from tkinter import messagebox 导入提示框 from ...

  9. python中求根公式_用python做个带GUI的求根公式吧

    用python做个带GUI的求根公式吧 解题程序 在本文中,将用python实现解一元二次方程ax^2+bx+c=0(a≠0)的求根公式,并设计基于TK的GUI界面. 实现效果 程序编写 整体 GUI ...

  10. pythongui登录界面密码显示_用python写一个带有gui界面的密码生成器

    需要用到的库: tkinter:构建gui界面 pyperclip:复制功能 random:生成随机数 string:处理字符串 代码: from tkinter import * import ra ...

最新文章

  1. FOSCommentBundle功能包:设置Doctrine ODM映射(投票)
  2. SpringBoot第十二篇:springboot集成apidoc
  3. 【c语言】蓝桥杯算法训练 成绩的等级输出
  4. funny alphabet
  5. html5 white space,CSS white-space 属性
  6. 飞鸽传书也在2010年免费发布了
  7. maya多象限uv不显示_CG制作软件这么多,你都会哪些?
  8. Hive:添加、删除分区
  9. 延边大学计算机考研压分吗,这6所大学被严重低估,2020届高三考生注意收藏!适合“捡漏”...
  10. Cause: java.io.IOException: Could not find resource com/itheima/po/CustomerMapper.xml
  11. 移动端图形架构之PowerVR of Imagination Tile-based rendering
  12. 【C++ 程序】 TVJ Complex Calculator (v 2.1) 复数计算器
  13. 关于Matlab2018启动后发生崩溃闪退的解决方案
  14. python中 r'', b'', u'', f'' 的含义
  15. Bioconductor分析基因芯片数据第五章
  16. DAO终极之问:去中心化组织归谁所有?
  17. 苹果6plus自动时间不准 修复苹果自动设置时间不准教程(图文)
  18. 渗透工程师面试题合集(2022版)
  19. 媲美ps的图像编辑器Affinity Photo 1.7.0.128中文版
  20. Qt_OpenCV_VS2013配置方法

热门文章

  1. BioGRID:蛋白质相互作用数据库
  2. Deecamp2019年试题A卷详解和感受
  3. python计算目标文件夹中各文件的GC含量
  4. LSB信息隐藏的卡方分析
  5. xtu oj 1078
  6. 硬件编程语言和编程器件
  7. 图形化硬件编程 ——数码管时钟——之米思齐篇
  8. jqueryeasyui 事件方法onChange(),onSelect()
  9. 各地前端工资是多少?三线城市的前端有多少
  10. 金融资产收益率计算中百分比收益率和对数收益率有什么区别?