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