Word Cloud (词云) - JavaScript
在[上一篇](https://www.cnblogs.com/yukiwu/p/10967037.html)中已经分享了用 Python 创建词云了。接下来继续总结其他创建词云的方法。
##### >> Create Word Cloud via JavaScript
JavaScript 可以借助 d3 函数库 的 d3-cloud 插件来生成词云。
- 下载 d3, d3-cloud 及其相关文件,并在 HTML 文件中引用。
<script src="dist/d3.v3.min.js"></script>
<script src="dist/d3.layout.cloud.js"></script>
<script src="dist/colorbrewer.v1.min.js"></script>
- 准备文本。
我们再次使用上次保存的 Word Cloud History.txt 的文本。
- 用 HTML 写一个简单的 Web Page,让我们可以做一些简单的交互,例如选择 *.txt 文件,点击生成图形,保存图形等等。
<div role="main">
<input type="file" id="txtFile" accept=".txt" single>
<button id="btnCreate">Create</button>
<button id="btnSave" disabled>Save</button>
<div id="svgBox"></div>
</div>
完成后可以用浏览器打开这个 Web Page 看看。

- 接下来我们就可以用 JavaScript 去实现这些控件的功能了。和 Python 不同,JavaScript 不能自动分词和设置停用词,所以我们需要
4-a) 读取 *.txt 文件: readTXTFile
4-b) 分词:generateWordList
4-c) 重头戏,画 word cloud:drawWordCloud。根据 d3-cloud 给出的API设置字体颜色,字体大小,图形的大小等等。
//Example for Step 3
var layout = d3.layout.cloud() //构造词云实例
.size([width, height])
.words(
arrWord.map(function(d) {
var index = arrWord.indexOf(d);
return {text: d, size: arrWeight[index] * sizeFactor};
})
)
.padding(5)
.rotate(function() { return ~~(Math.random() * 2) * 90; })
.font(fontFamily)
.fontSize(function(d) { return d.size; })
.spiral("rectangular")
.on("end", draw) //所有词语放置完成后运行 draw 函数
.start();
4-d). 保存图形:saveSVGToPNG
//Save svg as png file
var svg = document.querySelector("svg");
var svgData = new XMLSerializer().serializeToString(svg);
var svgSize = svg.getBoundingClientRect();
var canvas = document.createElement("canvas");
canvas.width = svgSize.width;
canvas.height = svgSize.height;
var ctx = canvas.getContext("2d");
var img = document.createElement("img");
img.setAttribute('crossOrigin', 'anonymous');
img.setAttribute("src", "data:image/svg+xml;base64," + btoa(svgData));
img.onload = function() {
ctx.drawImage(img, 0, 0);
var imgDataURL = canvas.toDataURL("image/png");
console.log(canvas.toDataURL("image/png"));
$("body").append("<a id='hiddenLink' href='" + imgDataURL + "' style='display:none;' download>Download Pic</a>");
$("#hiddenLink")[0].click();
$("#hiddenLink").remove();
};

##### >> Notes
- 这个例子还没有实现设置停用词的功能,所以图形中还包括了很多无意义的词语,例如 the, a, of, in 等等。如果你看完这篇博客后有兴趣继续玩玩,可以自己加个 function 实现这个功能。
简单的方法就是设置两个 Object, 一个装词语,一个装停用词。现在词语中读取第一个词,并在停用词中查找。如果是停用词就丢掉,然后读取第二个词,如此类推。
- 到目前为止,将 svg 保存为其他图片格式 (如 *.png)只适用于 Chrome 浏览器和 FireFox 浏览器。曾经花了很多时间去搜索和研究都没有找到在 IE 怎样将 svg 保存成其他图片格式。如果有好心人知道,也和我分享一下吧。Thanks!
##### >> Sample Code
##### >> Related Blogs
1. [Word Cloud (词云) - Python](https://www.cnblogs.com/yukiwu/p/10967037.html)
2. [Word Cloud (词云) - R](https://www.cnblogs.com/yukiwu/p/10969250.html)
3. [Word Cloud (词云) - Matlab](https://www.cnblogs.com/yukiwu/p/10971998.html)
Word Cloud (词云) - JavaScript的更多相关文章
- Word Cloud (词云) - Matlab
今天要总结的是 Word Cloud 最后一个部分了,用 Matlab 来创建 word cloud.Matlab R2018b 已经提供 wordcloud 函数可以直接生成词云了. >> ...
- Word Cloud (词云) - R
在前面已经陆续总结了如何用 Python 和 JavaScript 创建词云了,今天要说的是 R.其实 SPSS 和 SAS 的 Word Cloud 扩展模板都是基于 R 实现的. >> ...
- Word Cloud (词云) - Python
>>What's Word Cloud 词云 (Word Cloud)是对文本中出现频率较高的词语给予视觉化展示的图形, 是一种常见的文本挖掘的方法.目前已有多种数据分析工具支持这种图形, ...
- Matplotlib学习---用wordcloud画词云(Word Cloud)
画词云首先需要安装wordcloud(生成词云)和jieba(中文分词). 先来说说wordcloud的安装吧,真是一波三折.首先用pip install wordcloud出现错误,说需要安装Vis ...
- 推荐一个免费的生成词云(word cloud)的在线工具
"词云"这个概念由美国西北大学新闻学副教授.新媒体专业主任里奇·戈登(Rich Gordon)提出. "词云"就是对网络文本中出现频率较高的"关键词& ...
- python词云的制作方法
第一次接触到词云主要是觉得很好看,就研究了一下,官方给出了代码的,但是新手看的话还是有点不容易,我们来尝试下吧. 环境:python2.7 python库:PIL(pillow),numpy,matp ...
- 使用Python定制词云
一.实验介绍 1.1 实验内容 在互联网时代,人们获取信息的途径多种多样,大量的信息涌入到人们的视线中.如何从浩如烟海的信息中提炼出关键信息,滤除垃圾信息,一直是现代人关注的问题.在这个信息爆炸的时代 ...
- python抓取数据构建词云
1.词云图 词云图,也叫文字云,是对文本中出现频率较高的"关键词"予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨. 先看几个词 ...
- python抓取电影<海王>影评词云生成
海王是前段时间大热的影片,个人对这种动漫题材的电影并不是很感兴趣.然鹅,最近这部电影实在太热了,正好最近看自然语言处理的时候,无意间发现了word cloud这个生成词云的库,还蛮好玩的,那就抓抓这部 ...
随机推荐
- C/C++ (一)
c语言中的逻辑运算符都是短路运算,一旦能够确定整个表达式的值就不再计算,配合c的定义的灵活性,可以写出很多漂亮的程序. 例如 如果要在一个长为n的数列s中找到第k个没被标记过的数 for(i=1,j= ...
- FF,chrome与IE的事件处理程序
今天学习了js的事件处理程序,IE与FF,chrome,safari,opera的处理事件方法不同,FF,chrome,safari,opera支持addEventLisener,而addEventL ...
- freeswitch对媒体的处理的三种方式
一.默认方式:媒体通过freeswitch, RTP被freeswtich转发, freeswitch控制编码的协商并在协商不一致时提供语音编码转换能力, 支持录音,二次拨号等. 二.代理模式: ...
- java大文件的分割和合并
原文:http://www.open-open.com/code/view/1441679313430 import java.io.File; import java.io.FileInputStr ...
- Delphi中匿名方法动态绑定事件
应恢弘之约,写了一个对其发布的匿名函数动态绑定到事件的封装,代码如下: type TAnonEvent=class public class function Wrap<T1,T2>(On ...
- Office Adobe Acrobat把PDF转换为Word时候提示不支持的Type2字体怎么办
如下图所示,在使用Adobe Acrobat Pro9将PDF转换为Word的时候出现下面的错误 很简单,不要用Adobe Acrobat Pro9了,用Adobe Acrobat Pro X,还 ...
- Spring AOP监控SQL运行
对数据库连接池Proxool比較熟悉的读者,都知道Proxool能够记录SQL运行内容和时间等信息日志. 我们能够将该日志记录专门的SQL日志文件.对于查找运行特别耗时的SQL起了不小的作用. 对于一 ...
- 连接sql2008时报错
最近把公司的项目搭建到本地(周末回家要加班),可是连接后,发现程序后台出错,错误信息:不支持此服务器版本.目标服务器必须是 SQL Server 2000 或更高版本. 本地是SqlServer200 ...
- Thinking in Java -- 类型信息RTTI
Thinking in Java – 类型信息 个人感觉 java 中的比較难的部分了,在看了些netty源代码发现事实上这块很实用. 这章重点是RTTI和反射.先说下自己的理解 RTTI是执行时识别 ...
- FFT做题记录
FFT是用来快速求卷积的..... 那么卷积有什么作用呢 https://www.zhihu.com/question/22298352 看完就懂了