使用kennycason.kumo.WordCloud For JAVA 制作词云图

官网:https://kennycason.com/posts/2014-07-03-kumo-wordcloud.html  

一:添加POM文件

		<!-- 词云 --><dependency><groupId>com.kennycason</groupId><artifactId>kumo-core</artifactId><version>1.27</version></dependency><dependency><groupId>com.kennycason</groupId><artifactId>kumo-tokenizers</artifactId><version>1.27</version></dependency>

 二:词云图方法生成

import cn.hutool.core.lang.UUID;
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.font.KumoFont;
import com.kennycason.kumo.image.AngleGenerator;
import com.kennycason.kumo.nlp.FrequencyAnalyzer;
import com.kennycason.kumo.nlp.tokenizers.ChineseWordTokenizer;
import com.kennycason.kumo.palette.LinearGradientColorPalette;
import com.kennycason.kumo.placement.RectangleWordPlacer;
import com.*.*.bigdata.dto.GxyItemData;
import com.*.*.bigdata.entity.SchoolGeneralDataEntity;
import com.*.*.bigdata.utils.AutoReport.CreateSchoolReportV4;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.system.ApplicationHome;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import java.awt.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
import java.util.List;/*** ClasseName: WordCloud** @Author: 李指导* @Create: 2024/01/09 - 12:44* @Version: v1.0* Description: 通过com.kennycason生成词云图**/
public class WordCloudUtils {private static final Logger logger= LoggerFactory.getLogger(WordCloudUtils.class);public static final String PATH = "src/main/resources/image/";public static void main(String[] args) throws IOException, IllegalAccessException {//GxyItemData 为我自己的对象 这里可以根据实际情况切换List<GxyItemData> list = new ArrayList<>();GxyItemData data = new GxyItemData();data.setName("张三");data.setName2("一年级");data.setValue2("25");data.setValue1("100");data.setValue4(new double[] {100});GxyItemData data2 = new GxyItemData();data2.setName("李四");data2.setName2("二年级");data2.setValue2("74");data2.setValue1("200");data2.setValue4(new double[] {100});GxyItemData data3 = new GxyItemData();data3.setName("王五");data3.setName2("三年级");data3.setValue2("60");data3.setValue1("300");data3.setValue4(new double[] {100});list.add(data);list.add(data2);list.add(data3);GxyItemData dataa = new GxyItemData();dataa.setName("马六");dataa.setName2("一年级");dataa.setValue2("45");dataa.setValue1("220");dataa.setValue4(new double[] {100});GxyItemData dataa2 = new GxyItemData();dataa2.setName("九七");dataa2.setName2("二年级");dataa2.setValue2("14");dataa2.setValue1("1200");dataa2.setValue4(new double[] {100});GxyItemData dataa3 = new GxyItemData();dataa3.setName("勾八");dataa3.setName2("三年级");dataa3.setValue2("40");dataa3.setValue1("2100");data.setValue4(new double[] {100});list.add(dataa);list.add(dataa2);list.add(dataa3);WordCloudUtils wordCloudUtils =new WordCloudUtils();wordCloudUtils.createWordCountPic(list);}/*** 制作词云图方法* **/public  String createWordCountPic(List<GxyItemData> list) throws IOException {//是一个用于分析文本中词频的工具类FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();//设置要返回的词频数量,这里设置为 600frequencyAnalyzer.setWordFrequenciesToReturn(600);//设置词的最小长度,这里设置为 2,表示忽略长度小于 2 的词。frequencyAnalyzer.setMinWordLength(2);//设置词的分词器,这里使用了中文的分词器 ChineseWordTokenizer,用于将中文文本拆分成单个词语。frequencyAnalyzer.setWordTokenizer(new ChineseWordTokenizer());// 可以直接从文件中读取List<WordFrequency> wordFrequencies = new ArrayList<>();// 用词语来随机生成词云Collections.sort(list, Comparator.comparing(GxyItemData::getValue2).reversed());//这里换成自己对象当中的参数,name和valuelist.forEach(c->{wordFrequencies.add(new WordFrequency(c.getName(),Integer.parseInt(c.getValue2())));});//设置图片分辨率Dimension dimension = new Dimension(300, 300);//此处的设置采用内置常量即可,生成词云对象WordCloud wordCloud = new com.kennycason.kumo.WordCloud(dimension, CollisionMode.PIXEL_PERFECT);//词频的背景为白色wordCloud.setBackgroundColor(Color.WHITE);//调节词云的稀疏程度,越高越稀疏wordCloud.setPadding(0);//字号的大小范围,最小是多少,最大是多少//wordCloud.setFontScalar(new LinearFontScalar(10, 200));//设置词云显示的三种颜色,越靠前设置表示词频越高的词语的颜色//wordCloud.setColorPalette(new ColorPalette(15));wordCloud.setColorPalette(new LinearGradientColorPalette(new Color(90,174,243), new Color(251,110,108), new Color(254,182,77), 30, 30));// 设置字体 //此处不设置会出现中文乱码 字体设置为仿宋wordCloud.setKumoFont(new KumoFont(new Font("楷体", Font.BOLD, 25)));// 设置偏转角,角度为0时,字体都是水平的wordCloud.setAngleGenerator(new AngleGenerator(2,2,2));wordCloud.setBackground(new CircleBackground(100));wordCloud.build(wordFrequencies);//生成词云图路径UUID uuid = UUID.randomUUID();String hexString = uuid.toString().replace("-", "").substring(0,32);//获取编译路径,这里运行后会写到改目录下,可以自定义一个目录,String targetPath = "./output/";//String targetPath = this.getClass().getResource("/").getPath()String path = targetPath+hexString+".png";// windows目录符号 \\  , 提交到linux 要改成 //File filePath = new File(targetPath+File.separator);if(!filePath.exists()){filePath.mkdirs();}wordCloud.writeToFile(path);return path;}}

测试运行结果:

生产运行结果:

 可以单独设置纬度高的词语颜色,字体稀疏度和字体的旋转角度, 都在代码当中,如果有比较好的修改建议,可以评论区留言,一起学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/235378.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开启Android学习之旅-2-架构组件实现数据列表及添加(kotlin)

Android Jetpack 体验-官方codelab 1. 实现功能 使用 Jetpack 架构组件 Room、ViewModel 和 LiveData 设计应用&#xff1b;从sqlite获取、保存、删除数据&#xff1b;sqlite数据预填充功能&#xff1b;使用 RecyclerView 展示数据列表&#xff1b; 2. 使用架构组件 架构组…

06、Kafka ------ 各个功能的作用解释(ISR 同步副本、非同步副本、自动创建主题、修改主题、删除主题)

目录 CMAK 各个功能的作用解释★ ISR副本 (同步副本&#xff09;★ 非同步副本★ 自动创建主题★ 修改主题★ 删除主题 CMAK 各个功能的作用解释 ★ ISR副本 (同步副本&#xff09; 简单来说 &#xff0c;ISR 副本 就是 Kafka 认为与 领导者副本 同步的副本。 ISR&#xff0…

从0开始python学习-47.pytest框架之解决Template替换无法进行二次处理的问题之热加载

问题&#xff1a;当参数为动态参数时&#xff0c;Template替换无法进行二次处理 解决方案&#xff1a;通过热加载来进行替换 热加载原理&#xff1a;在代码运行的过程中动态的调用python中的方法达到获得动态参数 可以进行热加载的情况&#xff1a;yaml文件&#xff0c;随机…

Docker 发布自定义镜像到公共仓库

Docker 发布自定义镜像到公共仓库 引言 Docker 是一种轻量级、便携式的容器化技术&#xff0c;可以使应用程序在不同环境中更加可移植。在本文中&#xff0c;我们将学习如何使用 Docker 从公共仓库拉取 Nginx 镜像&#xff0c;定制该镜像&#xff0c;添加自定义配置文件&…

在docker上运行LCM

目录 1.加载镜像并进入容器 2.安装依赖 3.在docker外部git-clone lcm 4.将get-clone的lcm复制到容器中 5.编译库 6.将可执行文件复制到容器中 7.进入可执行文件 8.编译可执行文件 9.再开一个终端运行程序 10.将以上容器打成镜像并导出 1.加载镜像并进入容器 sudo do…

【Python期末】动态爬取电影Top250数据可视化处理(有GUI界面/无数据库)

诚接计算机专业编程作业(C语言、C、Python、Java、HTML、JavaScript、Vue等)&#xff0c;10/15R左右&#xff0c;如有需要请私信我&#xff0c;或者加我的企鹅号&#xff1a;1404293476 本文资源&#xff1a;https://download.csdn.net/download/weixin_47040861/88713693 目录…

密码学(三)

文章目录 前言一、Software Attestation Overview二、Authenticated Key Agreement三、The Role of Software Measurement 前言 本文来自 Intel SGX Explained 请参考&#xff1a; 密码学&#xff08;一&#xff09; 密码学&#xff08;二&#xff09; 一、Software Attesta…

重新认识Elasticsearch-一体化矢量搜索引擎

前言 2023 哪个网络词最热&#xff1f;我投“生成式人工智能”一票。过去一年大家都在拥抱大模型&#xff0c;所有的行业都在做自己的大模型。就像冬日里不来件美拉德色系的服饰就会跟不上时代一样。这不前段时间接入JES&#xff0c;用上好久为碰的RestHighLevelClient包。心血…

浏览器缓存引发的odoo前端报错

前两天&#xff0c;跑了一个odoo16项目&#xff0c;莫名其妙的前端报错&#xff0c; moment.js 报的错&#xff0c; 这是一个时间库&#xff0c;不是我自己写的代码&#xff0c;我也没做过任何修改&#xff0c;搞不清楚为什么报错。以为是odoo的bug&#xff0c;所以从gitee下载…

xxl-job 分布式任务调度平台使用,图文版

一&#xff0c;前言 今天公司要升级job平台&#xff0c;需要把以前的调度任务全部平移到新的job平台中&#xff0c; 所以学习了解一下job平台的使用&#xff0c;方便以后回顾。 二&#xff0c;操作 1&#xff0c;拉取代码&#xff0c;启动任务调度平台 gitee地址&#xff…

Win10子系统Ubuntu实战(二)

在 Windows 10 中安装 Ubuntu 子系统&#xff08;Windows Subsystem for Linux&#xff0c;简称 WSL&#xff09;有几个主要的用途和好处&#xff1a;Linux 环境的支持、跨平台开发、命令行工具、测试和验证、教育用途。总体而言&#xff0c;WSL 提供了一种将 Windows 和 Linux…

阿赵UE学习笔记——8、贴图导入设置

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的用法&#xff0c;这次来说一下贴图的导入设置。   在内容浏览器里面可以看到纹理类型的资源&#xff0c;就是贴图了&#xff0c;鼠标悬浮在上面可以看到这个纹理贴图的信息&#xff1a; 双击纹理贴图…

CAN-FD总线协议深度解析-简单易懂协议详解

关注菲益科公众号—>对话窗口发送 “CANoe ”或“INCA”&#xff0c;即可获得canoe入门到精通电子书和INCA软件安装包&#xff08;不带授权码&#xff09;下载地址。 1.CAN-FD协议特性 CAN 总线通信也渐渐显现出来一些不足&#xff0c;主要有以下几方面&#xff1a; &…

2024年我国网络安全发展形势展望

2023年&#xff0c;我国网络安全政策法规陆续出台&#xff0c;网络安全与数据安全产业发展势头强劲&#xff0c;网络安全形势整体向好。展望2024年&#xff0c;世界各国在网络空间中的竞争将变得愈发激烈&#xff0c;我国网络安全领域的法律法规将不断完善&#xff0c;数据安全…

wpf的资源路径

1、手动命名空间 xmlns:share"clr-namespace:***;assembly**" 2、资源文件 Pack URI 编译到本地程序集内的资源文件的 pack URI 使用以下授权和路径&#xff1a; 授权&#xff1a;application:///。 路径&#xff1a;资源文件的名称&#xff0c;包括其相对于本地…

Java架构师设计模式事件驱动架构

目录 1 导语2 事件驱动架构模式:类别notification3 事件驱动架构模式:何谓EDA4 事件驱动架构模式EDA两种Topology介绍5 事件驱动架构模式EDA两种Topology:EventMe6 事件驱动架构模式EDA两种Topology:Mediato7 事件驱动架构模式EDA两种Topology:Broker8 事件驱动架构模式ED…

Linux安装MongoDB教程

下载MongoDB安装包 1、官网地址; 下载链接 选择版本 下载好了之后上传到服务器开始安装。 解压 解压 mongodb-linux-x86_64-rhel70-4.2.23.tgz 文件&#xff1a; 解压文件必须进入到压缩包所在的目录&#xff1a; cd /usr/local tar -zxvf mongodb-linux-x86_64-rhel70-4…

ARMv8-AArch64 的异常处理模型详解之异常等级、执行状态以及安全状态

ARMv8-AArch64 的异常处理模型详解 一&#xff0c;特权和异常等级1.1 异常等级 Exception levels 二&#xff0c;特权的类型2.1 内存特权2.2 访问寄存器的特权 三&#xff0c;执行状态和安全状态3.1 执行状态 Execution states3.2 执行状态切换 3.3 安全状态 Security states3.…

IDEA中在Java项目中添加Web模块 与配置tomcat服务器

现有项目添加直接走第二步 生成普通新项目 给项目添加框架支持 勾选 Web Application 选项, 点击OK 得到项目目录结构 , 出现web目录结构, 且web目录文件夹出现小蓝点 web或webapp 没有出现小蓝点 说明web配置没有出现或是手动构建的目录结构 , 在IDE关闭或者迁移项目时会出…

【普中开发板】基于51单片机的简易密码锁设计( proteus仿真+程序+设计报告+讲解视频)

基于51单片机的简易密码锁设计 1.主要功能&#xff1a;资料下载链接&#xff1a; 实物图&#xff1a;2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单 【普中】基于51单片机的简易密码锁设计 ( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus8.16(有低版本) 程…