news 2026/11/2 7:40:46

Python词云制作教程:wordcloud+jieba中文分词与七案例交付

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python词云制作教程:wordcloud+jieba中文分词与七案例交付

简介:面向文本挖掘与数据可视化初学者及中级 Python 用户的词云实践教程,围绕个性化词云的完整生成流程展开,帮助读者掌握从文本预处理、词频或 TF-IDF 权重计算,到用 wordcloud 与 matplotlib 出图、展示和保存的关键方法。压缩包共 1 个 PDF 文件,大小约 2.07MB,内容以图文讲解配合代码示例呈现,便于按章节系统阅读。教程设置 7 个递进案例,从最简调用到中文分词、蒙版形状、自定义配色及关键词与权重提取,并附运行结果和环境版本说明;同时讲解停用词过滤、字体路径与背景色设置、中文分词必要性等易错点,可对照复现常见词云效果并迁移到报告、数据分析或社交媒体文本展示中。目前已有 109 人学习下载,适合希望用案例快速入门并查漏补缺的读者。

1. 从一份语料到七张成图:这套 python 词云方案要解决的其实是交付问题

很多人第一次做文本可视化,本能反应是先统计词频、画柱状图、截图贴进报告——图是有了,但答辩时被问一句「你想表达什么」就卡壳。词云反过来:几十万字压成一张图,出现得越多的词越大,观众三秒就能抓住主线。这份 python 词云完整教程用 7 个案例把整条链路拆开——读文本、处理中文编码、分词、加蒙版、取色、提关键词权重、导出成图,案例之间是递进关系,不是七个孤立的 demo。它面向两类人:要交一份能跑通的 python 课程资源的学生,和需要在分析报告里放一张真正能看的图的从业者。下面按「选型 → 总体设计 → 逐案实现 → 避坑 → 验收」把这份资源拆成一份可照搬的方案。

2. 环境与依赖选型:wordcloud、matplotlib、jieba 的三层分工

2.1 版本锁定与虚拟环境

这套教程给出的环境是 python 3.7 + wordcloud 1.9.3 + matplotlib 3.5.3,编辑器用 PyCharm。这三个数字看起来只是记录,实际上决定了后面七个案例能不能一次跑通。wordcloud 的底层依赖是 pillow 和 numpy,1.9.x 系列在 3.7 上的轮子(wheel)是齐全的;matplotlib 3.5.3 是 3.7 上比较稳的一档,再往上抬版本就会开始要求更高的 python,pip install时会退化成源码编译,在没装编译器的机器上直接失败。

所以第一步不是写代码,是把依赖钉死在一个独立环境里:

# 在项目根目录下创建虚拟环境,避免污染全局 python python -m venv wcenv # 激活(Linux / 类 Unix) source wcenv/bin/activate # 如果是另一类操作系统,用 wcenv\Scripts\activate # 按教程给出的版本一次性装齐,== 是硬约束,不要省略 pip install wordcloud==1.9.3 matplotlib==3.5.3 jieba==0.42.1 pillow numpy

pip install里用==而不是直接写包名,是因为词云这类小项目最容易死在「昨天还能跑、今天重装就报错」上。版本号写死之后,requirements.txt也就是顺手的事——把上面那行命令里的包名和版本抄进去即可。jieba本身是纯 python 包,版本约束没那么敏感,但既然要交课程设计或毕设,依赖表里少一行都算文档不完整。

装完之后跑一句验证,比打开编辑器看 import 有没有红线可靠得多:

# 一次性导入四个关键依赖并打印版本,确认环境符合预期 import wordcloud, matplotlib, jieba, PIL print('wordcloud :', wordcloud.__version__) print('matplotlib:', matplotlib.__version__) print('jieba :', jieba.__version__) print('pillow :', PIL.__version__)

四个版本号都打印出来且和预期一致,说明环境这一关过了。如果 wordcloud 报ImportError: cannot import name 'WordCloud',八成是装了个同名的空壳包或者安装过程被中断过,pip uninstall wordcloud再重装即可,这是踩过不止一次的坑。

2.2 三个库各管一段,别互相越界

初学者最容易把这三个库用乱:以为 jieba 也能画图,或者以为 matplotlib 能直接读中文文本。实际分工很清楚,记住一句话就够了——jieba 负责「切」,WordCloud 负责「画」,matplotlib 负责「显」。

jieba 的角色是文本切分与关键词权重。中文不像英文有空格天然分隔,不切词直接喂给 WordCloud,它只会按空格切,结果整段中文变成一个大 token,词云里就孤零零几个词甚至只有一个。jieba 提供三种分词模式,教程里用的是最常用的精确模式jieba.cut(text):试图把句子按最合理的方式切开,适合词云这种要求「词有意义」的场景。另外两种是全模式(把所有可能成词的都扫出来,快但歧义多)和搜索引擎模式(在精确模式基础上对长词再切,适合建索引)。做词云,精确模式加默认词典基本够用。

WordCloud 的角色是布局与合成。generate(text)这一行内部干了很多事:按空格把文本切成 token、统计词频、按画布尺寸做碰撞检测排布、用 PIL 把每个词画上去、最后返回一个 WordCloud 对象。注意它返回的不是 PIL Image,而是自己——这个对象实现了数组接口,所以能直接塞进plt.imshow()。

matplotlib 的角色是显示、坐标轴控制与图形管理。它只负责把 WordCloud 对象当成一张图渲染出来。plt.axis('off')去掉坐标轴刻度是词云图的基本礼貌,带刻度的词云图在报告里一眼就显得外行。真正落到文件则不需要 matplotlib 参与,WordCloud 自带to_file()。

提示:plt.show()和wc.to_file()是两条独立的路,前者把图送到屏幕(或编辑器内嵌窗口),后者直接写磁盘。答辩用的图一定要走 to_file,show()出来的东西在切换到下一张图时会消失。

2.3 目录约定:语料、字体、蒙版、输出分开放

七个案例会用到四类外部文件:文本语料、中文字体、蒙版图片(黑色形状图和彩色取色图)、输出图片。混在一个目录里跑,第一天还行,第三天自己都分不清哪张是蒙版哪张是结果。我一般会这样摆:

wordcloud-demo/ ├── data/ # 语料 │ └── novel.txt ├── fonts/ # 中文字体文件 │ └── your_font.ttf ├── masks/ # 蒙版图 │ ├── black_mask.png # 黑底白形,决定形状 │ └── color_mask.png # 彩色原图,决定配色 ├── output/ # 生成的词云图 └── cases/ # 七个案例脚本

四个目录各自独立的好处,不光是整洁。案例 04 到 07 都依赖masks/,如果蒙版和输出图同名同目录,to_file('main_4.png')覆盖掉蒙版是分分钟的事,而蒙版一旦被覆盖,后面三个案例全部失效,这种翻车在赶 due 的夜里格外致命。目录先立住,再动代码。

3. 总体设计:四段流水线把「一坨文本」变成「一张图」

3.1 预处理层:编码、标点、停用词

词云的质量九成取决于预处理,而不是WordCloud()里的参数。这一层要做四件事,顺序不能乱。

第一是编码。中文语料几乎不可能是 ASCII,open()不带encoding参数时会用系统默认编码打开,在某些环境下直接抛UnicodeDecodeError。教程里七个案例统一用with open(path, 'r', encoding='utf-8') as f是标准写法,with顺便把文件句柄管好,避免长脚本里句柄泄漏。

第二是标点与噪声。词云里出现一堆「,」「。」「——」是典型的新手痕迹。jieba 分词后可以用正则把非中文字符滤掉,或者维护一个小型停用词表。停用词表不需要多权威,把自己语料里高频但无信息量的词(如「一个」「我们」「可以」)随手加进去就够用,几十个词的规模已经能明显改善成图效果。

第三是长度过滤。WordCloud 有min_word_length参数,默认对英文有效但对中文作用有限,更稳妥的做法是在预处理阶段用len(w) >= 2筛掉单字。中文单字成词的绝大多数是虚词或语气词,留在图里只会占地方。

第四是采样上限。max_words默认 200,对大语料来说完全够用。真要做全量,建议先统计词频取 topN,再走案例 07 那条generate_from_frequencies的路线,比让generate()自己数要可控。

3.2 权重层:词频、TF-IDF 与 extract_tags 三条路线

词云里字的大小对应权重,而权重的来源有三种,各自适用场景不同。

路线一:词频(默认)。generate(text)直接按出现次数定大小。优点是零成本,缺点是对长文本不公平——「的」「了」这类词天然高频,即使加了停用词,某些语义弱的词依然会占据视觉中心。适合语料干净、主题集中的场景。

路线二:TF-IDF。词频乘以逆文档频率,能压掉跨文档的通用词。问题在于单文档场景下 IDF 无从计算,除非你手上有语料集。所以教程的七个案例没有直接上 TF-IDF,这不是偷懒,是单文档做 TF-IDF 意义有限。

路线三:jieba.analyse.extract_tags。这是 jieba 内置的关键词提取,基于 TF-IDF 思路但内置了一份通用语料的 IDF 表,单文档也能跑。案例 07 用的就是它:extract_tags(text, topK=200, withWeight=True)返回[(词, 权重), ...]列表,权重是归一化后的小数,直接喂给generate_from_frequencies()就能出图。这条路线的实际收益很明显——图上留下的全是真正承载主题的名词和动词,虚词基本绝迹。

3.3 渲染层:mask、color_func 与 canvas 的执行顺序

渲染层有三个东西会互相影响:画布尺寸、蒙版、颜色函数。它们的作用顺序是固定的,理解了这个顺序,调参就不会瞎试。

mask一旦传入,画布的宽高就以蒙版的像素尺寸为准,此时再传width/height是无效的——这是案例 04 之后所有案例都不写尺寸的原因。蒙版要求是「白形黑底」的数组,词只往非黑区域填。np.array(Image.open(...))把 PIL 图转成三维数组(高、宽、通道),WordCloud 内部按亮度判断哪些像素可画。

color_func在布局完成之后逐个词调用,决定每个词的颜色。签名是func(word, font_size, position, orientation, font_path, random_state),返回一个颜色字符串。案例 06 用 HSL 拼随机色,就是在这个函数里返回hsl(0, 70%, 70%)这种格式。

recolor(color_func=...)是布局完成后的二次上色,案例 05 的ImageColorGenerator(mask)走的就是这条路:先用蒙版形状排好版,再按蒙版原图对应位置的颜色给每个词上色,效果是词的颜色和背景图色调融为一体。顺序反了就不生效,这是很多人卡住的地方。

3.4 关键参数与调参方向

参数作用默认调参方向
font_path中文字体文件路径无(英文默认字体)中文必填,否则全是方框
width/height画布尺寸400 × 200传了 mask 就失效
mask形状蒙版数组None白形黑底,决定轮廓
background_color背景色black配mode='RGBA'用 None 出透明底
max_words最多显示词数200语料大时上调到 500
min_font_size最小字号4图空时上调,图挤时下调
max_font_size最大字号自动想让主词更突出就限死
color_func逐词配色函数随机色自定义 HSL 或按蒙版取色
mode图像模式RGB透明背景配RGBA
contour_width轮廓线宽0加 2~4 会有描边感

这张表不需要背,调参时对着看就行。真正需要提前想清楚的是font_path和mask两项——它们决定了图能不能出、像不像样,其余参数属于打磨阶段的事。

4. 七个案例的递进实现:从五行代码到带权重的关键词图

4.1 案例 01:最小闭环,先把「跑通」这件事做掉

第一个案例的价值不在于效果,而在于用最短的代码验证环境、文件读取、出图三步都通。任何项目我都建议先做这一步,别一上来就蒙版加取色,出了错都不知道是哪一层的问题。

# -*- coding: utf-8 -*- from wordcloud import WordCloud import matplotlib.pyplot as plt # 1. 读语料,with 保证句柄释放 with open('data/sample_text.txt', 'r', encoding='utf-8') as f: text = f.read() # 2. 默认参数生成,先不管好看不好看 wc = WordCloud().generate(text) # 3. 交给 matplotlib 显示,关掉坐标轴 plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() # 4. 落盘,答辩用的就是这张 wc.to_file('output/wordcloud.png')

interpolation='bilinear'是插值方式,词云是位图,双线性插值能让缩略图看起来平滑一些;不写也能出图,只是放大时锯齿明显。这段代码的失败点只有一个:语料文件路径不对,报FileNotFoundError。所以文件路径要么用相对脚本的路径,要么干脆用os.path.join拼绝对路径。案例 01 用英文语料是刻意的,先不引入字体和分词两个变量,把黑匣子缩小到一个。

4.2 案例 02-03:中文的两个坎——字体与分词

案例 02 是第一道坎:中文塞进WordCloud()之后,图上一片方框。原因很直白,WordCloud 默认字体不含中文字形。解决方式是指定font_path指向一个真实存在的中文字体文件。

# -*- coding: utf-8 -*- # 中文不分词:只解决字体,不解决切词 from wordcloud import WordCloud import matplotlib.pyplot as plt with open('data/novel.txt', 'r', encoding='utf-8') as f: text = f.read() wc = WordCloud( font_path='fonts/your_font.ttf', # 必须指向真实存在的中文字体 width=800, height=600, # 画布尺寸,比默认值大一圈 mode='RGBA', # 支持透明通道 background_color=None # 背景透明,方便贴到 PPT 上 ).generate(text) plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() wc.to_file('output/main_2.png')

mode='RGBA'加background_color=None是一对组合,缺一个都出不来透明底:前者告诉 PIL 保留 alpha 通道,后者告诉 WordCloud 别填背景色。这套参数从案例 02 一直沿用到 07,是整份教程最实用的一个固定搭配。

不过案例 02 图出来的效果会让人失望——中文不分词的时候,WordCloud 按空格切,整段文本挤成极少数几个巨型 token,图基本是空的。这正是案例 03 要解决的问题。

# -*- coding: utf-8 -*- # 中文分词:在字体基础上补上切词 from wordcloud import WordCloud import matplotlib.pyplot as plt import jieba with open('data/novel.txt', 'r', encoding='utf-8') as f: text = f.read() # 精确模式切词,再用空格拼回去,WordCloud 才认得 text = ' '.join(jieba.cut(text)) print(text[:100]) # 打印前 100 字,肉眼确认切得对不对 wc = WordCloud( font_path='fonts/your_font.ttf', width=800, height=600, mode='RGBA', background_color=None ).generate(text) plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() wc.to_file('output/wordcloud.png')

' '.join(jieba.cut(text))这一行是整个教程的关键转折点:jieba 返回的是生成器,直接塞给 WordCloud 不认;用空格 join 成字符串后,WordCloud 的默认分词器按空格切,正好还原成词列表。中间那句print(text[:100])别删,它是唯一能低成本确认分词质量的窗口——如果打印出来是一堆单字,说明 jieba 词典没加载好;如果是长句没切开,检查是不是误用了全模式。

4.3 案例 04-06:蒙版形状、蒙版取色与自定义颜色函数

案例 04 开始进图形。核心是mask参数,需要一张「白形黑底」的图——形状部分为白色(或高亮度),其余为黑色。WordCloud 读取后只在亮区排词。

# -*- coding: utf-8 -*- from wordcloud import WordCloud from PIL import Image import numpy as np import matplotlib.pyplot as plt import jieba with open('data/novel.txt', 'r', encoding='utf-8') as f: text = f.read() text = ' '.join(jieba.cut(text)) # 蒙版转数组,注意是三通道 RGB mask = np.array(Image.open('masks/black_mask.png')) wc = WordCloud( mask=mask, # 传了 mask,width/height 自动失效 font_path='fonts/your_font.ttf', mode='RGBA', background_color=None ).generate(text) plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() wc.to_file('output/main_4.png')

这里有个隐式约束:蒙版图必须是 RGB 三通道。如果拿一张带 alpha 的 PNG 直接转数组,会得到四维(高、宽、4),WordCloud 处理时会出问题,稳妥的做法是打开时先Image.open(...).convert('RGB')。

案例 05 解决「颜色和形状不搭」的问题。用一张彩色原图做蒙版,形状来自它,配色也来自它:

# -*- coding: utf-8 -*- from wordcloud import WordCloud, ImageColorGenerator from PIL import Image import numpy as np import matplotlib.pyplot as plt import jieba with open('data/novel.txt', 'r', encoding='utf-8') as f: text = f.read() text = ' '.join(jieba.cut(text)) mask = np.array(Image.open('masks/color_mask.png').convert('RGB')) wc = WordCloud( mask=mask, font_path='fonts/your_font.ttf', mode='RGBA', background_color=None ).generate(text) # 关键一步:布局完成后再按原图取色重新上色 image_colors = ImageColorGenerator(mask) wc.recolor(color_func=image_colors) plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() wc.to_file('output/main_5.png')

ImageColorGenerator(mask)的逻辑是:对每个词所在的像素区域取平均色,作为这个词的颜色。所以蒙版原图里哪个区域偏红,落在那个区域的词就偏红。recolor()必须在generate()之后调用,顺序反了颜色不会生效——这一条我在第一次做的时候反复试了半小时才反应过来。

案例 06 把颜色控制权完全交出来,写一个自定义函数:

# -*- coding: utf-8 -*- from wordcloud import WordCloud from PIL import Image import numpy as np import matplotlib.pyplot as plt import random import jieba with open('data/novel.txt', 'r', encoding='utf-8') as f: text = f.read() text = ' '.join(jieba.cut(text)) def random_color(word, font_size, position, orientation, font_path, random_state): """逐词回调:返回 HSL 字符串,色相固定、饱和度和亮度在区间内抖动""" s = 'hsl(0, %d%%, %d%%)' % ( random.randint(60, 80), # 饱和度 60%~80% random.randint(60, 80) # 亮度 60%~80% ) return s mask = np.array(Image.open('masks/color_mask.png').convert('RGB')) wc = WordCloud( color_func=random_color, # 函数对象,不加括号 mask=mask, font_path='fonts/your_font.ttf', mode='RGBA', background_color=None ).generate(text) plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() wc.to_file('output/main_06.png')

回调函数的六个参数是固定签名,用不到的可以不管,但顺序不能改。色相写死成 0 是红色系,把第一个 0 改成random.randint(0, 360)就是全色域。color_func=random_color传的是函数对象本身,写成random_color()会在传参时立刻执行并返回一个字符串,WordCloud 拿到字符串当函数调用,直接报TypeError。

4.4 案例 07:用 extract_tags 拿权重,generate_from_frequencies 出图

最后一个案例把权重这条路走通,也是七个里最接近「能交付」的一个。

# -*- coding: utf-8 -*- from wordcloud import WordCloud, ImageColorGenerator from PIL import Image import numpy as np import matplotlib.pyplot as plt import jieba.analyse with open('data/novel.txt', 'r', encoding='utf-8') as f: text = f.read() # 直接对原始长文本提关键词,不需要先分词 freq = jieba.analyse.extract_tags(text, topK=200, withWeight=True) print(freq[:20]) # 先看一眼 top20 合不合理 freq = {i[0]: i[1] for i in freq} # 转成 dict,喂给下面的接口 mask = np.array(Image.open('masks/color_mask.png').convert('RGB')) wc = WordCloud( mask=mask, font_path='fonts/your_font.ttf', mode='RGBA', background_color=None ).generate_from_frequencies(freq) # 注意:不是 generate image_colors = ImageColorGenerator(mask) wc.recolor(color_func=image_colors) plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() wc.to_file('output/main_07.png')

extract_tags的topK=200控制返回词数,withWeight=True让它返回(词, 权重)二元组列表而不是纯词列表;权重是归一化后的小数,最大约 1。用字典推导式转成{词: 权重}之后调generate_from_frequencies,注意这个方法名和generate不同,它跳过分词和词频统计,直接按你给的权重建图。

这条路线相对前六个的优势是可控性:你能在print(freq[:20])这一步提前发现问题。如果 top20 里全是「说道」「一个」这类词,说明语料是叙事文本,需要补停用词;如果 top20 里有大量人名,说明词云会围绕角色展开,可以在报告里直接拿来说事。这张打印出来的列表本身就是分析结论的一部分,比一张图更有说服力。

5. 避坑与排查:五个最容易翻车的点

5.1 现象:中文全变成方框(豆腐块)

原因只有一个——font_path指向的字体不含中文字形,或者路径根本不存在(不存在时 WordCloud 会静默回退到默认字体,不报错,所以更难查)。

解决分两步:先确认文件真实存在,os.path.exists(font_path)打印一下;再确认这份字体覆盖了中文。最稳的方式是直接拿系统里任意一款已知支持中文的字体文件复制到fonts/目录下,路径写相对路径。

注意:字体文件缺失时不会抛异常,只会静静出一张满是方框的图。所以字体路径要放在第一个被验证的位置,而不是等到出图之后才回头怀疑。

5.2 现象:中文被一个字一个字拆开,图上全是单字

原因是漏了' '.join(jieba.cut(text))这一步,或者jieba.cut的结果直接传给了WordCloud()。WordCloud 收到生成器对象时不会报错,它会把文本转成字符串再按空格切,结果就是一个中文字符一个 token。

解决就是补上 join。补完之后立刻print(text[:100])验证,切得对不对肉眼一看便知。如果 join 了还是单字,检查是不是误用了jieba.cut(text, cut_all=True)全模式。

5.3 现象:蒙版形状不生效,词还是铺满整个矩形

三种可能:蒙版不是白形黑底(比如做成了黑形白底,WordCloud 会认为是全黑,一个词都放不下或者报错);蒙版是 RGBA 四通道,np.array出来形状不对;同时传了mask和width/height,尺寸被画布参数干扰。

解决:打开蒙版图convert('RGB')再转数组;把蒙版图的形状部分做成纯白(255,255,255)、背景纯黑(0,0,0),别用灰色过渡;传了 mask 就把 width/height 删掉。

5.4 现象:要求透明背景,保存出来却是黑底或者白底

原因是mode和background_color没有配对。只写background_color=None而mode还是默认的RGB,PIL 没有 alpha 通道可存,透明会被填成黑色;只写mode='RGBA'不写background_color=None,背景会被填成默认的黑。

解决:两个参数一起给。另外要确认输出格式是 PNG,JPEG 不支持透明,存成 jpg 透明区域一律变白。

5.5 现象:报ValueError: We need at least 1 word to plot a word cloud

这条报错的意思是分词之后一个可用的词都没有。常见于三种情况:语料文件路径错了,读进来是空字符串;编码read 成乱码,jieba 切不出有效词;stopwords或者min_word_length过滤得太狠,把词全筛掉了。

解决:在generate之前加一行print(len(text), text[:100]),长度是 0 就查路径,长度正常但全是乱码就查 encoding,长度和内容都对就临时去掉所有过滤参数跑一遍,确认是哪个参数筛多了。这个报错虽然吓人,但定位路径是最清晰的,先看 print 就不会瞎猜。

6. 验收与答辩:怎么证明这套词云方案是真的跑通了

七个案例跑完,截图存了一堆,但答辩或交付时被问「你这个方案完成度如何」,光有图答不上来。我的做法是准备一张验收表,逐项自查,也直接给评审看。

验收项检查方法合格线
环境可复现新建虚拟环境,按requirements.txt重装一条命令装完,无编译报错
中文渲染案例 02 出图没有一个方框,字形完整
分词质量打印text[:100]输出是词,不是单字串
蒙版生效案例 04 出图词严格落在形状轮廓内
取色一致案例 05 出图词色与蒙版原图色调对应
透明背景输出 PNG 拖进深色背景边缘无白边、无黑框
权重可控案例 07 打印 top20前 20 词能用人话说出主题

这张表的关键在于每一项都对应一个「可执行的检查动作」,而不是「看起来不错」。比如「透明背景」这一项,我会把 PNG 直接拖进一个深色底的 PPT 页面里看一眼,白边和黑框立刻现形;比如「权重可控」,我会拿 top20 列表在报告里写一段结论,写不出来就说明提取的词有问题,得回去调停用词。

答辩环节还有一步容易被忽略:现场改一个参数再跑一遍。评审问「如果语料换成另一本书,你要改什么」,标准答案是只改data/下的文件路径和topK,其余代码不动。为了证明这一点,可以现场把max_words从 200 改成 50 重跑案例 07,图会明显变稀疏——这一下比讲十句架构都管用。血泪经验是别现场演示第一次跑的代码,任何没在干净环境下重跑过的脚本都可能当场给你脸色看。

最后是一个习惯。从那以后我每次交图之前,都会在空白目录里从零跑一遍这七个案例,只信这一次输出的文件,不信之前目录里的任何截图。词云这种「玄学感」很强的可视化,参数改一行结果差很多,靠记忆拼凑出来的效果图十有八九和代码对不上,评审一追问就露馅。这套教程的七个案例、配套语料和蒙版图都打包在一起,照着目录结构摆好,从案例 01 一路跑到 07,那份验收表上的七项就能一次性打满勾,剩下的精力花在报告里怎么讲这张图,比反复调颜色划算得多。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/2 7:40:42

GSM全局感受野机制:DeepSeek-V4.1-Flash长文本推理优化实践

GSM 这个方法出来的时候,我正在折腾 DeepSeek-V4.1-Flash 的本地部署,当时第一反应是:Flash 都快成闪电了,还有必要再快吗?但真把长文本任务跑起来才发现,问题不在“快不快”,在于推理成本。上下…

作者头像 李华
网站建设 2026/11/2 7:40:27

CNN卫星导航实战:多径NLOS识别与干扰检测端侧部署

1. 为什么卫星导航圈开始认真对待CNN头几年在导航圈里提卷积神经网络,多数人的第一反应是"这玩意儿跟伪距解算有什么关系"。我最初接触这个方向时也带着同样的怀疑,直到在一次城市峡谷场景的实测中,看到同一段中频采样数据&#xf…

作者头像 李华
网站建设 2026/11/2 7:40:23

蓝牙网络仿真工具选型与应用指南

1. 蓝牙网络仿真工具概述在物联网和智能设备蓬勃发展的当下,蓝牙技术作为短距离无线通信的核心方案,其网络性能仿真成为产品开发和协议优化的关键环节。不同于简单的点对点测试,完整的蓝牙网络仿真需要模拟真实场景中的多设备交互、信道竞争和…

作者头像 李华
网站建设 2026/11/2 7:40:11

智能体开发进阶:多智能体协作与性能优化

1. 项目概述"hello_agent第九章总结"这个标题看起来像是一个技术文档或教程的章节总结,很可能来自某个编程框架、开发工具或AI代理相关的学习资料。从命名风格判断,这应该是一个关于智能体(agent)开发的系列教程中的第九章内容总结。在技术文档…

作者头像 李华
网站建设 2026/11/2 7:38:19

Axure字母分类选择器设计与实现指南

1. 字母分类选择器原型设计概述字母分类选择器是一种常见于移动端应用的交互控件,主要用于快速定位和选择大量数据项。这种设计模式最早出现在iOS通讯录中,后来被广泛应用于各类需要快速检索的场景。作为产品原型设计师,掌握这种高频率组件的…

作者头像 李华
网站建设 2026/11/2 7:37:54

Claude-code中Skill渐进式披露机制的设计与实现

1. Claude-code中的Skill渐进式披露机制解析第一次在Claude-code中看到"渐进式披露"这个功能时,我立刻意识到这是提升AI交互体验的关键设计。简单来说,渐进式披露就像一位经验丰富的导师教学——不会一次性把所有知识灌输给你,而是…

作者头像 李华