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(词频分析)对象,该对象用来统计我们所需要构造词云数据的频率,主要包含以下方法:

方法名 参数 说明
load InputStream 从流中获取语料
load File 从文件中获取语料
load String 从路径中打开文件获取语料
load URL 从URL中获取语料
load List 从字符串数组中获取语料
setWordTokenizer WordTokenizer 设置分词器 主要有ChineseWordTokenizerEnglishWordTokenizer
setWordFrequenciesToReturn int 设置返回数据长度
setMinWordLength int 最小分词长度
setMaxWordLength int 最大分词长度
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);
}

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章