一、实验目的
-
了解KUMO技术应用于词频分析,词云生成的开源技术
-
使用KUMO框架绘制一个简单的词云
-
了解词云的渲染
-
理解数据分析渲染生成词云
二、实验内容
-
使用KUMO框架绘制一个简单的词云
-
数据分析渲染生成词云
三、实验步骤
(一)使用KUMO框架绘制一个简单的词云
词云就是由词汇组成类似云的彩色图形,如下图:
如何绘制词云
绘制一个简单的词云总的下来只需5
个主要操作:
1.创建词频分析器,设置词频,此处的参数配置视情况而定即可。
FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();
frequencyAnalyzer.setWordFrequenciesToReturn(200);
2.加载文本文件路径,生成词频集合。
List<WordFrequency> wordFrequencyList = frequencyAnalyzer.load("wordcloud.txt");
3.设置图片分辨率。
Dimension dimension = new Dimension(500,312);
4.生成词云对象,此处的设置采用内置常量即可。
WordCloud wordCloud = new WordCloud(dimension,CollisionMode.PIXEL_PERFECT);
5.生成词云并写入图片。
wordCloud.build(wordFrequencies);
wordCloud.writeToFile("wordcloud.png");
编程要求
读取wordcloud.txt
文件生成词云,要求图片分辨率为500 × 312
,生成图片存放路径和名称为 imgs/wordcloud_img.png
。
效果如下:
测试输入:
imgs/wordcloud_img.png
step1/my_wordcloud_img.png
相关代码:
1. package com.showdata;
2.
3. import java.awt.Dimension;
4. import java.io.IOException;
5. import java.util.List;
6. import com.kennycason.kumo.CollisionMode;
7. import com.kennycason.kumo.WordCloud;
8. import com.kennycason.kumo.WordFrequency;
9. import com.kennycason.kumo.nlp.FrequencyAnalyzer;
10.
11. public class WordCloud_img {
12.
13. public WordCloud get() throws IOException {
14. /********** Begin **********/
15. //1.为实例化词云做准备
16. FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();
17. frequencyAnalyzer.setWordFrequenciesToReturn(200);
18. List<WordFrequency> wordFrequencies = frequencyAnalyzer.load("wordcloud.txt");
19. Dimension dimension = new Dimension(500, 312);
20. //2.修改词云的实例化
21. WordCloud wordCloud = new WordCloud(dimension, CollisionMode.PIXEL_PERFECT);
22. //3.生成词云并写入图片
23. wordCloud.build(wordFrequencies);
24. wordCloud.writeToFile("imgs/wordcloud_img.png");
25. /********** End **********/
26. return wordCloud;
27. }
28.
29. }
(二)数据分析渲染生成词云
词云渲染
1.设置图片中字体样式为宋体粗斜体24
磅(具体可以参照Font
源码)
java.awt.Font font = new java.awt.Font("宋体",3, 24);//3表示粗斜体
wordCloud.setKumoFont(new KumoFont(font));
2.设置词组边界(词组拥挤不易于观察美观)
wordCloud.setPadding(2);
3.设置背景颜色和背景图片
wordCloud.setBackgroundColor(Color.black);
wordCloud.setBackground(new PixelBoundryBackground("背景图片地址"));
示例: 背景图片:(注意设置的背景图片需要透明底才可进行转换成图中形状)
对上一章节的词云进行设置后,输出如下:
4.设置词云显示的颜色,越靠前设置表示词频越高的词语的颜色
wordCloud.setColorPalette(new ColorPalette(Color.RED, Color.BLUE, Color.GREEN));
5.设置频词高低从图片中间出现往外扩张(词频高者聚集图片中心位置)
wordCloud.setWordStartStrategy(new CenterWordStart());
6.设置词云中的词语横向摆置
wordCloud.setAngleGenerator(new AngleGenerator(0));//0表示横向 若填180则表示横向基础旋转180°
编程要求
将第一步的图片进行渲染,具体要求如下:
- 字体为宋体粗斜体
24
磅; - 单词边界为
2
; - 背景颜色为白色,背景图片为
myImgs/whale_small.png
; - 词云词频单词颜色一次为红、蓝、绿;
- 根据词频高低由中心往外散发,且单词横向摆置;
- 图片存储路径个名称为
imgs/wordcloud_render.png
。
测试输入: imgs/wordcloud_render.png
step2/my_wordcloud_render.png
相关代码:
1. package com.showdata;
2.
3. import java.awt.Color;
4. import java.awt.Dimension;
5. import java.io.IOException;
6. import java.util.List;
7. import com.kennycason.kumo.CollisionMode;
8. import com.kennycason.kumo.WordCloud;
9. import com.kennycason.kumo.WordFrequency;
10. import com.kennycason.kumo.bg.PixelBoundryBackground;
11. import com.kennycason.kumo.font.KumoFont;
12. import com.kennycason.kumo.image.AngleGenerator;
13. import com.kennycason.kumo.nlp.FrequencyAnalyzer;
14. import com.kennycason.kumo.palette.ColorPalette;
15. import com.kennycason.kumo.wordstart.CenterWordStart;
16. import java.awt.Font;
17.
18. public class WordCloud_render {
19.
20. public WordCloud get() throws IOException {
21. FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();
22. frequencyAnalyzer.setWordFrequenciesToReturn(200);
23. List<WordFrequency> wordFrequencies = frequencyAnalyzer.load("wordcloud.txt");
24. Dimension dimension = new Dimension(500, 312);
25. WordCloud wordCloud = new WordCloud(dimension, CollisionMode.PIXEL_PERFECT);
26. /********** Begin **********/
27. Font font = new Font("宋体", 3, 24);
28. wordCloud.setKumoFont(new KumoFont(font));
29. wordCloud.setPadding(2);
30. wordCloud.setBackgroundColor(Color.white);
31. wordCloud.setBackground(new PixelBoundryBackground("myImgs/whale_small.png"));
32. wordCloud.setColorPalette(new ColorPalette(Color.RED, Color.BLUE, Color.GREEN));
33. wordCloud.setWordStartStrategy(new CenterWordStart());
34. wordCloud.setAngleGenerator(new AngleGenerator(0));
35. /********** End **********/
36. wordCloud.build(wordFrequencies);
37. wordCloud.writeToFile("imgs/wordcloud_render.png");
38. return wordCloud;
39. }
40.
41. }
四、实验心得
会使用KUMO框架绘制一个简单的词云
理解了数据分析渲染生成词云