python生成的词云没有图案_还在为专栏封面发愁?我用Python写了个词云生成器!...

50f2d1fcc106a75bd62099e865a965a459e9cb7d.png

妈妈再也不用担心我写专栏找不到合适的封面了!B站专栏的封面至少是我一直头疼的问题,每次写完文章却找不到合适的图片作为封面。

词云是一个很不错的选择,既美观,又提纲挈领。网上也有词云生成的工具,但大多收费/只能试用,很多设置也不能调整。于是我最终决定自己动手丰衣足食。

网上有很多关于词云生成的Python代码,但大多结构松散,要调一项设置要在代码里上上下下各个库里进行修改,不方便使用。于是我想把我们常用的设置封装到一个函数里,这样方便我们日常使用。4adb9255ada5b97061e610b682b8636764fe50ed.png

总的思路是采用Jieba库对中文文章进行词语拆分,使用Matplotlib库进行底层绘图支持,使用WoldCloud库对分词后的文章进行词频统计并画出词云。

原本的WordCloud库是针对英语所开发的,在英文里每个单词都是由空格分开的,所以只需统计一篇文章中单词的频率并画图即可。中文的词语则需要通过Jieba库来进行识别并分词,并再将文中的词语之间插入空格,才算完成对数据的准备工作,可以使用WordCloud库生成词云。WordCloud库默认生成的是充满整个画图区域的词云,效果不够美观。

一般的解决方案是选择一张已有的图片作为mask遮罩,使WordCloud在图形区域进行画图。在本项目中,预设了常用形状的遮罩(圆形、椭圆、矩形、多边形),通过matplotlib.patches模块,进行遮罩的生成,免去了手动上传遮罩图片的麻烦。

代码采用了函数的方式,对每个功能部分进行了封装,便于调用,也便于代码的理解。分成了make_mask生成遮罩图片;jieba_split使用jieba分词并插入空格;以及最后的cloud_generate生成WordCloud对象并调用Matplotlib绘图。

最终只需要调用cloud_generate()函数并填写相应的参数即可:4adb9255ada5b97061e610b682b8636764fe50ed.png

cloud_generate()中的参数:

text_addr:需要生成词云的文本文档的地址

shape:词云的形状

'circle' 或'c':圆形

'ellipse' 或'e':椭圆

'rectangle' 或'r':矩形

'square' 或's':正方形

整数n:正n边形

colormap:Matplotlib中的colormap数据对象,是颜色的组合a61957655dbc537d9c8c8176531d396afae3766c.png部分Colormap预设

dpi:生成图片分辨率(默认为200)

output_addr:输出的图片的地址(默认为当前文件夹下wordcloud_output.png)

stopwords:列表,停止词(即你不希望出现在图片里的词)

例:

cloud_generate(text_addr = '.\\bili.txt', shape = 'e', colormap = 'Set2', dpi = 400, stopwords = ['进行',  '我们'], output_addr = '.\\output.png')

即在当前目录下打开bili.txt作为要生成词云的文章,词云形状是椭圆,颜色组合是Set2,分辨率是400dpi,停止词是‘进行’和‘我们’(因为这两个词在文中出现的频率较高,但对文章内容的提示性不大,所以选择不生成在词云里),最后输出的图片在当前文件夹下,文件名为‘output.png’4adb9255ada5b97061e610b682b8636764fe50ed.png

最后,上代码~eb286979d32151d2b22ff7fcd3eb8eada6ca6a16.png为了语法高亮,以截图的形式发上来,源码评论区自取~注:

1. 本项目依赖Jieba库、wordcloud库、matplotlib库。

2. 与程序文件同一文件夹下要有字体文件:“simhei.ttf”

3. 由于采用了函数的封装,在同一目录下的py文件可以直接将WordCloudGenerate.py当做库来导入,直接使用cloud_generate()函数from WordCloudGenerate import cloud_generate

也可以将WordCloudGenerate.py添加到python的库中,从任意地方调用此库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 1000以内的完数

题目 代码 package lesson.l6_review;public class PrefectNumber {public static void main(String[] args) {for (int i 1; i <1000 ; i) {int num0;for (int j 1; j <i-1 ; j) {if (i%j0){numj;}}if (inum){System.out.print(i"\t");}}} }

STL源码剖析 set集合

set的特性是 所有的元素会按照键值自动排序set 的键值等同于实值set不允许涵盖两个相同的键值不可以通过迭代器修改set的元素数值&#xff0c;这会破坏元素的排列顺序。因此set<T>::iterator 被定义为底层RB-tree的const_iterator,杜绝写入。也就是set的iterators是一种c…

python turtle画圣诞树动图_圣诞节!教你用Python画棵圣诞树

作者 | 糖甜甜甜&#xff0c;985高校经管研二&#xff0c;擅长用 Python、R、tableau 等工具结合统计学和机器学习模型做数据分析。 如何用Python画一个圣诞树呢&#xff1f; 最简单&#xff1a; 1height 5 2 3stars 1 4for i inrange(height): 5print(( * (height - i)) (** …

java蓝桥杯 试题-基础练习-十六进制转八进制

试题-基础练习-十六进制转八进制 题目 试题 基础练习 十六进制转八进制 资源限制 时间限制&#xff1a;1.0s 内存限制&#xff1a;512.0MB 问题描述   给定n个十六进制正整数&#xff0c;输出它们对应的八进制数。 输入格式   输入的第一行为一个正整数n &#xff08;1…

STL源码剖析 map

所有元素会根据元素的键值自动被排序 元素的类型是pair&#xff0c;同时拥有键值和实值&#xff1b;map不允许两个元素出现相同的键值pair 代码 template <class T1,class T2> struct pair{typedef T1 first_type;typedef T2 second_type;T1 first; //publicT2 secon…

java api接口怎么写_Java 如何设计 API 接口,实现统一格式返回?

来源&#xff1a;老顾聊技术前言接口交互返回格式控制层Controller美观美化优雅优化实现方案前言在移动互联网&#xff0c;分布式、微服务盛行的今天&#xff0c;现在项目绝大部分都采用的微服务框架&#xff0c;前后端分离方式&#xff0c;(题外话&#xff1a;前后端的工作职责…

java 输出学生成绩和成绩等级

题目 从键盘读入学生成绩&#xff0c;找出最高分&#xff0c;并输出学生成绩等级。成绩>最高分-10 等级为’A’成绩>最高分-20 等级为’B’成绩>最高分-30 等级为’C’其余 等级为’D’提示&#xff1a;先读入学生人数&#xff0c;根据人数创建int数组&#…

STL源码剖析 multiset 和 multimap

multiset和set完全相同&#xff0c;唯一的差别在于允许键值的重复&#xff0c;因此底层操作使用的是红黑树的insert_equal() 而不是insert_unique()multimap和map完全相同&#xff0c;唯一的差别在于允许键值的重复&#xff0c;因此底层操作使用的是红黑树的insert_equal() 而不…

java 二维数组

声明和初始化 静态初始化 // 静态初始化&#xff1a; // 一维数组int[] arr1_1 {1, 2, 4};System.out.println(Arrays.toString(arr1_1)); // 二维数组int[][] arr1_2 {{1, 2}, {4, 5}, {9, 10}};for (int[] i :arr1_2) {System.out.print(Arrays.toS…

STL源码剖析 hashtable

二叉搜索树具有对数平均时间的表现&#xff0c;但是这个需要满足的假设前提是输入的数据需要具备随机性hashtable 散列表这种结构在插入、删除、搜寻等操作层面上也具有常数平均时间的表现。而且不需要依赖元素的随机性&#xff0c;这种表现是以统计为基础的 hashtable的概述 …

append在python里是什么意思_“一棵绿萝七个鬼”是什么意思?卧室里到底能不能养绿萝!...

很多人都喜欢在家里养盆绿萝&#xff0c;一是能净化室内空气&#xff0c;让家里绿意浓浓&#xff0c;更有生机一些&#xff1b;二是绿萝好养&#xff0c;水培土培都行&#xff0c;养着也省心。在养花界有一句俗语&#xff1a;“一棵绿萝七个鬼”&#xff0c;这句话是什么意思呢…

java 二分查找

注意 二分查找要求原数组为有序序列&#xff0c;从小到大 递归解法 public class problem9 {public static void main(String[] args) {int[] arr {1,2,3,4,6,7};int left 0;int right arr.length - 1;int value 2;System.out.println(Arrays.toString(arr));int index …

C++for_each| bind1st | ptr_fun | std::function的用法

c for_each 用法_小键233-CSDN博客 传入参数 要传入参数给global function ,需要使用 ptr_fun() 这个 function adapter 将global function 转成function object , 然后再用bind2nd() 将参数bind成一个function object。&#xff08;这句话好拗口&#xff09; void fun(int i…

java三个柱子汉诺塔问题

题目 移动盘子&#xff0c;每一次只能移动一个&#xff0c;小盘子在大盘子上。 打印1 from A to B过程 注意 1&#xff09;盘子编号的变化和辅助柱子的变化 2&#xff09;当盘子编号为1时&#xff0c;结束递归&#xff0c;此时移动结束 代码 package p2;/*** Illustratio…

python遍历txt每一行_python – 计算(和写入)文本文件中每一行的...

第一次在堆栈中发布 – 总是发现以前的问题足以解决我的问题&#xff01;我遇到的主要问题是逻辑……即使是伪代码答案也会很棒. 我正在使用python从文本文件的每一行读取数据,格式如下&#xff1a; This is a tweet captured from the twitter api #hashtag http://url.com/si…

java杨辉三角形

题目 代码1 public class YangHuiTriangle {public static void main(String[] args) {print(10);}public static void print(int num) {int[][] arr new int[num][];for (int i 0; i < num; i) { // 第一行有 1 个元素, 第 n 行有 n 个元素arr[i] new int[i…

python子类继承父类属性实例_python – 从子类内的父类访问属性

在类定义期间,没有任何继承的属性可用&#xff1a; >>> class Super(object): class_attribute None def instance_method(self): pass >>> class Sub(Super): foo class_attribute Traceback (most recent call last): File "", line 1, in cl…

STL源码剖析 算法开篇

STL源码剖析 算法章节 算法总览_CHYabc123456hh的博客-CSDN博客 质变算法 质变算法 - 会改变操作对象的数值&#xff0c;比如互换、替换、填写、删除、排列组合、分隔、随机重排、排序等 #include <iostream> #include <vector>int main(){int ia[] {22,30,20,34…

java 随机数一维数组

题目1 创建一个长度为6的int型数组&#xff0c;要求数组元素的值都在1-30之间&#xff0c;且是随机赋值。同时&#xff0c;要求元素的值各不相同 代码1 public class ArrayTest2 {public static void main(String[] args) {generateArray(6);}public static void generateAr…

STL源码剖析 数值算法 accumulate | adjacent_difference | inner_product | partial_sum | power | itoa

//版本1 template <class InputIterator,class T> T accumulate(InputIterator first,InputIterator last,T init){for(;first ! last; first){init *first; //将每个元素数值累加到init身上}return init; }//版本2 template <class InputIterator,class T,class Bin…