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);
        }
    }
}

 

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