0. 前言

需要在后端生成一个词云图给小程序。
使用kumo项目实现。

1. demo

首先新建maven项目,prom.xml中加入以下依赖。加完之后记得reload。
要确保自己电脑或者服务器安装了设置的字体,否则中文会出现乱码

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

TagWordCloudService 是一个生成词云图的类,有逐句注释。

import com.kennycason.kumo.CollisionMode;
import com.kennycason.kumo.WordCloud;
import com.kennycason.kumo.WordFrequency;
import com.kennycason.kumo.bg.CircleBackground;
import com.kennycason.kumo.bg.PixelBoundaryBackground;
import com.kennycason.kumo.font.FontWeight;
import com.kennycason.kumo.font.KumoFont;
import com.kennycason.kumo.font.scale.SqrtFontScalar;
import com.kennycason.kumo.image.AngleGenerator;
import com.kennycason.kumo.nlp.FrequencyAnalyzer;
import com.kennycason.kumo.nlp.FrequencyFileLoader;
import com.kennycason.kumo.nlp.tokenizers.ChineseWordTokenizer;
import com.kennycason.kumo.palette.ColorPalette;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.List;
public class TagWordCloudService {// 照片纵横比private double ratio = 1;// 获取词云图片// wordFile:单词及其频率文件路径// pngOutputPath:图片输出路径,应该以.png结尾// shapePicPath:词云形状图片路径,其背景应为透明背景,格式为pngpublic void generate(String wordFile, String pngOutputPath, String shapePicPath) throws IOException {//        final FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();// 共检索多少个词
//        frequencyAnalyzer.setWordFrequenciesToReturn(1000);// 单词最短长度,一个汉字和一个英文字符都是1
//        frequencyAnalyzer.setMinWordLength(2);
//        frequencyAnalyzer.setStopWords(loadStopWords());// 设置中文支持,另一种加载方式不用设置
//        frequencyAnalyzer.setWordTokenizer(new ChineseWordTokenizer());final List<WordFrequency> wordFrequencies;// 加载词云有两种方式,一种是在txt文件中统计词出现的个数,另一种是直接给出每个词出现的次数,这里使用第二种// 文件格式如下
//        100: frog
//        94: dog
//        43: cog
//        20: bogFrequencyFileLoader frequencyFileLoader = new FrequencyFileLoader();File file = new File(wordFile);wordFrequencies = frequencyFileLoader.load(file);// 生成图片的像素大小final Dimension dimension = new Dimension(1024, (int)(1024*ratio));final WordCloud wordCloud = new WordCloud(dimension, CollisionMode.PIXEL_PERFECT);// 调节词云的稀疏程度,越高越稀疏wordCloud.setPadding(10);//设置背景色wordCloud.setBackgroundColor(new Color(255,255,255));//设置背景图片wordCloud.setBackground(new PixelBoundaryBackground(shapePicPath));// 颜色模板,不同频率的颜色会不同wordCloud.setColorPalette(new ColorPalette(new Color(0x4055F1), new Color(0x408DF1), new Color(0x40AAF1), new Color(0x40C5F1), new Color(0x40D3F1), new Color(0xFFFFFF)));// 设置字体java.awt.Font font = new java.awt.Font("楷体", 0, 20);wordCloud.setKumoFont(new KumoFont(font));// 设置偏转角,角度为0时,字体都是水平的
//        wordCloud.setAngleGenerator(new AngleGenerator(0, 90, 9));wordCloud.setAngleGenerator(new AngleGenerator(0));// 字体的大小范围,最小是多少,最大是多少wordCloud.setFontScalar(new SqrtFontScalar(5, 40));wordCloud.build(wordFrequencies);wordCloud.writeToFile(pngOutputPath);}
}

2. 方法详解

2.1 FrequencyFileLoader

加载每个单词及其频次有两种方法,一种是使用FrequencyAnalyzer,统计文档中每个词出现的次数。另一种是FrequencyFileLoader,直接获取每个词及出现的次数。每行使用 次数:词 的形式。
使用如下语句进行加载

wordFrequencies = frequencyFileLoader.load(file);

例如如下文件:

1: 赤赤
2: 赤橙
3: 赤红
4: 赤绿
5: 赤青
6: 赤蓝
7: 赤紫
8: 橙赤
9: 橙橙
10: 橙红
11: 橙绿
12: 橙青
13: 橙蓝
14: 橙紫
15: 红赤
16: 红橙
17: 红红
18: 红绿
19: 红青
20: 红蓝
21: 红紫
22: 绿赤
23: 绿橙
24: 绿红
25: 绿绿
26: 绿青
27: 绿蓝
28: 绿紫
29: 青赤
30: 青橙
31: 青红
32: 青绿
33: 青青
34: 青蓝
35: 青紫
36: 蓝赤
37: 蓝橙
38: 蓝红
39: 蓝绿
40: 蓝青
41: 蓝蓝
42: 蓝紫
43: 紫赤
44: 紫橙
45: 紫红
46: 紫绿
47: 紫青
48: 紫蓝
49: 紫紫

2.2 WordCloud

wordCloud.setBackground

设置背景样式,背景类包括CircleBackground、RectangleBackground、PixelBoundaryBackground。
最好用的莫过于PixelBoundaryBackground,可以使用一张透明背景图来限制词云生成的位置。
使用如下语句设置背景。

wordCloud.setBackground(new PixelBoundaryBackground(shapePicPath));

我使用如下图片进行词云生成。

最后效果:

wordCloud.setAngleGenerator

设置词旋转角度。
有两种形式,第一种是所有词的角度都相同。

        wordCloud.setAngleGenerator(new AngleGenerator(0));

第二种是不同的词进行随便的旋转,从一个角度到另一个角度,设置一个step,限制有几个随机值。

wordCloud.setAngleGenerator(new AngleGenerator(0, 90, 9));

java词云生成,kumo项目详解相关推荐

  1. java词云生成Kumo

    1,先前在网上寻找Java词云生成包kumo 在gitthub上导入 1)核心包 <dependency><groupId>com.kennycason</groupId ...

  2. 词云生成库WordCloud详解(一):概述、ImageColorGenerator类

    当前wordcloud版本:1.81 项目地址:https://github.com/amueller/word_cloud API.案例地址:https://amueller.github.io/w ...

  3. 词云生成库wordcloud详解(三):IntegralOccupancyMap类——词云布局机制

    当前wordcloud版本:1.81 词云绘制需求 在绘制词云时大概有以下需求: 词与词之间相互不重叠. 尽可能填充满整个空间,词与词之间间隙比较小. 空间可能按照某张图片布局,即所有词要布局在图片的 ...

  4. 【问题解决方法】java词云库kumo色差

    参考kumo的github链接 利用kumo制作java的词云,不过出现了严重的色差,而且字体很模糊,无法通过修改分辨率和字体大小解决,修改背景和字体颜色也没办法改成想要的颜色,后来发现是图片的保存格 ...

  5. java+vue实现词云生成+展示(kumo+echarts-wordcloud )

    好久没有写过博客了最近项目上的事情弄的很焦灼,最近有点空闲的时间就把项目中学到的东西多多的总结一下,这个词云是我之前写过的一些功能,当时是有一个这个需求自己搜集了一些可以用到的依赖和三方的包,好了话不 ...

  6. python中文分词器-jieba分词器详解及wordcloud词云生成

    jieba分词 jieba分词支持三种分词模式: 精确模式, 试图将句子最精确地切开,适合文本分析 全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义 搜索引擎模式,在精确模 ...

  7. java词云推荐(KUMO)

    hello,各位,大年初二,给大家拜年了! 今天给大家介绍一下,使用java生成词云的方法和框架--KUMO(来自github),KUMO是一款使用java编写,应用于词频分析,词云生成的开源技术.不 ...

  8. java对接阿里云短信服务详解(验证码,推广短信,通知短信)

    前言 小前提: - java:springboot框架,maven版本管理. - 阿里云:有账号,已经进行实名认证. java对接阿里云短信服务详解(验证码,推广短信,通知短信) 前言 1. 登录阿里 ...

  9. Java词云--Kumo使用

    前言 Kumo是一个开源的Java词云工具,可以快速构建词云图片. 开源地址 Github:https://github.com/kennycason/kumo 码云:https://gitee.co ...

最新文章

  1. 1024 鲲鹏开发者技术沙龙·福州站圆满收官!给程序员的福利你收到了吗?
  2. 小学生四则运算出题程序 无操作界面java版 简单的运用java中一些基本操作
  3. html=r.text,在R中使用text()
  4. 红橙Darren视频笔记 利用阿里巴巴AndFix进行热修复
  5. php测试接口的小工具,PHP API接口测试小工具
  6. windows NFS 配置
  7. .hpp文件_16、OpenCV读写XML和YML文件
  8. xp共享文件win7访问时不能保存密码
  9. Kaldi语料的两种切分/组织方式及其处理
  10. navicat for MySQl破解版下载与安装
  11. 局域网共享工具_win10一键共享工具免费版(快速解决局域网文件共享问题)官方版...
  12. 【Python】torrentParser1.01
  13. TextpatternCMS安装插件时可以安装后门导致getshell
  14. sai钢笔图层怎么移动某条线?
  15. 如何从Apple电子钱包中删除旧登机牌
  16. 这群人,用8年讲述体育能有多迷人
  17. 对Python语言课程的建议
  18. 基于SPSS Moderler和R语言的数据挖掘宽表处理
  19. php开发h5游戏,H5的canvas实现贪吃蛇小游戏
  20. 360兼容性问题:教资报名请使用搜狗浏览器(兼容模式)、360浏览器(兼容模式)、QQ浏览器(内核模式请选择:总是使用IE内核)、IE系列浏览器。

热门文章

  1. Matlab中滤波器的设计(FDAT)
  2. 【北邮国院大二下】产品开发与营销知识点整理 Topic4
  3. 序列化和反序列化二叉树 -----前序,中序,后序,层序
  4. ausu-fx80-efi黑苹果10.15.7
  5. 什么是强化学习?强化学习之父:它是人工智能的未来
  6. 4-HDFS API
  7. YbtOj#20073. 「NOIP2020 模拟赛 B 组 Day6」钻石守卫
  8. notion函数_【notion】关于进度管理-时间函数的一点小心得
  9. EventBus 最简易的使用方式
  10. Python连接postgresql数据库入门