kumo词云初体验

 

2022年12月4日13:36:06

package kumo;

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.bg.RectangleBackground;
import com.kennycason.kumo.font.KumoFont;
import com.kennycason.kumo.font.scale.LinearFontScalar;
import com.kennycason.kumo.font.scale.SqrtFontScalar;
import com.kennycason.kumo.image.AngleGenerator;
import com.kennycason.kumo.nlp.FrequencyAnalyzer;
import com.kennycason.kumo.nlp.tokenizers.ChineseWordTokenizer;
import com.kennycason.kumo.palette.ColorPalette;
import com.kennycason.kumo.palette.LinearGradientColorPalette;


import java.awt.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @doc https://github.com/kennycason/kumo
 */
public class KumoTest {
    public void generate2(List<String> texts) throws IOException {
        final FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();
        // 最短的词语长度设为2,小于2的会被过滤
        frequencyAnalyzer.setMinWordLength(2);
        // 返回前n个词,默认是50个
        frequencyAnalyzer.setWordFrequenciesToReturn(50);
        //此处不设置会出现中文乱码
        java.awt.Font font = new java.awt.Font("STSong-Light", 2, 18);

        final List<WordFrequency> wordFrequencies = frequencyAnalyzer.load(texts);
        final Dimension dimension = new Dimension(600, 600);
        final WordCloud wordCloud = new WordCloud(dimension, CollisionMode.RECTANGLE);
        wordCloud.setPadding(0);
        wordCloud.setBackground(new RectangleBackground(dimension));
        wordCloud.setColorPalette(new ColorPalette(Color.RED, Color.GREEN, Color.cyan, Color.BLUE,Color.orange));
        // 不设置font的话,中文会乱码
        wordCloud.setKumoFont(new KumoFont(font));
        // 白色背景
        wordCloud.setBackgroundColor(new Color(255, 255, 255));
        // 设置字体
        wordCloud.setFontScalar(new LinearFontScalar(10, 40));
        // 设置结果的旋转角度(所有词的角度都相同)
        wordCloud.setAngleGenerator(new AngleGenerator(0));
        // 不同的词进行随便的旋转,从一个角度到另一个角度,设置一个step,限制有几个随机值。
        // wordCloud.setAngleGenerator(new AngleGenerator(0, 90, 9));
        wordCloud.build(wordFrequencies);
        String name = System.currentTimeMillis() + "wordcloud_rectangle.png";
        wordCloud.writeToFile("……\\word-count\\pic\\"+name);
    }
    public void generate(List<String> texts) throws IOException {
        final FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();
        // 2022年12月3日22:25:24 如果设置了ChineseWordTokenizer,则传入的词还会做一次分词
//        frequencyAnalyzer.setWordTokenizer(new ChineseWordTokenizer());
        frequencyAnalyzer.setMinWordLength(1);
        //此处不设置会出现中文乱码
        java.awt.Font font = new java.awt.Font("STSong-Light", 2, 18);

//        final List<WordFrequency> wordFrequencies = frequencyAnalyzer.load("text/my_text_file.txt");
        final List<WordFrequency> wordFrequencies = frequencyAnalyzer.load(texts);
        final Dimension dimension = new Dimension(900, 900);
        final WordCloud wordCloud = new WordCloud(dimension, CollisionMode.PIXEL_PERFECT);
        wordCloud.setPadding(2);
        wordCloud.setBackground(new CircleBackground(255));
        wordCloud.setFontScalar(new SqrtFontScalar(12, 42));
        //设置词云显示的三种颜色,越靠前设置表示词频越高的词语的颜色
        // wordCloud.setColorPalette(new LinearGradientColorPalette(Color.RED, Color.BLUE, Color.GREEN, 30, 30));
        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.setKumoFont(new KumoFont(font));
        // 白色背景
        wordCloud.setBackgroundColor(new Color(255, 255, 255));
        //因为我这边是生成一个圆形,这边设置圆的半径
        wordCloud.setBackground(new CircleBackground(255));
        wordCloud.build(wordFrequencies);

        wordCloud.writeToFile("……\\word-count\\pic\\wordcloud_rectangle.png");
    }

    public static void main(String[] args) {
        List<String> texts = new ArrayList<>();
        texts.add("你好");
        texts.add("你好");
        texts.add("你好");
        texts.add("马拉多纳");
        texts.add("再见");
        texts.add("萨瓦迪卡");
        texts.add("步行街");
        texts.add("步行街");
        texts.add("世界杯");
        texts.add("世界杯");
        texts.add("梅西");
        texts.add("梅西");
        texts.add("梅西");
        texts.add("梅西");
        texts.add("萨穆埃尔");
        texts.add("曼朱基奇");
        texts.add("莫德里奇");
        texts.add("C罗");
        texts.add("C罗");
        texts.add("C罗");
        texts.add("C罗");
        texts.add("C罗");
        texts.add("C罗");
        texts.add("C罗");
        texts.add("埃德加·戴维斯");
        texts.add("蒂埃里·亨利");
        texts.add("C罗");
        texts.add("劳塔罗");
        texts.add("劳塔罗");
        texts.add("艾马尔");
        texts.add("劳塔罗");
        texts.add("劳塔罗");
        texts.add("亨利");
        texts.add("卢卡库");
        texts.add("小平头");
        texts.add("啤酒肚");
        texts.add("卢卡库");
        KumoTest kumoTest = new KumoTest();
        try {
            //kumoTest.generate(texts);
            kumoTest.generate2(texts);
        } catch (IOException e) {
            System.out.println(e);
        }
    }
}

 

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