Python3,我只用了10行代码,就写了一个词云生成器。

简介: 词云生成器,也没有想想的那么难啊。

1、引言

小鱼:小屌丝,你在干啥呢?

小屌丝:鱼哥,你看, 我的PPT写的 高大尚不。

小鱼:这有啥高大尚的啊,

小屌丝:你仔细看, 往下翻一页

小鱼:额。你这那是PPT,就是浴皇大帝、昂科旗等车系的测评吗。

image.png

小屌丝:别管内容了, 鱼哥,你就说,这个样式怎么样, 帅不帅气吧。

小鱼:嗯,样式嘛, 还可以的。

小屌丝:鱼哥,你这么淡定, 你的意思, 你也会?

小鱼:额… 我可没说, 休想套路我。

小屌丝:鱼哥,我这就要说到公道话了, 独乐乐不如众乐乐。

小鱼:有的时候,需要独乐乐。

小屌丝:鱼哥,别整没用的, 你就说分不分享吧?

小鱼:额… 这个… 你说啥?

小屌丝:我说,你把这个代码分享出来呗。

小鱼:你说分享什么啊?

小屌丝:分享词云生成器的代码

小鱼:分享什么代码啊?

小屌丝:去泡温泉…

小鱼:好嘞,早说不就完事了嘛。


2、代码实战

2.1 库介绍

说到词云的制作, 不得不提的第三方库, stylecloud:简洁易用的词云库

当然仅仅有stylecloud 还是不够的, 还需要一个库,即 jieba:中文分词库

所以, 今天我们就用stylecloud 和jieba来完成本次的代码实战。

接下来, 我们先了解 这两个库。


2.1.1 jieba

jieba: 中文分词库


1、运行原理

  • 初始化:加载词典文件,获取每个词语和它出现的词数
  • 切分短语:利用正则,将文本切分为一个个语句,之后对语句进行分词
  • 构建DAG:通过字符串匹配,构建所有可能的分词情况的有向无环图,也就是DAG
  • 构建节点最大路径概率,以及结束位置:计算每个汉字节点到语句结尾的所有路径中的最大概率,并记下最大概率时在DAG中对应的该汉字成词的结束位置。
  • 构建切分组合:根据节点路径,得到词语切分的结果,也就是分词结果。
  • HMM新词处理:对于新词,也就是jieba词典中没有的词语,我们通过统计方法来处理,jieba中采用了HMM(隐马尔科夫模型)来处理。
  • 返回分词结果:通过yield将上面步骤中切分好的词语逐个返回。yield相对于list,可以节约存储空间。


2、主要模式

  • 精确模式:把文本精确的切分开,不存在冗余单词
  • 全模式:把文本中所有可能的词语都扫描出来,有冗余
  • 搜索引擎模式:在精确模式基础上,对长词再次切分


3、主要功能


  • jieba.cut 方法接受四个输入参数:
  • .需要分词的字符串;
  • .cut_all 参数用来控制是否采用全模式;
  • .HMM 参数用来控制是否使用 HMM 模型;
  • .use_paddle 参数用来控制是否使用paddle模式下的分词模式,
  • ..paddle模式采用延迟加载方式,通过enable_paddle接口安装paddlepaddle-tiny,并且import相关代码;


  • jieba.cut_for_search 方法接受两个参数:
  • 需要分词的字符串;
  • 是否使用 HMM 模型。
  • 该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细。


  • jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用 jieba.lcut 以及 jieba.lcut_for_search 直接返回 list


  • jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。


  • jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。


2.1.2 stylecloud

关于词云生成工具, 常用的无非这3种:


pyecharts

  • 简单易用;
  • 上手快;
  • 不够美观;

wordcloud

  • 使用频次最高;
  • 使用最广泛;

stylecloud

  • 简单易用;
  • 最接近完美;


接下来,我们就使用 sytlecloud第三方库,看看它完美到什么程度。


2.2 库安装

涉及到第三方库,肯定就需要安装

老规矩,pip 安装

pipinstalljiebapipinstallstylecloud


然后就是等待着安装。


其它安装方式,直接看这两篇:


2.2 代码实战

代码示例

# -*- coding:utf-8 -*-# @Time   : 2023-02-02# @Author : Carl_DJ'''实现功能:    词云生成器'''importjsonimportstylecloudimportcodecsimportjiebafromcollectionsimportCounter#过滤掉高频出现的词汇passwords=set()
#读取词汇文档content= [line.strip() forlineinopen('./data/passwords.txt', 'r',encoding='utf8').readlines()]
passwords.update(content)
#获取文档词汇, 并截取长度为3个defmake_words(txt):
make_list=jieba.cut(txt)
c=Counter()
words_list= []
#获取词汇文本forxinmake_list:
#长度为3,超过截取iflen(x) ==3andx!='\r\n':
c[x]  +=1words_list.append(x)
fork,vinc.most_common(50):
ifknotinpasswords:
# print(f'{k,v}')#组合词云内容return" ".join(words_list)
#读取中大型suv测评.txt内容withcodecs.open('./data/中大型suv测评.txt','r','utf8') asf: #格式需要utf8 否则会报错txt=f.read()
#words_txt=make_words(txt)
#设置词云展示的样式,字体,生成文件名称等,stylecloud.gen_stylecloud(text=words_txt,custom_stopwords=content,
background_color='#1A1A1A',
colors=['#dd4444', '#fec42c', '#fac858'],
max_font_size=100,
output_name='xt6测评.jpg',
font_path="C:/Windows/Fonts/FZSTK.TTF"                          )


结果展示

image.png

注:

这里需要准备两个文件

  • password.txt : 过滤文本中出现太多次数的词汇;
  • suv测评.txt:词云的主要显示的文本内容;

文本内容示例:

image.png

这里强调一点:

  • 文本的内容,你可以一行写很多字,
  • 但是,为了词云展示的内容更丰富, 列数,一定要多。


当然,文档内容, 也可以是下载的小说,或者你自己写的任何内容。


3、总结

看到这里, 今天的分享就要结束了。

回头看一下,

其实词云生成器,并不难。

主要就是对 jieba、stylecloud 这两个库的使用。

这里我仅仅列举了 stylecloud 第三方库,

当然,如果你有兴趣,也可以使用 pyecharts、 wordcloud ,看看生成的词云如何。

也就当是你自己的练手了。


好了,就唠叨这里了。

我是奕然

  • CSDN 博客专家;
  • 阿里云 专家博主;
  • 51CTO博客专家;
  • 51认证讲师;
  • 企业金牌面试官;

关注小鱼,带你学习更多更有趣的python知识。


当然,

如果你想晋升自己的技能,;

如果你想提升自己的面试成功率;

如果你现在处在职业迷茫期,想重新规划职业生涯;

都可以找小鱼聊聊的。


目录
相关文章
|
9天前
|
测试技术 Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界中,装饰器是那些能够为我们的代码增添魔力的小精灵。它们不仅让代码看起来更加优雅,还能在不改变原有函数定义的情况下,增加额外的功能。本文将通过生动的例子和易于理解的语言,带你领略装饰器的奥秘,从基础概念到实际应用,一起开启Python装饰器的奇妙旅程。
27 11
|
24天前
|
缓存 监控 测试技术
Python中的装饰器:功能扩展与代码复用的利器###
本文深入探讨了Python中装饰器的概念、实现机制及其在实际开发中的应用价值。通过生动的实例和详尽的解释,文章展示了装饰器如何增强函数功能、提升代码可读性和维护性,并鼓励读者在项目中灵活运用这一强大的语言特性。 ###
|
27天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第35天】装饰器在Python中是一种强大的工具,它允许开发者在不修改原有函数代码的情况下增加额外的功能。本文旨在通过简明的语言和实际的编码示例,带领读者理解装饰器的概念、用法及其在实际编程场景中的应用,从而提升代码的可读性和复用性。
|
28天前
|
设计模式 缓存 监控
Python中的装饰器:代码的魔法增强剂
在Python编程中,装饰器是一种强大而灵活的工具,它允许程序员在不修改函数或方法源代码的情况下增加额外的功能。本文将探讨装饰器的定义、工作原理以及如何通过自定义和标准库中的装饰器来优化代码结构和提高开发效率。通过实例演示,我们将深入了解装饰器的应用,包括日志记录、性能测量、事务处理等常见场景。此外,我们还将讨论装饰器的高级用法,如带参数的装饰器和类装饰器,为读者提供全面的装饰器使用指南。
|
23天前
|
Python
探索Python中的装饰器:简化代码,提升效率
【10月更文挑战第39天】在编程的世界中,我们总是在寻找使代码更简洁、更高效的方法。Python的装饰器提供了一种强大的工具,能够让我们做到这一点。本文将深入探讨装饰器的基本概念,展示如何通过它们来增强函数的功能,同时保持代码的整洁性。我们将从基础开始,逐步深入到装饰器的高级用法,让你了解如何利用这一特性来优化你的Python代码。准备好让你的代码变得更加优雅和强大了吗?让我们开始吧!
23 1
|
24天前
|
存储 缓存 监控
掌握Python装饰器:提升代码复用性与可读性的利器
在本文中,我们将深入探讨Python装饰器的概念、工作原理以及如何有效地应用它们来增强代码的可读性和复用性。不同于传统的函数调用,装饰器提供了一种优雅的方式来修改或扩展函数的行为,而无需直接修改原始函数代码。通过实际示例和应用场景分析,本文旨在帮助读者理解装饰器的实用性,并鼓励在日常编程实践中灵活运用这一强大特性。
|
28天前
|
存储 算法 搜索推荐
Python高手必备!揭秘图(Graph)的N种风骚表示法,让你的代码瞬间高大上
在Python中,图作为重要的数据结构,广泛应用于社交网络分析、路径查找等领域。本文介绍四种图的表示方法:邻接矩阵、邻接表、边列表和邻接集。每种方法都有其特点和适用场景,掌握它们能提升代码效率和可读性,让你在项目中脱颖而出。
34 5
|
26天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
41 2
|
28天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
58 4
|
29天前
|
缓存 开发者 Python
探索Python中的装饰器:简化和增强你的代码
【10月更文挑战第32天】 在编程的世界中,简洁和效率是永恒的追求。Python提供了一种强大工具——装饰器,它允许我们以声明式的方式修改函数的行为。本文将深入探讨装饰器的概念、用法及其在实际应用中的优势。通过实际代码示例,我们不仅理解装饰器的工作方式,还能学会如何自定义装饰器来满足特定需求。无论你是初学者还是有经验的开发者,这篇文章都将为你揭示装饰器的神秘面纱,并展示如何利用它们简化和增强你的代码库。