Java词云--Kumo使用

词云

前言

Kumo是一个开源的Java词云工具,可以快速构建词云图片。

开源地址

  • Github:https://github.com/kennycason/kumo
  • 码云:https://gitee.com/lyy289065406/kumo

Maven

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

使用方法

首先创建一个FrequencyAnalyzer(词频分析)对象,该对象用来统计我们所需要构造词云数据的频率,主要包含以下方法:

方法名参数说明
loadInputStream从流中获取语料
loadFile从文件中获取语料
loadString从路径中打开文件获取语料
loadURL从URL中获取语料
loadList从字符串数组中获取语料
setWordTokenizerWordTokenizer设置分词器 主要有ChineseWordTokenizerEnglishWordTokenizer
setWordFrequenciesToReturnint设置返回数据长度
setMinWordLengthint最小分词长度
setMaxWordLengthint最大分词长度
public static String getWordCloud(List<String> words) {
    // 新建FrequencyAnalyzer 对象
    FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();
    // 设置分词返回数量(频率最高的600个词)
    frequencyAnalyzer.setWordFrequenciesToReturn(600);
    // 最小分词长度
    frequencyAnalyzer.setMinWordLength(2);
    // 引入中文解析器
    frequencyAnalyzer.setWordTokenizer(new ChineseWordTokenizer());
   // 获取词语频率数据
    final List<WordFrequency> wordFrequencyList = frequencyAnalyzer.load(words);

创建一个Dimension对象,用于设置生成图片的分辨率。

    // 设置图片分辨率
    Dimension dimension = new Dimension(500, 500);

创建一个词云对象WordCloud

    WordCloud wordCloud = new WordCloud(dimension, CollisionMode.PIXEL_PERFECT);

    // 我也不知道有啥用 但是不加中文会乱码
    java.awt.Font font = new java.awt.Font("STSong-Light", 2, 18);
    wordCloud.setKumoFont(new KumoFont(font));

    // 设置边缘留空
    wordCloud.setPadding(2);
    // 设置颜色频率越高用越靠前的颜色
    wordCloud.setColorPalette(new ColorPalette(new Color(0xed1941), new Color(0xf26522), new Color(0x845538)));
    // 设置形状 这里用的圆 参数为半径
    wordCloud.setBackground(new CircleBackground(200));
    // 设置字体大小范围
    wordCloud.setFontScalar(new SqrtFontScalar(10, 40));
    // 设置背景色
    wordCloud.setBackgroundColor(new Color(255, 255, 255));

调用词云对象的build方法,参数为刚才生成的分词频率。

    // 生成词云
    wordCloud.build(wordFrequencyList);

最后可以对生成的图片进行处理,这里需要返回到前端,使用Base64编码

    OutputStream output = new ByteArrayOutputStream();
    wordCloud.writeToStream("png", output);
    byte[] outputByte = ((ByteArrayOutputStream)output).toByteArray();
    return org.apache.commons.codec.binary.Base64.encodeBase64String(outputByte);

完整代码如下

public static String getWordCloud(List<String> words) {
    FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();
    frequencyAnalyzer.setWordFrequenciesToReturn(600);
    frequencyAnalyzer.setMinWordLength(2);

    // 引入中文解析器
    frequencyAnalyzer.setWordTokenizer(new ChineseWordTokenizer());

    final List<WordFrequency> wordFrequencyList = frequencyAnalyzer.load(words);
    
    // 设置图片分辨率
    Dimension dimension = new Dimension(500, 500);
    // 此处的设置采用内置常量即可,生成词云对象
    WordCloud wordCloud = new WordCloud(dimension, CollisionMode.PIXEL_PERFECT);
    java.awt.Font font = new java.awt.Font("STSong-Light", 2, 18);
    wordCloud.setKumoFont(new KumoFont(font));
    wordCloud.setPadding(2);
    wordCloud.setColorPalette(new ColorPalette(new Color(0xed1941), new Color(0xf26522), new Color(0x845538),new Color(0x8a5d19),new Color(0x7f7522),new Color(0x5c7a29),new Color(0x1d953f),new Color(0x007d65),new Color(0x65c294)));    
    wordCloud.setBackground(new CircleBackground(200));
    wordCloud.setFontScalar(new SqrtFontScalar(10, 40));
    wordCloud.setBackgroundColor(new Color(255, 255, 255));
    // 生成词云
    wordCloud.build(wordFrequencyList);
    OutputStream output = new ByteArrayOutputStream();
    wordCloud.writeToStream("png", output);
    byte[] outputByte = ((ByteArrayOutputStream)output).toByteArray();
    return org.apache.commons.codec.binary.Base64.encodeBase64String(outputByte);
}

生成的效果图如下
在这里插入图片描述

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 很高兴回答你的问题。要用Java实现词云图,你可以使用Java开发的词云生成库,例如WordCloud或者JWC。这些库可以让你生成一个基于文本的词云图,你可以自己定义每个词的颜色、字体、大小等属性,生成一个美观的词云图。你需要准备好需要制作词云图的文本,然后使用这些库中的API调用,来实现词云图的生成。希望这个回答能够帮助你。 ### 回答2: 词云图是一种将文本数据中频繁出现的词汇按照词频可视化展示的图形。要用Java实现词云图,可以按照以下步骤进行操作: 1. 获取文本数据:首先需要从文件、数据库或网络等来源获取需要制作词云图的文本数据。 2. 文本预处理:对文本数据进行预处理,包括去除特殊字符、停用词、标点符号等,以保留重要的词汇。 3. 统计词频:对预处理后的文本数据,通过遍历每个词汇并计算其出现的频率,统计每个词汇的词频。 4. 生成词云图:使用第三方库或自行实现词云图的生成算法。一种常用的方式是使用Java的标准绘图库(如AWT、Swing等)来绘制词云图。 - 设置画布大小和背景颜色:创建一个窗口或画布,设置画布的大小和背景颜色。 - 根据词频大小设置词的大小:将词频按照从高到低排序,并将高频词与大的字体关联,低频词与小的字体关联。 - 随机生成词的位置和颜色:为每个词随机生成一个位置和颜色,保证词云图的多样性和美观性。 - 绘制词云图:使用选定的字体和位置信息,在画布上绘制词云图。 5. 显示词云图:将生成的词云图显示在图形界面上,或导出为图片格式保存。 以上是用Java实现词云图的基本步骤。需要注意的是,Java并非词云图的最佳实现语言,一些其他编程语言或工具如Python、R、JavaScript等也提供了更丰富的第三方库和工具来实现词云图。在选择具体实现方案时,建议根据实际需求和能力进行选择。 ### 回答3: 词云图是一种以文字为基础,呈现词语频率和重要性的可视化图形。如果想使用Java实现词云图,以下是一种简单的实现方法: 1. 准备工作:确保已经安装好Java开发环境,并且了解基本的Java编程知识。 2. 导入相关库:Java并没有原生支持词云图的库,但有许多第三方库可以实现。根据自己的需求选择合适的库,比如WordCloud、WordCloud2、Kumo等。 3. 获得文本数据:从本地文件或网络中获取待处理的文本数据。可以使用Java的文件读写功能,将文本内容读入内存中。 4. 数据处理:使用字符串处理函数将文本数据进行分词、过滤停用词等处理。可以使用Java的正则表达式和字符串处理方法。 5. 构建词频统计:根据处理后的文本数据,统计每个词语的出现频率。可以使用HashMap或TreeMap等数据结构来存储词频信息。 6. 根据词频生成词云图:根据词频信息以及选择的库的API,调用相关方法生成词云图。可以设置词云图的大小、颜色、字体等属性。 7. 展示或保存词云图:将生成的词云图展示在图形界面上或保存为图片文件。可以使用Java的图形用户界面库(如JavaFX、Swing)来展示图形,也可以使用Java的图像处理库将词云图保存为图片文件。 8. 代码优化与后续操作:优化代码,提高生成词云图的效率和质量。可以尝试使用多线程技术加速处理过程,或者进一步处理词云图数据,使其更具可读性和可视化效果。 以上是用Java实现词云图的一般步骤。具体的实现方法还需要根据选择的库和具体需求来进行调整和完善。通过Java的文本处理、数据结构和图形处理等相关知识,可以实现出各种各样的词云图应用。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值