Python3,我只用一段代码,就写了个词云生成器,功能强大到怀疑人生。

简介: Python3,我只用一段代码,就写了个词云生成器,功能强大到怀疑人生。

1、引言

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

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

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

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

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

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

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

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

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

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

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

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

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

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

小鱼:你说分享什么啊?

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

小鱼:分享什么代码啊?

小屌丝:去泡温泉…

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

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),或者用 jiieba.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 安装

pip install jieba
pip install stylecloud

然后就是等待着安装。

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

2.2 代码实战

代码示例

# -*- coding:utf-8 -*-
# @Time   : 2023-01-10
# @Author : Carl_DJ
'''
实现功能:
    词云生成器
'''
import json
import stylecloud
import codecs
import jieba
from collections import Counter
#过滤掉高频出现的词汇
passwords = set()
#读取词汇文档
content = [line.strip() for line in open('./data/passwords.txt', 'r',encoding='utf8').readlines()]
passwords.update(content)
#获取文档词汇, 并截取长度为3个
def make_words(txt):
    make_list = jieba.cut(txt)
    c = Counter()
    words_list = []
  #获取词汇文本
    for x in make_list:
      #长度为3,超过截取
        if len(x) ==  3 and x !='\r\n':
            c[x]  += 1
            words_list.append(x)
    for k,v in c.most_common(50):
        if k not in passwords:
            # print(f'{k,v}')
    #组合词云内容
    return " ".join(words_list)
#读取中大型suv测评.txt内容
with codecs.open('./data/中大型suv测评.txt','r','utf8') as f: #格式需要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"
                          )

结果展示

注:

这里需要准备两个文件

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

文本内容示例:

这里强调一点:

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

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

3、总结

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

回头看一下,

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

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

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

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

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

好了,就唠叨这里了。

我是小鱼:

  • 51认证讲师;
  • 金牌面试官;

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

当然,

  • 如果你想晋升自己的技能,;
  • 如果你想提升自己的面试成功率;
  • 如果你现在处在职业迷茫期,想重新规划职业生涯;

都可以找小鱼聊聊的。

CSDN 私信留言, 或者扫描小鱼主页的二维码,都可以找到的。

目录
相关文章
|
10天前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
1月前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
43 6
|
13天前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
54 33
|
14天前
|
JavaScript API C#
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
37 10
|
1月前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
73 8
|
1月前
|
Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!
|
1月前
|
程序员 测试技术 数据安全/隐私保护
深入理解Python装饰器:提升代码重用与可读性
本文旨在为中高级Python开发者提供一份关于装饰器的深度解析。通过探讨装饰器的基本原理、类型以及在实际项目中的应用案例,帮助读者更好地理解并运用这一强大的语言特性。不同于常规摘要,本文将以一个实际的软件开发场景引入,逐步揭示装饰器如何优化代码结构,提高开发效率和代码质量。
52 6
|
Linux Python
【Python】300行代码实现crontab定时器功能 【上】
熟悉Linux的都知道在Linux下有一个crontab的定时任务,可以很方便的进行各种定时、计划任务的执行。有时候写代码也需要用到定时器业务,因此我使用Python实现了一个类似的定时器模块,可以很方便的做定时业务,使用例子如下:
459 0
【Python】300行代码实现crontab定时器功能 【上】
|
Python
使用python实现一个文件搜索功能,类似于Everything功能
一般人日常总是会将一些片段信息记录到文件中,放到电脑硬盘上。等过段时间,可能就不知道放到哪里了,电脑上文件夹太多。 找文件一般都会借助于搜索软件,比如Everything软件就很强大,输入名称,就能全局查找文件;
493 0
一行Python可以实现的功能
手头有 109 张头部 CT 的断层扫描图片,我打算用这些图片尝试头部的三维重建。基础工作之一,就是要把这些图片数据读出来,组织成一个三维的数据结构(实际上是四维的,因为每个像素有 RGBA 四个通道)。