在[上一篇](https://www.cnblogs.com/yukiwu/p/10967037.html)中已经分享了用 Python 创建词云了。接下来继续总结其他创建词云的方法。

##### >> Create Word Cloud via JavaScript


JavaScript 可以借助 d3 函数库d3-cloud 插件来生成词云。

  1. 下载 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>
  1. 准备文本。

我们再次使用上次保存的 Word Cloud History.txt 的文本。

  1. 用 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 看看。

  1. 接下来我们就可以用 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


  1. 这个例子还没有实现设置停用词的功能,所以图形中还包括了很多无意义的词语,例如 the, a, of, in 等等。如果你看完这篇博客后有兴趣继续玩玩,可以自己加个 function 实现这个功能。

简单的方法就是设置两个 Object, 一个装词语,一个装停用词。现在词语中读取第一个词,并在停用词中查找。如果是停用词就丢掉,然后读取第二个词,如此类推。

  1. 到目前为止,将 svg 保存为其他图片格式 (如 *.png)只适用于 Chrome 浏览器和 FireFox 浏览器。曾经花了很多时间去搜索和研究都没有找到在 IE 怎样将 svg 保存成其他图片格式。如果有好心人知道,也和我分享一下吧。Thanks!

##### >> Sample Code


download here

##### >> 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的更多相关文章

  1. Word Cloud (词云) - Matlab

    今天要总结的是 Word Cloud 最后一个部分了,用 Matlab 来创建 word cloud.Matlab R2018b 已经提供 wordcloud 函数可以直接生成词云了. >> ...

  2. Word Cloud (词云) - R

    在前面已经陆续总结了如何用 Python 和 JavaScript 创建词云了,今天要说的是 R.其实 SPSS 和 SAS 的 Word Cloud 扩展模板都是基于 R 实现的. >> ...

  3. Word Cloud (词云) - Python

    >>What's Word Cloud 词云 (Word Cloud)是对文本中出现频率较高的词语给予视觉化展示的图形, 是一种常见的文本挖掘的方法.目前已有多种数据分析工具支持这种图形, ...

  4. Matplotlib学习---用wordcloud画词云(Word Cloud)

    画词云首先需要安装wordcloud(生成词云)和jieba(中文分词). 先来说说wordcloud的安装吧,真是一波三折.首先用pip install wordcloud出现错误,说需要安装Vis ...

  5. 推荐一个免费的生成词云(word cloud)的在线工具

    "词云"这个概念由美国西北大学新闻学副教授.新媒体专业主任里奇·戈登(Rich Gordon)提出. "词云"就是对网络文本中出现频率较高的"关键词& ...

  6. python词云的制作方法

    第一次接触到词云主要是觉得很好看,就研究了一下,官方给出了代码的,但是新手看的话还是有点不容易,我们来尝试下吧. 环境:python2.7 python库:PIL(pillow),numpy,matp ...

  7. 使用Python定制词云

    一.实验介绍 1.1 实验内容 在互联网时代,人们获取信息的途径多种多样,大量的信息涌入到人们的视线中.如何从浩如烟海的信息中提炼出关键信息,滤除垃圾信息,一直是现代人关注的问题.在这个信息爆炸的时代 ...

  8. python抓取数据构建词云

    1.词云图 词云图,也叫文字云,是对文本中出现频率较高的"关键词"予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨. 先看几个词 ...

  9. python抓取电影<海王>影评词云生成

    海王是前段时间大热的影片,个人对这种动漫题材的电影并不是很感兴趣.然鹅,最近这部电影实在太热了,正好最近看自然语言处理的时候,无意间发现了word cloud这个生成词云的库,还蛮好玩的,那就抓抓这部 ...

随机推荐

  1. 如何扩展ArcGIS中的元数据编辑器

    http://www.esrichina-bj.cn/old../library/arcnews16/Metadata.htm http://www.esrichina-bj.cn/old../lib ...

  2. 分析PMT changed for the ROM:it must be downloaded.升级失败。

    应用场景描写叙述: 同样项目不同版本号(不同分支),使用Smart Phone Flash Tool工具交叉升级,出现PMT changed for the ROM;it must be downlo ...

  3. JAVA学习第六十四课 — 反射机制

       Java反射机制是在执行状态中,对于随意一个类,都可以知道这个类的全部属性和方法,对于随意一个对象,都可以调用它的随意一个方法和属性,这样的动态获取的信息以及动态调用对象的方法的功能称为java ...

  4. 【Mongodb教程 第十七课 】MongoDB常用命令 数据库命令 集合操作命令

    (1)数据库命令 a)添加用户 db.addUser(‘name’,’pwd’) b)删除用户 db.removeUser(‘name’) c)用户验证 db.auth(‘name’,’pwd’) d ...

  5. 不等式数列 DP

    度度熊最近对全排列特别感兴趣,对于1到n的一个排列,度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 '>' 和 '<' )使其成为一个合法的不等式数列.但是现在度度熊手中只有 ...

  6. 契约式设计 契约式编程 Design by contract

    Design by contract - Wikipedia https://en.wikipedia.org/wiki/Design_by_contract What is the use of & ...

  7. 查源码分析 游标 写 需要 cursors 一切不看源码的代码引入都是定时炸弹的启动

    https://github.com/PyMySQL/PyMySQL/blob/master/pymysql/__init__.py 建立连接 def Connect(*args, **kwargs) ...

  8. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX【转】

    本文转载自:http://www.cnblogs.com/52php/p/5681751.html 四.更好一点的Hello World 没有最好,只有更好 从本小节开始,后面所有的构建我们都将采用  ...

  9. ToolBar修改返回按钮图标

    使用Toolbar时,有时因为不同的手机设备,不能使用系统默认的主题样式或者图标,必须指定特定的资源,防止APP在不同设备上的效果不一样! 我在使用Toolbar时,把这个布局作为一个公共的了,所以修 ...

  10. POJ - 1986 Distance Queries(离线Tarjan算法)

    1.一颗树中,给出a,b,求最近的距离.(我没考虑不联通的情况,即不是一颗树的情况) 2.用最近公共祖先来求, 记下根结点到任意一点的距离dis[],这样ans = dis[u] + dis[v] - ...