背景
人类在数字化浪潮中面临着怎样的抉择?如何把握数字时代的机遇和挑战?科技日新月异,人类生活日益便捷,你是愕然还是亢奋?机器人越来越人性化,你是恐惧焦虑还是心生欢喜?人类是否可以始终制霸选择权中的”最后一英里”?数据可以成为财富吗?大数据、算法、区块链、人工智能、物联网……
面对越来越繁杂的日常生活,每天人都要接受大量的文字信息。伴随着信息流,错综复杂,无休无止。如何准确且快速提取出事物的本质、物质的核心,从而领悟最终含义成了一个关键和问题。一天我灵机一动,于是运用所学知识编写了一款 Python 程序以实现了目标。
简介
这是一款生成词云图的程序。给定一段文章,经过该程序的智能运算,可以自动提取出该文章内的关键词,生成仅仅由文字和颜色组成的图片。图片里文字有大有小,在不同位置表示该词语出现的频率不同。字越大表明出现频率越高,那么也就越重要。 下面是使用该程序创建生成的词云图:
特点
- 界面简洁
- 操作简便
- 使用 Python Tkinter 原生编译而成,性能优良
- 全过程个性化制定操作
- 图片丰富多彩,内容充实
使用方法和步骤
输入背景颜色
从上面的示例图片可以看出,整个词云图的背景为单一色彩,文字颜色却丰富多彩。你可以在输入框内以十六进制的格式写上你想要的颜色以生成制定颜色背景(详细信息见下文附录)。
选择是否使用遮罩图片
右侧是一个单选选项。遮罩图片的意思是:词云图将依照遮罩图片主体图形的形状大小和颜色来生成相应的文字。比如遮罩图片(除了白色背景)是一朵红色的花:
那么最终图片上的文字颜色就是红色、黄色、绿色的(花瓣、花蕊、叶片上的颜色)。这是使用了《爱莲说》的赏析评价的文章生成的。
禁用遮罩图片
这意味着文字将不会按照图片的形状来生成,也没有那上面的颜色,由程序根据背景颜色自动生成。背景黑则文字白,背景白则文字黑。
启用遮罩图片
定制性更强。图片上的主体是什么,这一串文字就沿着它边缘填满(如上图)。
- 注意:遮罩图片背景必须是白色,不能是透明的!
读取词云图片
将需要处理的文本保存至 .txt 纯文本文件里。 然后点击按钮读取。
读取遮罩图片
如果禁用了遮罩图片,则不需要点击此按钮,直接点生成。启用才要。程序支持两种图片格式:.jpg 和 .png。再次重申,.png 图片不能为透明背景!
生成
直接点击生成按钮。处理时间较长,请耐心等待。处理完后,弹窗要求保存。找到目标文件夹后保存即可。
源码
import numpy
import math
import jieba
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
import webbrowser
from tkinter import *
from tkinter import messagebox, filedialog
from PIL import Image, ImageTk
import tkinter.filedialog
string = ""
img_info = ""
img_color = ""
is_mask_on = False
def open_url_cnblogs(event):
webbrowser.open("https://www.cnblogs.com/DawnNeon")
def open_url_csdn(event):
webbrowser.open("https://blog.csdn.net/Dawn_Neon")
def about():
wd_about = Toplevel()
wd_about.resizable(False, False)
wd_about.title("生成词云图")
wd_about.geometry("450x270")
Label(wd_about, width=100, font=("黑体", 40),
text="生成词云图").pack(pady=10)
Label(wd_about, font=("Times New Roman", 15),
text="Copyright © 2020-2022 DawnNeon").pack()
Label(wd_about, font=("Times New Roman", 15),
text="Version Beta 0.2, Aug 18 2022").pack()
Label(wd_about, font=("Times New Roman", 13),
wraplength=450, text="From the bottom of my heart, \
I thank all those who gives me much help like the brightest stars \
even in the darkest time!").pack()
lb_refrences1 = Label(wd_about,
text="帮助 & 支持: https://www.cnblogs.com/DawnNeon",
fg="blue",
cursor="star",
font=("微软雅黑", 9, "underline"))
lb_refrences2 = Label(wd_about, text="https://blog.csdn.net/Dawn_Neon",
fg="blue",
cursor="star",
font=("微软雅黑", 9, "underline"))
Label(wd_about, font=("宋体", 13), text="更新内容:\n1. 增加禁用遮罩图片时设定生成的词云图片尺寸", justify="center").pack()
lb_refrences1.pack()
lb_refrences2.pack