前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

以下文章来源于Demo大师,作者wellenwoo

概述

Python 实现的、带GUI界面的词云生成器。 选择文档(中文、英文均可)即可生成词云,支持自定义 停用词词典,支持自定义遮罩形状。

详细说明:

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

PS:如有需要Python学习资料的小伙伴可以加下方的群去找免费管理员领取

可以免费领取源码项目实战视频PDF文件

准备工作:

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安装路径下(如\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)。
如下:

程序实现

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

在wordcloud_gen.py中导入相关的库:

from os import path
from PIL import Image
import numpy as np
import timefrom wordcloud import WordCloud, STOPWORDS
import jieba

编写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 osfrom 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 = Noneself.en_text = Nonecwd = 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 = 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设计有界面的词云生成器相关推荐

  1. python界面gui随机生成器_Python 实现的、带GUI界面的词云生成器

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

  2. 使用Python爬虫获取豆瓣影评,并用词云显示

    使用Python爬虫获取豆瓣影评,并用词云显示 Python语言流行到现在,目前最受开发者喜爱的功能莫过于它的爬虫功能,以至于很多人以为Python的英语发音也是"爬虫",其实它是 ...

  3. python词云改颜色_使用Python创建一个与图像颜色匹配的词云

    原标题:使用Python创建一个与图像颜色匹配的词云 来自:https://www.linuxmi.com/ 我用Python造了一个词云.不过这次创建的是与图像颜色匹配的词云. 使用Python w ...

  4. python数据挖掘学习笔记】十三.WordCloud词云配置过程及词频分析

    #2018-03-28 09:59:40 March Wednesday the 13 week, the 087 day SZ SSMR 11,12因为涉及到数据库被我暂时放弃了 python数据挖 ...

  5. 详解使用Python爬取豆瓣短评并绘制词云

    使用Python爬取豆瓣短评并绘制词云 成果如下(比较丑,凑合看) 1.分析网页 打开想要爬取的电影,比如<找到你>,其短评如下: 查看源代码 发现短评存放在<span>标签里 ...

  6. 如何在Power BI Desktop中创建词云生成器

    In this article, we'll look at how to create a Word cloud generator in Power BI Desktop, including i ...

  7. Python3,我只用一段代码,就写了个词云生成器,功能强大到怀疑人生。

    词云生成器 1.引言 2.代码实战 2.1 库介绍 2.1.1 jieba 2.1.2 stylecloud 2.2 库安装 2.2 代码实战 3.总结 1.引言 小鱼:小屌丝,你在干啥呢? 小屌丝: ...

  8. python小练习--GUI设计

    文章目录 练习1:canvas画布的使用 练习2:练习三个布局管理器 1.grid 布局管理器 2.pack 布局管理器 3.place布局管理器 练习3:鼠标事件和键盘事件用法 练习4:lambda ...

  9. 基于python和线上网站wordart的词云生成

    词云生成 前言 一.词云是什么? 二.使用步骤 1.使用jieba提取关键词 2.进入网站 3.导入关键词 4.导入字体 5.生成词云 6.词云调整 总结 前言 随着人工智能的不断发展,python这 ...

  10. 用Python读红楼梦之——一、词云绘制

    原文连接 Python在数据分析中越来越受欢迎,已经达到了统计学家对R的喜爱程度,Python的拥护者们当然不会落后于R,开发了一个个好玩的数据分析工具,下面我们来看看如何使用Python,来读红楼梦 ...

最新文章

  1. 2021清华大学年度人物候选 | 曹丰泽:我要证明,理想主义的路是走得通的
  2. Ubuntu下安装ruby的三种方式
  3. mybatis传入map参数parameterType
  4. 如何在dreamwaver中连接数据库
  5. 【图像】imagededup照片去重(感知哈希,汉明距离)
  6. c语言中穷竭算法,hihocoder#1054 : 滑动解锁(深度优先搜索)
  7. The FreeRTOS Distribution(介绍、移植、类型定义)
  8. nginx事件模块 -- 第六篇 stale event
  9. LeetCode5. 最长回文子串
  10. java语法结构库,万字解析!
  11. 或许是介绍Android Studio使用Git最详细的文章
  12. 我们不知道我们不知道:用同化项目做网络安全
  13. 营业收费系统 建立报表库服务器,浅谈计算机在自来水收费系统的重要应用
  14. 高一计算机网络技术应用计划,高一信息技术第一学期教学计划
  15. 下载频道2013上半年超人气精华资源汇总---全都是免积分下载。
  16. 各大公司的大数据质量监控平台
  17. Typora安装 Pandoc实现导出功能
  18. hdu5769Substring
  19. ThinkPad电脑(win10)总是自动休眠的解决办法,亲测有效~
  20. SQLite3 模糊查询

热门文章

  1. oracle 中(+) 是什么意思
  2. 实习总结与收获(2021.6.7-2021.8.27)
  3. 【人生如逆旅,我亦是行人】-半年总结
  4. 关于眼镜的一些知识收集
  5. 移动apn接入点哪个快_千兆交换机和快速以太网交换机哪个更好呢?
  6. Python打造一个互动交友聊天室,免费在线聊天
  7. 解决Extraneous non-props attributes (border, class) were passed to component but could not be
  8. 树莓派连接侧屏出现黑屏蓝屏解决方法
  9. 前端---HTML制作百度首页
  10. 用Xposed框架拦截微信、人人、QQ等LBS应用的当前位置