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