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

这篇具有很好参考价值的文章主要介绍了使用kennycason.kumo.WordCloud For JAVA 制作词云图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第三方官网参考:https://kennycason.com/posts/2014-07-03-kumo-wordcloud.html  

前言
当我们想要对文本数据进行可视化分析时,词云是一个强大的工具,可以帮助我们直观地理解文本中的关键词和频率。在本文中,我们将介绍如何使用Java编写一个简单的词云生成程序,并用它分析一段示例文本。

生成词云图效果展示:

使用kennycason.kumo.WordCloud For JAVA 制作词云图,JAVA,java,词云图,kennycason,WordCloud,数据字典

一、什么是词云?

词云是一种可视化工具,用于显示文本数据中的关键词,并根据关键词的频率和重要性将它们呈现为视觉效果。通常,出现频率较高的关键词会以较大的字体大小显示,而出现频率较低的关键词会以较小的字体大小显示,从而帮助我们快速了解文本数据的主要内容。

二、使用Java生成词云

我们将使用Java中的一些库来生成词云。首先,确保你的项目中包含以下库的依赖:

一:添加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();
        //设置要返回的词频数量,这里设置为 600
        frequencyAnalyzer.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和value
        list.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;
    }

}

三:测试运行结果:

使用kennycason.kumo.WordCloud For JAVA 制作词云图,JAVA,java,词云图,kennycason,WordCloud,数据字典生产运行结果:

使用kennycason.kumo.WordCloud For JAVA 制作词云图,JAVA,java,词云图,kennycason,WordCloud,数据字典

使用kennycason.kumo.WordCloud For JAVA 制作词云图,JAVA,java,词云图,kennycason,WordCloud,数据字典

可以单独设置纬度高的词语颜色,字体稀疏度和字体的旋转角度, 都在代码当中,如果有比较好的修改建议,可以评论区留言,一起学习文章来源地址https://www.toymoban.com/news/detail-811829.html

到了这里,关于使用kennycason.kumo.WordCloud For JAVA 制作词云图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python制作词云图

    前段时间,在上课的时候,老师发布了一个在线讨论,后面,老师把所有同学的回答结果展示了出来,不同颜色和不同大小,这样就一目了然看出了同学们回答的最多的是哪些,这让我对词云图产生了兴趣,于是参考了下面博主代码,自己做了测试。 利用python制作词云

    2024年02月16日
    浏览(36)
  • 利用python制作词云图

    目录 前言 一、使用步骤 1.下载所需库 2.引入库 3.打开文本 4.分词 5.生成词云图 6.保存文件 总结         词云图是一种为了文本数据的视觉表示,由词汇组成类似云的彩色图形,当需要统计文本中出现词汇的规模大小时,我们可以使用此类图形。本文将介绍如何用python代码

    2024年02月11日
    浏览(30)
  • 【Java】Java中使用HashMap优化多层for循环嵌套以及for循环之性能优化

    for循环是开发时常用的语法之一,比如对数组,集合的遍历等,但是如果使用不好也会出现很多新能损耗的问题,今天就来讲解一下for循环的常用性能优化问题。 for循环 里面还有 for循环, 然后做一些数据匹配、处理 这种场景。 m层嵌套的n次的for循环的时间复杂度为O(n^m),

    2024年02月16日
    浏览(42)
  • 使用Java制作一个简易的远控终端

    1、环境 环境:IntelliJ IDEA 2022.1.1 + jdk1.8 + exe4j.exe 2、新建项目 打开idea,直接新建一个最普通的Java项目即可。 3、新建一个Java类 4、编写程序 (1)导入需要使用到的类包 (2)编写main方法 (3)建立socket连接 (4)接收服务端传输的消息(即命令) 其中需要将接收数据的字节流先转化为16进

    2024年02月05日
    浏览(36)
  • java for循环内部使用线程

    2024年02月06日
    浏览(36)
  • java使用swing制作桌面图形应用的实例教程

    本篇文章主要讲解,java编程语言通过swing制作桌面图形应用的实例教程,通过一个简单的个人信息提交表单界面,让你了解swing的布局管理、窗口图标设置、编译和运行以及窗口菜单的设置。 日期:2023年8月25日 弹出新窗口帮助文档界面: 说明:设置新窗口图标和主窗口一致

    2024年02月11日
    浏览(37)
  • 让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud)

    词云Word Cloud的制作方法(基于python) 本文目录: 一、词云的简介 二、 实现原理和流程 1、制作词云流程图 2、词云实现原理 三、 实现词云的方式 1、安装词云相关模块库 2、WordCloud库 3、stylecloud库 四、总结 词云,又称文字云,英文名:Word Cloud。是文本数据的视觉表示形式。

    2023年04月09日
    浏览(45)
  • Python Wordcloud报错:Only supported for TrueType fonts,多种解决方案

    Python Wordcloud报错:Only supported for TrueType fonts,多种解决方案。 报错内容如下: 2023-10-26T09:35:41.190459839Z Traceback (most recent call last): 2023-10-26T09:35:41.190502589Z File “lib/task/compute.py”, line 621, in 2023-10-26T09:35:41.190514101Z compute_match_rule(rule_data) 2023-10-26T09:35:41.190521681Z File “lib/task/comp

    2024年02月07日
    浏览(45)
  • 简单的用Python采集下微博评论,制作可视化词云图

    简单的用Python来获取微博评论,制作词云图。 环境使用 Python 3.8或以上版本即可 Pycharm 任意版本 模块使用   以上三个模块都需要安装,直接pip install 加上模块名安装即可。 一. 数据来源分析 明确需求: 明确采集的网站以及数据内容 - 网址: https://weibo.com/2803301701/NxcPMvW2l - 数据

    2024年02月04日
    浏览(40)
  • java电子病历源码 电子病历编辑器源码 病历在线制作、管理和使用

    电子病历在线制作、管理和使用的一体化电子病历解决方案,通过一体化的设计,提供对住院病人的电子病历书写、保存、修改、打印等功能。电子病历系统将临床医护需要的诊疗资料以符合临床思维的方法展示。建立以病人为中心,以临床诊疗信息为主线,集成门急诊、住

    2024年02月11日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包