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这个生成词云的库,还蛮好玩的,那就抓抓这部 ...
 
随机推荐
- 如何扩展ArcGIS中的元数据编辑器
			
http://www.esrichina-bj.cn/old../library/arcnews16/Metadata.htm http://www.esrichina-bj.cn/old../lib ...
 - 分析PMT changed for the ROM:it must be downloaded.升级失败。
			
应用场景描写叙述: 同样项目不同版本号(不同分支),使用Smart Phone Flash Tool工具交叉升级,出现PMT changed for the ROM;it must be downlo ...
 - JAVA学习第六十四课 — 反射机制
			
Java反射机制是在执行状态中,对于随意一个类,都可以知道这个类的全部属性和方法,对于随意一个对象,都可以调用它的随意一个方法和属性,这样的动态获取的信息以及动态调用对象的方法的功能称为java ...
 - 【Mongodb教程 第十七课 】MongoDB常用命令 数据库命令  集合操作命令
			
(1)数据库命令 a)添加用户 db.addUser(‘name’,’pwd’) b)删除用户 db.removeUser(‘name’) c)用户验证 db.auth(‘name’,’pwd’) d ...
 - 不等式数列 DP
			
度度熊最近对全排列特别感兴趣,对于1到n的一个排列,度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 '>' 和 '<' )使其成为一个合法的不等式数列.但是现在度度熊手中只有 ...
 - 契约式设计 契约式编程  Design by contract
			
Design by contract - Wikipedia https://en.wikipedia.org/wiki/Design_by_contract What is the use of & ...
 - 查源码分析 游标  写 需要 cursors  一切不看源码的代码引入都是定时炸弹的启动
			
https://github.com/PyMySQL/PyMySQL/blob/master/pymysql/__init__.py 建立连接 def Connect(*args, **kwargs) ...
 - 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX【转】
			
本文转载自:http://www.cnblogs.com/52php/p/5681751.html 四.更好一点的Hello World 没有最好,只有更好 从本小节开始,后面所有的构建我们都将采用 ...
 - ToolBar修改返回按钮图标
			
使用Toolbar时,有时因为不同的手机设备,不能使用系统默认的主题样式或者图标,必须指定特定的资源,防止APP在不同设备上的效果不一样! 我在使用Toolbar时,把这个布局作为一个公共的了,所以修 ...
 - POJ - 1986 Distance Queries(离线Tarjan算法)
			
1.一颗树中,给出a,b,求最近的距离.(我没考虑不联通的情况,即不是一颗树的情况) 2.用最近公共祖先来求, 记下根结点到任意一点的距离dis[],这样ans = dis[u] + dis[v] - ...