一、实验目的
- 了解KUMO技术应用于词频分析,词云生成的开源技术
- 使用KUMO框架绘制一个简单的词云
- 了解词云的渲染
- 理解数据分析渲染生成词云
二、实验内容
- 使用KUMO框架绘制一个简单的词云
- 数据分析渲染生成词云
三、实验步骤
(一)使用KUMO框架绘制一个简单的词云
词云就是由词汇组成类似云的彩色图形,如下图:
如何绘制词云
绘制一个简单的词云总的下来只需5
个主要操作:
1.创建词频分析器,设置词频,此处的参数配置视情况而定即可。
1. FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer(); 2. 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.生成词云并写入图片。
1. wordCloud.build(wordFrequencies); 2. wordCloud.writeToFile("wordcloud.png");
编程要求
读取wordcloud.txt
文件生成词云,要求图片分辨率为500 × 312
,生成图片存放路径和名称为 imgs/wordcloud_img.png
。
效果如下:
测试输入:
1. imgs/wordcloud_img.png 2. step1/my_wordcloud_img.png
相关代码:
1. 1. package com.showdata; 2. 2. 3. 3. import java.awt.Dimension; 4. 4. import java.io.IOException; 5. 5. import java.util.List; 6. 6. import com.kennycason.kumo.CollisionMode; 7. 7. import com.kennycason.kumo.WordCloud; 8. 8. import com.kennycason.kumo.WordFrequency; 9. 9. import com.kennycason.kumo.nlp.FrequencyAnalyzer; 10. 10. 11. 11. public class WordCloud_img { 12. 12. 13. 13. public WordCloud get() throws IOException { 14. 14. /********** Begin **********/ 15. 15. //1.为实例化词云做准备 16. 16. FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer(); 17. 17. frequencyAnalyzer.setWordFrequenciesToReturn(200); 18. 18. List<WordFrequency> wordFrequencies = frequencyAnalyzer.load("wordcloud.txt"); 19. 19. Dimension dimension = new Dimension(500, 312); 20. 20. //2.修改词云的实例化 21. 21. WordCloud wordCloud = new WordCloud(dimension, CollisionMode.PIXEL_PERFECT); 22. 22. //3.生成词云并写入图片 23. 23. wordCloud.build(wordFrequencies); 24. 24. wordCloud.writeToFile("imgs/wordcloud_img.png"); 25. 25. /********** End **********/ 26. 26. return wordCloud; 27. 27. } 28. 28. 29. 29. }
(二)数据分析渲染生成词云
词云渲染
1.设置图片中字体样式为宋体粗斜体24
磅(具体可以参照Font
源码)
1. java.awt.Font font = new java.awt.Font("宋体",3, 24);//3表示粗斜体 2. wordCloud.setKumoFont(new KumoFont(font));
2.设置词组边界(词组拥挤不易于观察美观)
wordCloud.setPadding(2);
3.设置背景颜色和背景图片
1. wordCloud.setBackgroundColor(Color.black); 2. 3. 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. 1. package com.showdata; 2. 2. 3. 3. import java.awt.Color; 4. 4. import java.awt.Dimension; 5. 5. import java.io.IOException; 6. 6. import java.util.List; 7. 7. import com.kennycason.kumo.CollisionMode; 8. 8. import com.kennycason.kumo.WordCloud; 9. 9. import com.kennycason.kumo.WordFrequency; 10. 10. import com.kennycason.kumo.bg.PixelBoundryBackground; 11. 11. import com.kennycason.kumo.font.KumoFont; 12. 12. import com.kennycason.kumo.image.AngleGenerator; 13. 13. import com.kennycason.kumo.nlp.FrequencyAnalyzer; 14. 14. import com.kennycason.kumo.palette.ColorPalette; 15. 15. import com.kennycason.kumo.wordstart.CenterWordStart; 16. 16. import java.awt.Font; 17. 17. 18. 18. public class WordCloud_render { 19. 19. 20. 20. public WordCloud get() throws IOException { 21. 21. FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer(); 22. 22. frequencyAnalyzer.setWordFrequenciesToReturn(200); 23. 23. List<WordFrequency> wordFrequencies = frequencyAnalyzer.load("wordcloud.txt"); 24. 24. Dimension dimension = new Dimension(500, 312); 25. 25. WordCloud wordCloud = new WordCloud(dimension, CollisionMode.PIXEL_PERFECT); 26. 26. /********** Begin **********/ 27. 27. Font font = new Font("宋体", 3, 24); 28. 28. wordCloud.setKumoFont(new KumoFont(font)); 29. 29. wordCloud.setPadding(2); 30. 30. wordCloud.setBackgroundColor(Color.white); 31. 31. wordCloud.setBackground(new PixelBoundryBackground("myImgs/whale_small.png")); 32. 32. wordCloud.setColorPalette(new ColorPalette(Color.RED, Color.BLUE, Color.GREEN)); 33. 33. wordCloud.setWordStartStrategy(new CenterWordStart()); 34. 34. wordCloud.setAngleGenerator(new AngleGenerator(0)); 35. 35. /********** End **********/ 36. 36. wordCloud.build(wordFrequencies); 37. 37. wordCloud.writeToFile("imgs/wordcloud_render.png"); 38. 38. return wordCloud; 39. 39. } 40. 40. 41. 41. }
四、实验心得
会使用KUMO框架绘制一个简单的词云
理解了数据分析渲染生成词云