Python-基于PyQt5,wordcloud,pillow,numpy,os,sys等的智能词云生成器(最终版)

embedded/2025/2/4 4:33:20/

前言:日常生活中,我们有时后就会遇见这样的情形:我们需要将给定的数据进行可视化处理,同时保证呈现比较良好的量化效果。这时候我们可能就会用到词云图。词云图(Word cloud)又称文字云,是一种文本数据的图片视觉表达方式,一般是由词汇组成类似云的图形,用于展示大量文本数据。词云这个概念首先是由美国西北大学新闻学副教授、新媒体专业主任里奇·戈登提出的,通常用于描述网站上的关键字元数据(标签),或可视化自由格式文本。“词云”就是通过形成“关键词云层”或“关键词渲染”,对网络文本中出现频率较高的“关键词”的视觉上的突出,每个词的重要性以字体大小或颜色显示。今天,我们就一起来学习如何利用Python制作一个简单的智能词云生成器。与上次不同的是,我们这次将给原程序扩展额外功能-从文本文件中提取文本数据(包括纯文本文件(TXT文件),PDF文件Word文件)以及智能推荐词云背景色-从形状图片中提取主要颜色,并将其用于智能背景色推荐。

编程思路:本次编程我们将会调用到调用到wordcloud,PyQt5,pillow(PIL),numpy,sys,os,pytesseract,docx,pdfplumber,colorthief等库。其中,wordcloud是本次编程的主体,它可以指定词云的形状,颜色,字体,背景等,帮助我们轻松地生成美观、直观的词云。PyQt5被用于创建一个图形用户界面,包括按钮、文本框、标签、布局管理器,颜色拾取器等组件,以及处理用户交互和事件,它将在词云生成的功能与用户界面相结合方面会很有用。pillow是Python的一个很重要的图像处理库,它被用于读取我们选择好的词云的形状图片,并将其转换为numpy数组,以便在生成词云时使用。numpy则负责进行数据处理(包括我们输入的文本以及传入的图片等信息)。sysos将会帮助我们与Python解释器(PyCharm)进行交互,以及控制程序的执行,并对系统文件进行相关操作。与上次相比,我们导入了新的库:pytesseract,它可以将图像中的文字转换为字符串,从而实现了对扫描版PDF文件的文字提取。pdfplumber让我们可以很方便地从 PDF 文件中提取文本内容(包括普通的文本型PDF和扫描版的PDF)。docx是Python的一个很强大的文本文件处理库,有了docx 库,我们可以方便地从docx文件(扩展名为.docx)中提取文本内容,并将其显示在文本编辑框中。最后,我们还将会用到colorthief,它将帮助我们从形状图片中提取主要颜色,并将其用于智能背景色推荐。

第一步:导入库

标准库:sys,os。

第三方库:PyQt5,pillow(PIL),wordcloud,numpy,docx,pdfplumber,pytesseract,colorthief。

python">#导入必要库
import sys
import os
import numpy as np
from PIL import Image
from wordcloud import WordCloud
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt, QSettings
import docx
import pdfplumber
import pytesseract
from colorthief import ColorThief

第二步:创建预定义颜色列表

这里我们需要创建一个预定义颜色列表,其中包含50种一般的颜色代表的RGB值,供用户在后续颜色菜单栏中自由选择词云图背景颜色。

python"># 预定义颜色列表(50种常见颜色)
COLOR_PRESETS = ["#FFFFFF", "#000000", "#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#00FFFF", "#FF00FF","#C0C0C0", "#808080", "#800000", "#808000", "#008000", "#800080", "#008080", "#000080","#FFA07A", "#FF7F50", "#FF4500", "#FFD700", "#FF8C00", "#FF69B4", "#FF1493", "#C71585","#DB7093", "#FFC0CB", "#FFB6C1", "#FFA500", "#FF6347", "#FFE4E1", "#FFF0F5", "#FAEBD7","#F5F5DC", "#F0FFF0", "#F0FFFF", "#F0E68C", "#FFFACD", "#E6E6FA", "#DDA0DD", "#D8BFD8","#DA70D6", "#BA55D3", "#9370DB", "#8A2BE2", "#7B68EE", "#6A5ACD", "#483D8B", "#4169E1","#00BFFF", "#1E90FF", "#87CEEB", "#87CEFA", "#ADD8E6", "#B0C4DE", "#5F9EA0", "#4682B4"]

第三步:创建内部功能类

我们用PyQt5库创建了一个功能丰富的GUI类(词云生成器类),允许用户选择形状图片、输入文本内容、选择字体文件、生成词云并保存生成的词云图片。在词云生成器类这个类中,我们创建了总共19个函数(初始化函数,UI初始化函数,系统图片文件夹获取函数,词云形状图片加载函数,字体文件选择函数,词云生成核心逻辑函数和词云图片保存函数等),它们将执行各自的功能,共同完成生成词云图的工作。值得一提的是,相比于上次的代码,本次扩展了8个函数,其功能围绕从创建颜色拾取器,识别形状图片颜色以提供智能背景色推荐等功能展开。

python">#创建词云生成器类
class WordCloudGenerator(QWidget):#初始化函数def __init__(self):super().__init__()self.mask_image = Noneself.font_path = Noneself.bg_color = "#FFFFFF"self.temp_path = self.get_pictures_path()self.settings = QSettings("WordCloudApp", "Settings")self.initUI()self.load_settings()#初始化UI函数def initUI(self):# 主布局main_layout = QHBoxLayout()# 左侧面板left_panel = QVBoxLayout()# 文件导入按钮self.import_btn = QPushButton('导入文本文件(txt/docx/pdf(支持OCR识别))', self)self.import_btn.clicked.connect(self.import_text)# 形状图片选择self.image_btn = QPushButton('选择形状图片', self)self.image_btn.clicked.connect(self.load_image)# 图片预览self.image_preview = QLabel('图片预览区域')self.image_preview.setFixedSize(300, 300)self.image_preview.setFrameShape(QFrame.Box)self.image_preview.setAlignment(Qt.AlignCenter)# 颜色选择区域color_layout = QHBoxLayout()self.color_label = QLabel('背景颜色设置:')self.color_combo = QComboBox()self.color_combo.addItems(COLOR_PRESETS)self.color_combo.setEditable(True)self.color_combo.currentTextChanged.connect(self.update_bg_color)# 颜色拾取按钮self.color_picker_btn = QPushButton("颜色拾取", self)self.color_picker_btn.clicked.connect(self.pick_color)# 颜色预览self.color_preview = QLabel()self.color_preview.setFixedSize(50, 30)self.color_preview.setFrameShape(QFrame.Box)color_layout.addWidget(self.color_label)color_layout.addWidget(self.color_combo)color_layout.addWidget(self.color_picker_btn)color_layout.addWidget(self.color_preview)# 智能配色复选框self.auto_color_cb = QCheckBox("智能背景色推荐(根据图片背景色)", self)self.auto_color_cb.stateChanged.connect(self.toggle_auto_color)# 文本输入框self.text_edit = QTextEdit()self.text_edit.setPlaceholderText("在此输入文本内容,或使用上方按钮导入文件...")# 字体选择self.font_btn = QPushButton('选择字体文件(存在中文字体时需要)', self)self.font_btn.clicked.connect(self.select_font)# 生成按钮self.generate_btn = QPushButton('生成词云', self)self.generate_btn.clicked.connect(self.generate_wordcloud)# 保存按钮self.save_btn = QPushButton('保存词云', self)self.save_btn.clicked.connect(self.save_wordcloud)# 添加左侧组件left_panel.addWidget(self.import_btn)left_panel.addWidget(self.image_btn)left_panel.addWidget(self.image_preview)left_panel.addLayout(color_layout)left_panel.addWidget(self.auto_color_cb)left_panel.addWidget(QLabel('输入文本:'))left_panel.addWidget(self.text_edit)left_panel.addWidget(self.font_btn)left

http://www.ppmy.cn/embedded/159368.html

相关文章

6.进程的使用方式

6.进程的使用方式 **1. 父子进程的关系****2. 进程的终止****3. 僵尸进程和孤儿进程****4. 进程资源回收****5. exec 函数族****6. system 函数****7. 练习与作业****8. 进程的退出状态****9. 进程的清理函数****10. 总结** 1. 父子进程的关系 子进程是父进程的副本&#xff1…

国产之光DeepSeek架构理解与应用分析

目录 初步探索DeepSeek的设计 一、核心架构设计 二、核心原理与优化 三、关键创新点 四、典型应用场景 五、与同类模型的对比优势 六、未来演进方向 从投入行业生产的角度看 一、DeepSeek的核心功能扩展 二、机械电子工程产业中的具体案例 1. 预测性维护(Predictive…

用结构加法3ax+1预测第4点的分布

有1个点在19*19的平面上在某种力的作用下运动,轨迹为 共移动了90步,按照(0,1,2,3),(1,2,3,4),…,&…

TypeScript语言的语法糖

TypeScript语言的语法糖 TypeScript作为一种由微软开发的开源编程语言,它在JavaScript的基础上添加了一些强类型的特性,使得开发者能够更好地进行大型应用程序的构建和维护。在TypeScript中,不仅包含了静态类型、接口、枚举等强大的特性&…

Alibaba开发规范_编程规约之集合框架:最佳实践与常见陷阱

文章目录 引言1. hashCode与equals方法的覆写1.1 规则1.2 解释1.3 代码示例正例反例 2. ArrayList的subList方法2.1 规则2.2 解释2.3 代码示例正例反例 3. Map的keySet、values和entrySet方法3.1 规则3.2 解释3.3 代码示例正例反例 4. Collections类返回的不可变集合4.1 规则4.…

【实践】基于SakuraLLM的离线日文漫画及视频汉化

介绍 LLM 大型语言模型(英语:large language model,LLM),也称大语言模型,是由具有大量参数(通常数十亿个权重或更多)的人工神经网络组成的一类语言模型。在进行语言理解与分析&…

3 Flink 运行架构

3 Flink 运行架构 1. Flink 程序结构2. Flink 并行数据流3. Task 和 Operator chain4. 任务调度与执行5. 任务槽和槽共享 1. Flink 程序结构 Flink 程序的基本构建块是流和转换(请注意,Flink 的 DataSet API 中使用的 DataSet 也是内部流 )。…

react redux监测值的变化

现在想了解如何在React Redux中监测值的变化。他们之前已经讨论过使用useSelector来获取状态,但可能对如何有效监听状态变化的具体方法还不够清楚。需要回顾之前的对话,看看用户之前的需求是什么。 用户之前的问题涉及将Vue的响应式设备检测代码转换为Re…