超簡單: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生成詞雲圖
簡單的代碼示例如下:
# coding=utf-8
from wordcloud import WordCloud
f = open(u'txt/file.txt','r').read()
wordcloud = WordCloud(background_color="white",width=1000, height=860, margin=2).generate(f)
# width,height,margin可以設置圖片屬性
# generate 可以對全部文本進行自動分詞,但是他對中文支持不好
#wordcloud = WordCloud(font_path = r'D:\Fonts\simkai.ttf').generate(f)
# 你可以通過font_path參數來設置字體集
#background_color參數為設置背景顏色,默認顏色為黑色
import matplotlib.pyplot as plt
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
wordcloud.to_file('out.png')
效果圖如下:
這只是一個簡單的例子。你可根據自己的需求設置字體,設置形狀,設置顏色,傾斜度等屬性。
基於Python的詞雲生成類庫,很好用,而且功能強大.個人強力推薦
github https://github.com/amueller/word_cloud
官方地址: https://amueller.github.io/word_cloud/
2.Java生成詞雲圖
需要添加maven依賴
<dependency>
<groupId>com.kennycason</groupId>
<artifactId>kumo-core</artifactId>
<version>1.13</version>
</dependency>
<dependency>
<groupId>com.kennycason</groupId>
<artifactId>kumo-tokenizers</artifactId>
<version>1.12</version>
</dependency>
java代碼如下:
//建立詞頻分析器,設置詞頻,以及詞語最短長度,此處的參數配置視情況而定即可
FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();
frequencyAnalyzer.setWordFrequenciesToReturn(600);
frequencyAnalyzer.setMinWordLength(2);
//引入中文解析器
frequencyAnalyzer.setWordTokenizer(new ChineseWordTokenizer());
//指定文本文件路徑,生成詞頻集合
final List<WordFrequency> wordFrequencyList = frequencyAnalyzer.load("E:\\ciyun/wordcloud.txt");
//設置圖片分辨率
Dimension dimension = new Dimension(1920,1080);
//此處的設置采用內置常量即可,生成詞雲對象
WordCloud wordCloud = new WordCloud(dimension,CollisionMode.PIXEL_PERFECT);
//設置邊界及字體
wordCloud.setPadding(2);
java.awt.Font font = new java.awt.Font("STSong-Light", 2, 20);
//設置詞雲顯示的三種顏色,越靠前設置表示詞頻越高的詞語的顏色
wordCloud.setColorPalette(new LinearGradientColorPalette(Color.RED, Color.BLUE, Color.GREEN, 30, 30));
wordCloud.setKumoFont(new KumoFont(font));
//設置背景色
wordCloud.setBackgroundColor(new Color(255,255,255));
//設置背景圖片
//設置背景圖層為圓形
wordCloud.setBackground(new CircleBackground(255));
wordCloud.setFontScalar(new SqrtFontScalar(12, 45));
//生成詞雲
wordCloud.build(wordFrequencyList);
wordCloud.writeToFile("D:\\ciyun/ciyun1.png");
運行效果:
3.Js生成詞雲圖
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.bootcss.com/wordcloud2.js/1.1.0/wordcloud2.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<div id="canvas-container" align="center">
<canvas id="canvas" width="600px" height="400px"></canvas>
</div>
</body>
</html>
<script>
var options = eval({
"list": [
['Google', 10],
['Tencent', 9],
['Alibaba', 7],
['Baidu', 6],
['NetEase', 4],
['JD', 5],
['Youku', 4],
['Meituan', 3],
['Douban', 3]
],
"gridSize": 16, // size of the grid in pixels
"weightFactor": 10, // number to multiply for size of each word in the list
"fontWeight": 'normal', // 'normal', 'bold' or a callback
"fontFamily": 'Times, serif', // font to use
"color": 'random-light', // 'random-dark' or 'random-light'
"backgroundColor": '#333', // the color of canvas
"rotateRatio": 1 // probability for the word to rotate. 1 means always rotate
});
var canvas = document.getElementById('canvas');
WordCloud(canvas, options);
</script>
運行效果:
官網在線體驗地址:https://wordcloud2-js.timdream.org/#love
項目源碼地址:https://github.com/timdream/wordcloud
項目源碼地址:https://github.com/timdream/wordcloud2.js
結語
好了,一個生成詞雲圖的功能,我扒出了這么多東西。意外的發現讓我覺得詞雲圖很好玩,就Gooogle了一下,沒想到有一堆網站。3分鍾對工具網站的喜愛后,我嘗試通過技術手段來實現。沒想到有多種生成詞雲圖的方式,着時讓我震驚。回頭看我發現詞雲的這個過程,讓我想起了一句話“以為的不是你以為的”,互聯網時代是信息大爆炸的時代,只有不斷學習,不斷提升認知,才能讓你立於不敗之地!