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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值