python:wordcloud
# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/28 22:10 # User : geovindu # Product : PyCharm # Project : Pysimple # File : stylecloud_full.py import os import re import random import numpy as np import jieba import pandas as pd from io import BytesIO from PIL import Image from cairosvg import svg2png from wordcloud import WordCloud from palettable import palette as palettable_palette from fa6_icons import svgs DEFAULT_FONT_PATH None # FontAwesome 图标处理 def _get_fa_svg(icon_name: str) - str: parts icon_name.strip().split() if len(parts) ! 2: raise ValueError(icon_name格式示例: fas fa-heart) style, name parts style_map {fas: solid, far: regular, fab: brands} if style not in style_map: raise ValueError(f不支持的样式: {style}) style_name style_map[style] name name.replace(fa-, ).replace(-, _) try: svg_data str(getattr(svgs, name).get(style_name)) if not svg_data: raise ValueError(f图标 {icon_name} 不存在) return svg_data except Exception as e: raise RuntimeError(f图标 {icon_name} 获取失败请检查名称) from e def _fa_icon_to_mask(icon_name: str, size: int 512) - np.ndarray: svg_text _get_fa_svg(icon_name) svg_text re.sub(rwidth\d, fwidth{size}, svg_text) svg_text re.sub(rheight\d, fheight{size}, svg_text) png_bytes svg2png(bytestringsvg_text.encode(), output_widthsize, output_heightsize) img Image.open(BytesIO(png_bytes)).convert(L) arr np.array(img) mask np.where(arr 128, 255, 0).astype(np.uint8) return mask # 停用词 脏数据清理 def _load_stopwords(filepath: str None) - set: stopwords set() if filepath and os.path.exists(filepath): with open(filepath, r, encodingutf-8) as f: for line in f: w line.strip() if w: stopwords.add(w) return stopwords def _is_useless_single_char(word: str) - bool: 自动清理无意义单字、标点、数字 if len(word) ! 1: return False # 单字黑名单标点、数字、常见无意义单字 useless_chars r。【】{}、·~!#$%^*()_-|\/0123456789 return word in useless_chars def _filter_stopwords(word_list: list, stopwords: set) - list: result [] for w in word_list: w w.strip() if not w: continue if w in stopwords: continue if _is_useless_single_char(w): continue result.append(w) return result # CSV词频读取接口 新增 def load_wordfreq_from_csv(csv_path: str, word_colword, freq_colfreq) - dict: 读取csv词频文件 :param csv_path: csv路径 :param word_col: 词汇列名 :param freq_col: 频次列名 :return: {词汇:频次} df pd.read_csv(csv_path, encodingutf-8) df df.dropna(subset[word_col, freq_col]) word_freq {} for _, row in df.iterrows(): word str(row[word_col]).strip() freq int(row[freq_col]) if not _is_useless_single_char(word): word_freq[word] freq return word_freq # 配色函数 def _get_palette_color_func(palette_name: str, random_state): import palettable parts palette_name.split(.) obj palettable for part in parts: obj getattr(obj, part) colors_rgb obj.colors def color_func(word, font_size, position, orientation, random_staterandom_state, **kwargs): idx random_state.randint(len(colors_rgb)) r, g, b colors_rgb[idx] return frgb({r},{g},{b}) return color_func # 文本预处理 def _process_text( text: str None, text_path: str None, word_freq: dict None, csv_path: str None, stopwords: set None, is_chinese: bool True ) - str | dict: # 优先读取CSV词频 if csv_path is not None: word_freq load_wordfreq_from_csv(csv_path) if stopwords: word_freq {k: v for k, v in word_freq.items() if k not in stopwords} return word_freq if word_freq is not None: if stopwords: word_freq {k: v for k, v in word_freq.items() if k not in stopwords} return word_freq if text_path and os.path.exists(text_path): with open(text_path, r, encodingutf-8) as f: raw f.read() elif text: raw text else: raise ValueError(text / text_path / word_freq / csv_path 必须传入其一) if is_chinese: words jieba.lcut(raw) else: words raw.split() if stopwords: words _filter_stopwords(words, stopwords) return .join(words) # 核心API gen_stylecloud def gen_stylecloud( text: str None, text_path: str None, word_freq: dict None, csv_path: str None, # 新增csv词频文件 icon_name: str None, mask_img: np.ndarray None, palette: str None, background_color: str white, transparent_bg: bool False, # 新增开启透明背景PNG font_path: str DEFAULT_FONT_PATH, output_name: str stylecloud.png, size: tuple (512, 512), max_font_size: int 200, scale: float 2, prefer_horizontal: float 0.7, random_state: int 42, contour_width: float 0, contour_color: str #333333, is_chinese: bool True, stopwords_path: str None, ): rng np.random.RandomState(random_state) stopwords _load_stopwords(stopwords_path) if stopwords_path else None mask mask_img if mask is None and icon_name is not None: mask _fa_icon_to_mask(icon_name, sizesize[0]) processed_data _process_text( texttext, text_pathtext_path, word_freqword_freq, csv_pathcsv_path, stopwordsstopwords, is_chineseis_chinese ) # 透明背景时强制背景为None bg_color None if transparent_bg else background_color wc WordCloud( widthsize[0], heightsize[1], font_pathfont_path, background_colorbg_color, maskmask, max_font_sizemax_font_size, scalescale, prefer_horizontalprefer_horizontal, contour_widthcontour_width, contour_colorcontour_color, random_staterng ) if isinstance(processed_data, dict): wc.generate_from_frequencies(processed_data) else: wc.generate(processed_data) if palette is not None: color_func _get_palette_color_func(palette, rng) wc.recolor(color_funccolor_func, random_staterng) # 保存 wc.to_file(output_name) print(f✅ 生成完成: {output_name}) return wc # 【批量生成脚本】主入口 if __name__ __main__: # 配置区域 FONT rC:\Windows\Fonts\STXIHEI.TTF OUTPUT_DIR ./batch_output os.makedirs(OUTPUT_DIR, exist_okTrue) test_text 人工智能 大模型 Python 数据分析 词云 机器学习 深度学习 NLP 计算机视觉 向量数据库 Agent RAG 云计算 大数据 算法 开发 编程 架构 # 批量循环配置 # 1. 多种FontAwesome图标 icon_list [ fas fa-heart, fas fa-code, fas fa-star, fas fa-globe, fas fa-lightbulb ] # 2. 多种配色方案 palette_list [ cartocolors.diverging.TealRose_7, colorbrewer.qualitative.Set2_8, colorbrewer.qualitative.Dark2_8, matplotlib.Viridis_10 ] # 批量循环生成 idx 1 for icon in icon_list: for palette in palette_list: out_file os.path.join(OUTPUT_DIR, fcloud_{idx}_{icon.split()[-1]}_{palette.split(.)[-1]}.png) gen_stylecloud( texttest_text, font_pathFONT, icon_nameicon, palettepalette, background_colorblack, transparent_bgFalse, output_nameout_file, is_chineseTrue, prefer_horizontal0.6 ) idx 1 # 独立测试示例 # 示例1CSV词频文件读取 # gen_stylecloud( # csv_pathword_freq.csv, # font_pathFONT, # icon_namefas fa-star, # transparent_bgTrue, # output_nametransparent_cloud.png # ) # 示例2透明背景PNG # gen_stylecloud( # texttest_text, # font_pathFONT, # icon_namefas fa-heart, # transparent_bgTrue, # palettecolorbrewer.qualitative.Set2_8, # output_nametransparent_heart.png # )# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/28 23:19 # User : geovindu # Product : PyCharm # Project : Pysimple # File : wordcloudchinesemask.py from os import path from PIL import Image import numpy as np import matplotlib.pyplot as plt import os import jieba # 新增中文分词库 from wordcloud import WordCloud, STOPWORDS from matplotlib import font_manager def list_all_fonts(): font_dir rC:\Windows\Fonts ext (.ttf, .ttc) for filename in os.listdir(font_dir): if filename.lower().endswith(ext): full_path os.path.join(font_dir, filename) print(f{filename:20} {full_path}) # list_all_fonts() # get data directory d path.dirname(__file__) if __file__ in locals() else os.getcwd() # 1.读取中文文本 # 把 alice.txt 替换成你的中文文本文件 text_raw open(path.join(d, alice2.txt), encodingutf-8).read() # 2.中文分词拼接空格wordcloud要求词语用空格隔开 word_list jieba.lcut(text_raw) text .join(word_list) # 3.蒙版图片不变依然可以使用alice_mask.png alice_mask np.array(Image.open(path.join(d, alice_mask.png))) # 停用词中英文都可以加 stopwords set(STOPWORDS) stopwords.update([工作, 就是, 个人, 没有, 村民委员会, said]) # 4.关键增加 font_path 指定中文字体 # Windows 黑体rC:\Windows\Fonts\simhei.ttf # Windows 宋体rC:\Windows\Fonts\simsun.ttc # Mac/System/Library/Fonts/PingFang.ttc # Linux/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc wc WordCloud( background_colorwhite, max_words2000, maskalice_mask, stopwordsstopwords, contour_width3, contour_colorsteelblue, font_pathrC:\Users\geovindu\AppData\Local\Microsoft\Windows\Fonts\方正小篆体.ttf # 必须配置中文路径 方 STXIHEI.TTF FZSTK FZYTK ) # generate word cloud wc.generate(text) # store to file wc.to_file(path.join(d, chinese_wordcloud2.png)) # show plt.imshow(wc, interpolationbilinear) plt.axis(off) plt.figure() plt.imshow(alice_mask, cmapplt.cm.gray, interpolationbilinear) plt.axis(off) plt.show()

相关新闻

外卖CPS高佣金结算场景:Java基于Disruptor实现百万级返利订单的异步处理

外卖CPS高佣金结算场景:Java基于Disruptor实现百万级返利订单的异步处理

外卖CPS高佣金结算场景:Java基于Disruptor实现百万级返利订单的异步处理 在外卖CPS(Cost Per Sale)返利业务中,尤其是在“霸王餐”等高佣金结算场景下,系统常常面临瞬时流量洪峰的考验。例如,在大型促销活动…

2026/7/29 0:18:29 阅读更多 →
美团开放平台API接口深度适配:Java后端处理外卖回调通知的幂等性设计方案

美团开放平台API接口深度适配:Java后端处理外卖回调通知的幂等性设计方案

美团开放平台API接口深度适配:Java后端处理外卖回调通知的幂等性设计方案 在对接美团开放平台API构建外卖返利或霸王餐系统时,处理来自美团的异步回调通知是核心环节。无论是订单状态更新、用户授权成功还是退款通知,美团服务器都可能在网络不…

2026/7/29 0:18:29 阅读更多 →
网络安全事件响应实战:从入侵检测到溯源取证

网络安全事件响应实战:从入侵检测到溯源取证

1. 网络安全事件响应实战解析:中职组Server2215攻防演练去年带队参加省级职业院校网络安全竞赛时,我们抽到的Server2215靶机至今让我记忆犹新。这台被植入木马的数据库服务器,完整呈现了从攻击痕迹识别到溯源取证的典型事件响应流程。现在把当…

2026/7/29 0:18:29 阅读更多 →

最新新闻

Adomate 自动化测试快速入门指南

Adomate 自动化测试快速入门指南

前言 Adomate 作为数据驱动的广告创意生成平台,可对接 Meta 广告账户、广告素材库、Trustpilot 与 Amazon 用户评论,自动化构建创意研究工作流并生成可追溯的品牌化广告方案。随着平台功能快速迭代,手工回归测试成本持续升高,引入 UI 自动化测试成为保障交付质量、提升验证…

2026/7/29 0:30:33 阅读更多 →
终极散热解决方案:TCC-G15如何让Dell游戏本告别高温降频困扰

终极散热解决方案:TCC-G15如何让Dell游戏本告别高温降频困扰

终极散热解决方案:TCC-G15如何让Dell游戏本告别高温降频困扰 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 面对Dell G15笔记本在游戏或高负载任务…

2026/7/29 0:30:33 阅读更多 →
如何用Photon光影包打造电影级Minecraft视觉体验:终极配置指南

如何用Photon光影包打造电影级Minecraft视觉体验:终极配置指南

如何用Photon光影包打造电影级Minecraft视觉体验:终极配置指南 【免费下载链接】photon A gameplay-focused shader pack for Minecraft 项目地址: https://gitcode.com/gh_mirrors/photon3/photon Photon光影包是一款专注于游戏体验的Minecraft着色器包&…

2026/7/29 0:30:32 阅读更多 →
数字人视频制作拆解:从迈出第一步到生成视频,到底需要几步?

数字人视频制作拆解:从迈出第一步到生成视频,到底需要几步?

数字人已经不新鲜,但制作数字人对很多人来说还是很新鲜,因为迈出第一步就很难。大多数人第一次接触数字人时会有个疑问:真有那么简单?拍一段视频发上去,平台就能把它变成能说话、能换文案的数字人?就能反反…

2026/7/29 0:29:32 阅读更多 →
如何用Python工具3分钟找回QQ空间全部历史说说

如何用Python工具3分钟找回QQ空间全部历史说说

如何用Python工具3分钟找回QQ空间全部历史说说 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾试图找回那些年在QQ空间写下的青春记忆,却发现平台只显示最近的内容&…

2026/7/29 0:29:32 阅读更多 →
如何在Windows电脑上直接安装APK文件:终极指南

如何在Windows电脑上直接安装APK文件:终极指南

如何在Windows电脑上直接安装APK文件:终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想要在Windows电脑上直接运行安卓应用,告别模拟器…

2026/7/29 0:29:32 阅读更多 →

日新闻

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻