使用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.mzph.cn/news/611875.shtml

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

相关文章

CHS_01.1.4+操作系统体系结构 一

CHS_01.1.4操作系统体系结构 一 操作系统的体系结构 也就是操作系统的内核应该怎么设计这样一个问题操作系统的内核 在这个小节中 我们会学习 操作系统的体系结构 也就是操作系统的内核应该怎么设计这样一个问题 那这个小节的内容我们只需要做简要的了解就可以了 我们考试中常考…

Day3Qt

1. &#xff08;1&#xff09;完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 …

C++并发编程实战第2版笔记

文章目录 p19 某个线程只可以join()一次p22 只有当joinable()返回true时才能调用detach()P21 在std::thread对象析构前&#xff0c;必须明确是等待还是分离线程P25 移动语义P25 将类的成员函数设定为线程函数 p19 某个线程只可以join()一次 只要调用了join()&#xff0c;隶属于…

概述:利用大模型 (LLMs) 解决信息抽取任务

论文标题&#xff1a;Large Language Models for Generative Information Extraction: A Survey 论文链接&#xff1a;https://arxiv.org/pdf/2312.17617.pdf 论文主要探讨了大型语言模型&#xff08;LLMs&#xff09;在生成式信息抽取&#xff08;IE&#xff09;任务中的应用…

文献阅读1

A Hierarchical Representation Network for Accurate and Detailed Face Reconstruction from In-The-Wild Images 会议/期刊&#xff1a;CVPR 2023&#xff1b;阿里达摩院&#xff1b;Biwen Lei 概述&#xff1a;这是一篇单张图片三维人脸重建的论文&#xff0c;这篇论文的…

Android 事件分发介绍

文章目录 一、目的二、环境三、相关概念3.1 事件分发 四、详细设计4.1应用布局4.1.1 应用布局结构4.1.2 LayoutInspector 4.2 关键View&方法4.2.1 相关View4.2.2 相关方法4.2.3 View与方法关系 4.3 事件分发概念图4.3.1 事件分发类图4.3.2 事件分发模型图 4.4 Activity组件…

Federated Unlearning for On-Device Recommendation

WSDM 2023 CCF-B Federated Unlearning for On-Device Recommendation 本文工作的主要介绍 本文主要介绍了一种名为FRU&#xff08;Federated Recommendation Unlearning&#xff09;的联邦学习框架&#xff0c;用于在设备端的推荐系统中实现用户数据的有效擦除和模型重建。…

0x53 区间DP

0x53 区间DP 到目前为止&#xff0c;我们介绍的线性DP一般从初态开始&#xff0c;沿着阶段的扩张向某个方向递推&#xff0c;直至计算出目标状态。区间DP也属于线性DP中的一种&#xff0c;它以“区间长度”作为DP的“阶段”&#xff0c;使用两个坐标&#xff08;区间的左右端点…

Python-面向对象

面向对象 1.初识对象1.1理解使用对象完成数据组织的思路 2.成员方法2.1类的定义和使用语法2.2成员方法的使用 3.类和对象4.构造方法4.1使用构造方法向成员变量赋值 5.其他内置方法5.1__str__字符串方法5.2__lt__小于符号比较方法5.3__le__小于等于比较符号5.4__eq__比较运算符实…

VUE3相比VUE2升级了哪些内容

目录 一、Vue 3 、Vue 2 对比及提升项 二、 Vue 3 创建app.vue示例 三、Vue3 的setup、Vue2 的 data对比 一、Vue 3 、Vue 2 对比及提升项 性能提升&#xff1a;Vue 3 做了大量的优化工作&#xff0c;提升了运行时的性能。例如&#xff0c;在模板编译时进行的静态分析和优化…

如何把苹果手机中的备忘录导入到电脑?这种方法特别方便

作为苹果手机的忠实用户&#xff0c;我深知备忘录在日常生活中的重要性。它是我随手记下的灵感闪现&#xff0c;是工作会议的要点记录&#xff0c;更是生活中的小提醒和重要事务的备忘录。然而&#xff0c;有时我需要将这些信息从手机导入到电脑中&#xff0c;以便更方便地查看…

k8s的存储卷---数据卷

前言 容器磁盘上的文件的生命周期是短暂的&#xff0c;这就使得在容器中运行重要应用时会出现一些问题。首先&#xff0c;当容器崩溃时&#xff0c;kubelet 会重启它&#xff0c;但是容器中的文件将丢失——容器以干净的状态&#xff08;镜像最初的状态&#xff09;重新启动。其…

【大数据OLAP引擎】StarRocks为什么快?

StarRocks的优势 StarRocks最初主要的优势是性能&#xff0c;当时在单表查询方面与性能标杆ClickHouse不相上下&#xff0c;而join优化特性使其在多表关联查询场景下的性能表现要远远优于ClickHouse&#xff0c;替换ClickHouse自然也就成了StarRocks的第一个目标。 而StarRoc…

three.js实现雷达扫描效果(纹理贴图)

three.js实现雷达扫描效果&#xff08;纹理贴图&#xff09; 图例 步骤 创建两个平面&#xff0c;分别纹理贴图&#xff0c;底图模型.add&#xff08;光波模型&#xff09;关闭材质的深度测试光波旋转 代码 <template><div class"app"><div ref&q…

【算法每日一练]-练习篇 #Tile Pattern #Swapping Puzzle # socks

目录 今日知识点&#xff1a; 二维前缀和 逆序对 袜子配对(感觉挺难的&#xff0c;又不知道说啥) Tile Pattern Swapping Puzzle socks Tile Pattern 331 题意&#xff1a;有一个10^9*10^9的方格。W表示白色方格&#xff0c;B表示黑色方格。每个(i,j)方的颜色由(i…

Unity真机Log工具 SRDebugger使用记录,GM布局管理

SRDebugger 官方文档安装及初始化常用设置选项布局选项快捷键选项高级设置 使用GM工具案例常用特性GM分组排序GM固定页签 官方文档 文档&#xff1a; https://www.stompyrobot.uk/tools/srdebugger/documentation/ 插件地址&#xff1a; https://assetstore.unity.com/package…

数据结构及单链表例题(下)

上次我们已经了解了单链表的数据结构定义以及创建单链表的两种方法,这节介绍几道例题. 文章目录 前言 一、已知L为带头结点的单链表,请依照递归思想实现下列运算 二、单链表访问第i个数据节点 三、在第i个元素前插入元素e 四、删除第i个结点 五、查找带头结点单链表倒数第…

TS 36.322 V12.0.0-过程

​本文的内容主要涉及TS 36.322&#xff0c;版本是C00&#xff0c;也就是V12.0.0。

构建安全可靠的系统:第十一章到第十五章

第三部分&#xff1a;实现系统 原文&#xff1a;Part III. Implementing Systems 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 一旦您分析并设计了您的系统&#xff0c;就该是实现计划的时候了。在某些情况下&#xff0c;实现可能意味着购买现成的解决方案。第十一章…

QT第1天

题目&#xff1a;点击按钮改变文字 需要增加一个count属性&#xff0c;并且只需要定义槽&#xff0c;信号函数已经内置好了 //widget.h#ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Wi…