使用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.hqwc.cn/news/336201.html

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

相关文章

C# Emgu.CV4.8.0读取rtsp流录制mp4可分段保存

【官方框架地址】 https://github.com/emgucv/emgucv 【算法介绍】 EMGU CV&#xff08;Emgu Computer Vision&#xff09;是一个开源的、基于.NET框架的计算机视觉库&#xff0c;它提供了对OpenCV&#xff08;开源计算机视觉库&#xff09;的封装。EMGU CV使得在.NET应用程序…

「服务器」4.新手小白如何安装服务器环境-宝塔

刚开始初始化好的服务器&#xff0c;使用了阿里云客户端&#xff0c;看着网络脚本乱装&#xff0c;后来决定宝塔环境发现有重复的环境&#xff0c;遂决定重新初始化一下&#xff0c;然后重头干起。 重置服务器 将服务器关闭运行状态后&#xff0c;点击重新初始化云盘即可重新初…

Vue3导出el-table为execl文件

在开发时遇到了这样的需求&#xff0c;整理之后向大家分享一下&#xff0c;欢迎积极讨论与指正哦 因为在实现表格时使用了分页插件&#xff0c;在导出时只能导出本页的内容&#xff0c;最后选择了这样的方法&#xff1a; 正常显示的表格使用分页后的数据 在这里设置了id 而用…

计算机网络-各层协议

大家在搞嵌入式开发的时候基本都了解过七层网络协议、五层网络协议、四层网络协议&#xff0c;那么今天让我们更加的深入了解一下&#xff1a; 历史发展介绍 OSI七层模型由ISO国际标准化组织提出的通信标准。TCP/IP四层模型是OSI七层模型的简化版&#xff0c;OSI在它被官方完…

LINUX基础第十一章:文件系统与日志服务管理

目录 一.LINUX文件系统 1.inode表和block &#xff08;1&#xff09;inode &#xff08;2&#xff09;block 2.查看inode号命令 3.Linux系统文件三种主要时间属性 4.磁盘空间还剩余很多但无法继续创建文件 5.inode大小 二.日志 1.日志保存位置 2.日志文件的分类 &am…

借助 ControlNet 生成艺术二维码 – 基于 Stable Diffusion 的 AI 绘画方案

&#xfeff;背景介绍 在过去的数月中&#xff0c;亚马逊云科技已经推出了多篇 Blog&#xff0c;来介绍如何在亚马逊云科技上部署 Stable Diffusion&#xff0c;或是如何结合 Amazon SageMaker 与 Stable Diffusion 进行模型训练和推理任务。 为了帮助客户快速、安全地在亚马…

高通平台开发系列讲解(USB篇)adb function代码分析

文章目录 一、FFS相关动态打印二、代码入口三、ffs_alloc_inst四、ep0、ep1&ep2的注册五、读写过程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文主要介绍高通平台USB adb function代码f_fs.c。 一、FFS相关动态打印 目录:msm-4.14/drivers/usb/gadget/fun…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷③

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷3 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷3 模块一 …

LeetCode刷题--- 最小路径和

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述动…

Python基础入门第九课笔记(文件和文件夹)

1&#xff0c;新建文本并且写内容 a open(1.text,w) a.write("""aaa bbb ccc""") a.close() 2,seek( )移动文件指针 文件对象.seek(偏移量&#xff0c;起始位置) # 起始位置&#xff1a;0开头&#xff0c;1当前位置&#xff0c;2文件结尾…

python接口自动化(十)--post请求四种传送正文方式(详解)

1.简介 post请求我在python接口自动化&#xff08;八&#xff09;--发送post请求的接口&#xff08;详解&#xff09;已经讲过一部分了&#xff0c;主要是发送一些较长的数据&#xff0c;还有就是数据比较安全等。我们要知道post请求四种传送正文方式首先需要先了解一下常见的四…

xilinix 7系列器件生成已加密文件和已经过身份验证的文件

注释 &#xff1a;如需了解更多信息&#xff0c;请参阅《使用加密确保 7 系列 FPGA 比特流的安全》(XAPP1239)。 要生成加密比特流&#xff0c;请在 Vivado IDE 中打开已实现的设计。在主工具栏中&#xff0c;依次选择“Flow” → “Bitstream Settings”&#xff08;流程 >…