超简单:3分钟制作惊艳的词云图
本篇先来解释一个名词“词云”,“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。 词云图,很牛逼的存在,最近几天我也研究了一下,本篇将带领大家生成漂亮的词云图。词云的生成依据权重较高低, 词的倾斜角度、字体、颜色等属性来控制生成的词云图 。话不多说,先来看一些我生成的例子。
实用的词云网站
1. https://wordart.com/
国外版的词云图制作网站,网站操作页面如下图,你可以导入文本,或者导入网页内容,设置词云图要生成的图形,字体,布局,样式等。生成出的词云图你也可以对它进行编辑,根据自己需求进行改动。(注:默认不支持中文,需导入中文字体)
2. https://minitagcloud.cn/create.html
国产词云制作网站,内容比较丰富,包含上一款制作词云的所有功能。(国产更适合国民使用习惯)
3. https://worditout.com/
网站很人性,还给用户解释什么是词云以及词云的作用等信息。它操作简单,进入网站后只需要输入一段文本,然后就可以生成各种样式的“云”文字。用户可以根据自己的需要对WordItOut进行再设计,比如颜色、字符、字体、背景、文字位置等,保存下载后,可以复制。
4. http://yciyun.com/
易词云又一款国产强大的词云制作网站。里面的强大欢迎自己去体验。
代码生成词云图
在为找到上面那么多优秀的词云图制作网站而兴奋的时候,我突然意识到一点,我是程序员额!于是我搜罗如何通代码完成上述功能。Goooooogle一下,有很多通过程序生成云词图的实例,我看到主要有两类,python,Java和Js的实现。
1.python生成词云图
简单的代码示例如下:
1# coding=utf-8
2from wordcloud import WordCloud
3
4f = open(u'txt/file.txt','r').read()
5wordcloud = WordCloud(background_color="white",width=1000, height=860, margin=2).generate(f)
6# width,height,margin可以设置图片属性
7
8# generate 可以对全部文本进行自动分词,但是他对中文支持不好
9#wordcloud = WordCloud(font_path = r'D:\Fonts\simkai.ttf').generate(f)
10# 你可以通过font_path参数来设置字体集
11
12#background_color参数为设置背景颜色,默认颜色为黑色
13import matplotlib.pyplot as plt
14plt.imshow(wordcloud)
15plt.axis("off")
16plt.show()
17wordcloud.to_file('out.png')
效果图如下:
这只是一个简单的例子。你可根据自己的需求设置字体,设置形状,设置颜色,倾斜度等属性。
基于Python的词云生成类库,很好用,而且功能强大.个人强力推荐
github https://github.com/amueller/word_cloud
官方地址: https://amueller.github.io/word_cloud/
2.Java生成词云图
需要添加maven依赖
1 <dependency>
2 <groupId>com.kennycason</groupId>
3 <artifactId>kumo-core</artifactId>
4 <version>1.13</version>
5 </dependency>
6 <dependency>
7 <groupId>com.kennycason</groupId>
8 <artifactId>kumo-tokenizers</artifactId>
9 <version>1.12</version>
10 </dependency>
java代码如下:
1 //建立词频分析器,设置词频,以及词语最短长度,此处的参数配置视情况而定即可
2 FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();
3 frequencyAnalyzer.setWordFrequenciesToReturn(600);
4 frequencyAnalyzer.setMinWordLength(2);
5
6 //引入中文解析器
7 frequencyAnalyzer.setWordTokenizer(new ChineseWordTokenizer());
8 //指定文本文件路径,生成词频集合
9 final List<WordFrequency> wordFrequencyList = frequencyAnalyzer.load("E:\\ciyun/wordcloud.txt");
10 //设置图片分辨率
11 Dimension dimension = new Dimension(1920,1080);
12 //此处的设置采用内置常量即可,生成词云对象
13 WordCloud wordCloud = new WordCloud(dimension,CollisionMode.PIXEL_PERFECT);
14 //设置边界及字体
15 wordCloud.setPadding(2);
16 java.awt.Font font = new java.awt.Font("STSong-Light", 2, 20);
17 //设置词云显示的三种颜色,越靠前设置表示词频越高的词语的颜色
18 wordCloud.setColorPalette(new LinearGradientColorPalette(Color.RED, Color.BLUE, Color.GREEN, 30, 30));
19 wordCloud.setKumoFont(new KumoFont(font));
20 //设置背景色
21 wordCloud.setBackgroundColor(new Color(255,255,255));
22 //设置背景图片
23 //设置背景图层为圆形
24 wordCloud.setBackground(new CircleBackground(255));
25 wordCloud.setFontScalar(new SqrtFontScalar(12, 45));
26 //生成词云
27 wordCloud.build(wordFrequencyList);
28 wordCloud.writeToFile("D:\\ciyun/ciyun1.png");
运行效果:
3.Js生成词云图
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <meta http-equiv="X-UA-Compatible" content="ie=edge">
7 <title>Document</title>
8 <script src="https://cdn.bootcss.com/wordcloud2.js/1.1.0/wordcloud2.js"></script>
9 <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
10</head>
11<body>
12 <div id="canvas-container" align="center">
13 <canvas id="canvas" width="600px" height="400px"></canvas>
14 </div>
15</body>
16</html>
17<script>
18 var options = eval({
19 "list": [
20 ['Google', 10],
21 ['Tencent', 9],
22 ['Alibaba', 7],
23 ['Baidu', 6],
24 ['NetEase', 4],
25 ['JD', 5],
26 ['Youku', 4],
27 ['Meituan', 3],
28 ['Douban', 3]
29 ],
30 "gridSize": 16, // size of the grid in pixels
31 "weightFactor": 10, // number to multiply for size of each word in the list
32 "fontWeight": 'normal', // 'normal', 'bold' or a callback
33 "fontFamily": 'Times, serif', // font to use
34 "color": 'random-light', // 'random-dark' or 'random-light'
35 "backgroundColor": '#333', // the color of canvas
36 "rotateRatio": 1 // probability for the word to rotate. 1 means always rotate
37 });
38 var canvas = document.getElementById('canvas');
39 WordCloud(canvas, options);
40</script>
运行效果:
官网在线体验地址: https://wordcloud2-js.timdream.org/#love
项目源码地址: https://github.com/timdream/wordcloud
项目源码地址: https://github.com/timdream/wordcloud2.js
结语
好了,一个生成词云图的功能,我扒出了这么多东西。意外的发现让我觉得词云图很好玩,就Gooogle了一下,没想到有一堆网站。3分钟对工具网站的喜爱后,我尝试通过技术手段来实现。没想到有多种生成词云图的方式,着时让我震惊。回头看我发现词云的这个过程,让我想起了一句话“以为的不是你以为的”,互联网时代是信息大爆炸的时代,只有不断学习,不断提升认知,才能让你立于不败之地!
我的公众号:不安分的猿人
我的博客官网: RestlessMan
希望认识你,和你交朋友!