在做数据分析得时候,生成词云图是很常见得需求,正常情况下大部分都是通过python去采集数据并且生成,异常强大,本文来说说java如何生成词云!

在github上找轮子得时候,发现了这么一个项目:Kumo(项目地址:https://github.com/kennycason/kumo),

项目特点

  • 绘制矩形,圆形或图像叠加字云。图像叠加将在所有非透明像素上绘制单词。

  • 线性,平方根字体标量。完全可扩展。

  • 可变字体大小。

  • 单词轮换。只需提供开始角度,结束角度和切片数量。

  • 自定义背景颜色。完全可定制的BackGrounds即将推出。

  • 字填充。

  • 加载自定义彩色托盘。

  • Colision和Padding的两种模式:PIXEL_PERFECT和RECTANGLE。

  • 极地词云。在一个图像中绘制两个相对的字云,以便轻松比较/对比日期集。

  • 分层的词云。覆盖多个词云。

  • WhiteSpace和中文Word Tokenizer。完全可扩展。

  • 频率分析器用于标记,过滤和计算字数。

虽然功能没有python得轮子那么好使,但好歹也能满足基本需求,我们来看看该项目简介生成得效果图本文以技术书籍随机权重来生成为例,看看生成得几个效果图

引入项目依赖

这里使用得是目前官方最新版本 1.17,第一个是核心包,第二个是语言支持

   <dependency>   <groupId>com.kennycason</groupId>   <artifactId>kumo-core</artifactId>  <version>1.17</version> </dependency> <dependency>  <groupId>com.kennycason</groupId>   <artifactId>kumo-tokenizers</artifactId>    <version>1.17</version> </dependency>

代码实战

 final FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();    frequencyAnalyzer.setWordFrequenciesToReturn(600);  frequencyAnalyzer.setMinWordLength(2);  frequencyAnalyzer.setWordTokenizer(new ChineseWordTokenizer()); // 可以直接从文件中读取   //final List<WordFrequency> wordFrequencies = frequencyAnalyzer.load(getInputStream("text/chinese_language.txt")); final List<WordFrequency> wordFrequencies = new ArrayList<>(); // 用后端技术书籍来随机生成词云   String [] books = {"Spring实战","Spring源码深度解析","SpringBoot实战", "SpringBoot2精髓","一步一步学SpringBoot2","Spring微服务实战", "Head First Java","Java并发编程实战","深入理解Java 虚拟机",    "Head First Design","effective java","J2EE development without EJB",  "TCP/IP卷一"," 计算机网络:自顶向下","图解HTTP和图解TCP/IP",    "计算机网络","深入理解计算机系统","现代操作系统", "Linux内核设计与实现","Unix网络编程","数据结构与算法",  "算法导论","数据结构与算法(Java版)","算法图解,啊哈算法", "剑指offer","LeetCode"," Java编程思想", "Java核心技术卷一","深入理解JVM虚拟机","Java并发编程实战",   " Java并发编程艺术","Java性能调优指南","Netty权威指南",   "深入JavaWeb技术内幕","How Tomcat Works","Tomcat架构解析",  "Spring实战","Spring源码深度解析","Spring MVC学习指南",   "Maven实战","sql必知必会","深入浅出MySQL",  "Spring cloud微服务实战","SpringBoot与Docker微服务实战","深入理解SpringBoot与微服务架构"   };  //加入分词并随机生成权重,每次生成得图片都不一样    for (String book : books){  wordFrequencies.add(new WordFrequency(book,new Random().nextInt(books.length)));    }   //此处不设置会出现中文乱码  java.awt.Font font = new java.awt.Font("STSong-Light", 2, 18);   final Dimension dimension = new Dimension(900, 900);   final WordCloud wordCloud = new WordCloud(dimension, CollisionMode.PIXEL_PERFECT); wordCloud.setPadding(2);    wordCloud.setBackground(new CircleBackground(255)); wordCloud.setFontScalar(new SqrtFontScalar(12, 42));    //设置词云显示的三种颜色,越靠前设置表示词频越高的词语的颜色  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.build(wordFrequencies);   wordCloud.writeToFile("d://3.png");

使用感悟

1.分词可以通过读取文件,也可以指定数据,指定数据如上例所示或者数据库统计出来得数据,通过分词得权重来显示在词云中得大小

// 可以直接从文件中读取
//final List<WordFrequency> wordFrequencies = frequencyAnalyzer.load(getInputStream("text/chinese_language.txt"));

2.虽然支持中文,但除了使用中文解析器之外还得指定字体,否则出现中文乱码,这点作者没有提及,所以很多网上类似demo都有底下留言中文乱码如何解决

frequencyAnalyzer.setWordTokenizer(new ChineseWordTokenizer());   //此处不设置会出现中文乱码
java.awt.Font font = new java.awt.Font("STSong-Light", 2, 18);

3.可以指定生成得形状,以及背景色还有词频得颜色,想要生成得更好看,需要自己调整相关参数。

示例地址

https://github.com/pengziliu/kumo

推荐程序员必备微信号 

JAVA微信号:

javabaiwen

推荐理由: 在多学一点知识,就可以少写一行代码!专注于技术资源分享,经验交流,最新技术解读,另有海量免费电子书以及成套学习资源,关注JAVA,做技术得先驱者。
 ▼长按下方↓↓↓二维码识别关注

Java生成词云!你喜欢得书都在图里!相关推荐

  1. Java调用命令行+java生成词云

    java调用命令行 package com.weizu.control; import java.io.BufferedReader; import java.io.InputStreamReader ...

  2. Java生成词云KUMO

    文章目录 前言: 引入依赖 1.1引入KUMO依赖 1.2 junit测试依赖 junit测试代码 创建D盘下的3302.txt文本文件 前言: python生成词云wordcloud,使用java的 ...

  3. python3 爬虫数据处理 爬取华为应用市场 APP应用评论(二)根据评论生成词云——小猿搜题

    python3 爬虫&数据处理 爬取华为应用市场 APP应用评论(二)根据评论生成词云--小猿搜题 # 导入扩展库 import re # 正则表达式库 import collections ...

  4. python3 爬虫数据处理 爬取华为应用市场 APP应用评论(二)根据评论生成词云——学霸君

    python3 爬虫&数据处理 爬取华为应用市场 APP应用评论(二)根据评论生成词云--学霸君 # 导入扩展库 import re # 正则表达式库 import collections # ...

  5. python3 爬虫数据处理 爬取华为应用市场 APP应用评论(二)根据评论生成词云——作业帮

    python3 爬虫&数据处理 爬取华为应用市场 APP应用评论(二)根据评论生成词云--作业帮 # 导入扩展库 import re # 正则表达式库 import collections # ...

  6. 在线词云加载慢,有水印?作为程序员,教你如何使用Java,Python和JS生成词云!

    声明:本文转载huaairen作者一文<制作词云库图片>,如有侵权,请联系删除. 前言 某天心血来潮,想搞搞词云这玩意,网上很多在线生成词云的网站,但是加载都比较慢,或者有水印,再或者是无 ...

  7. python生成文章标题_利用简书首页文章标题数据生成词云

    原标题:利用简书首页文章标题数据生成词云 感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! ...

  8. 小程序画布功能+JAVA用KUMO生成词云图片

    小程序画布功能+JAVA用KUMO生成词云图片 KUMO git地址:https://github.com/kennycason/kumo 原理:利用Kumo生成词云,并转换成64位传到小程序,小程序 ...

  9. java使用wordcloud生成词云

    1.引入maven依赖 <dependency><groupId>com.kennycason</groupId><artifactId>kumo-co ...

最新文章

  1. Android问题汇总
  2. 2016 多校赛3 A 水 B 期望,规律 C 各种博弈 J 物理题,积分 K 暴力,水
  3. (译)KVO的内部实现
  4. edHat linux光盘引导,Red Hat Linux 9光盘启动安装过程
  5. python编程实战(二):一文教你生成随机验证码!大小写字母与数字组合,位数可以控制
  6. Ubuntu16.04/18.04 安装配置JDK 1.8 环境( Linux )
  7. Leetcode--120. 三角形最小路径和
  8. jQuery实现轮播图--入门
  9. Dart基础知识之main()函数介绍
  10. javascript模板库jsrender加载并缓存外部模板文件
  11. SQL_SERVER 导oracle(转)
  12. Fabric1.4源码解析:客户端创建通道过程
  13. win10下移动pagefiles.sys文件到D盘
  14. [单片机框架][DFU] Dfu升级例子 带crc校验+超时机制+led指示灯+芯片加锁+芯片自擦
  15. 知乎zhihu:Python爬取某个问题下所有含有给定关键词的回答
  16. 笔记本,Debian不能调整亮度
  17. 计算机网络基础 之三:数据链路层
  18. oracle从序列中查最大id,Oracle序列详解
  19. Windows下安装 Smarty
  20. 无法下载钉钉群内回放视频?

热门文章

  1. pdf压缩大小,一个简单的pdf压缩方法
  2. android登录加密传输,android环境下两种md5加密方式(示例代码)
  3. 360极速浏览器极速模式通过hosts文件切换兼容模式bat脚本
  4. SAP-MM知识精解-STO公司内的库存转储订单(01)-不带交货单配置及操作
  5. 博士研究生入学第一年就完成了毕业所需的发表论文要求是怎样的体验?
  6. php岗位范文,PHP开发工程师岗位个人简历个人技能范文
  7. 获得商品详情API接口
  8. 今日头条阅读量怎么刷_怎么刷今日头条阅读量?
  9. 英语四六级写作救命万能表达
  10. 使用Ventoy安装Deepin系统出现Error verification failed 0x1A Security violation错误