图云的制作
传统方式的图云制作非常麻烦,需要广泛的技术支持,这里借用java中的Kumo
GitHub链接戳这里
码云链接戳这里
第一步引入依赖
<dependency>
<groupId>com.kennycason</groupId>
<artifactId>kumo-core</artifactId>
<version>1.17</version>
</dependency>
<!-- 下面tokenizers是为了中文分词引入 -->
<dependency>
<groupId>com.kennycason</groupId>
<artifactId>kumo-tokenizers</artifactId>
<version>1.17</version>
</dependency>
引用工具类WordCloudUtil
public class WordCloudUtil {
/**
* 生成词云
*
* @param artistId 歌单id
* @param texts 文本
*/
public static void generate(String artistId, List<String> texts) {
FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();
//设置返回的词数
frequencyAnalyzer.setWordFrequenciesToReturn(500);
//设置返回的词语最小出现频次
frequencyAnalyzer.setMinWordLength(4);
//引入中文解析器
frequencyAnalyzer.setWordTokenizer(new ChineseWordTokenizer());
//输入文章数据,进行分词
final List<WordFrequency> wordFrequencyList = frequencyAnalyzer.load(texts);
//设置图片分辨率大小
Dimension dimension = new Dimension(600, 600);
//此处的设置采用内置常量即可,生成词云对象
WordCloud wordCloud = new WordCloud(dimension, CollisionMode.PIXEL_PERFECT);
//设置边界及字体
wordCloud.setPadding(2);
// 设置字体,字体必须支持中文,不能随便改
wordCloud.setKumoFont(new KumoFont("阿里巴巴普惠体 Light", FontWeight.PLAIN));
//设置词云显示的三种颜色,越靠前设置表示词频越高的词语的颜色
wordCloud.setColorPalette(
new ColorPalette(new Color(0x4055F1), new Color(0x408DF1), new Color(0x40AAF1),
new Color(0x40C5F1), new Color(0x40D3F1), new Color(0xFFFFFF)));
wordCloud.setFontScalar(new SqrtFontScalar(10, 70));
//设置背景图层为圆形
wordCloud.setBackground(new CircleBackground(300));
//生成词云
wordCloud.build(wordFrequencyList);
//输出到图片文件,用当前的毫秒数作为文件名
Long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
//输出到图片文件
wordCloud.writeToFile("wordCloud-" + artistId + ".png");
}
}
调用工具类生成词云
WordCloudUtil.generate(artistId, contents);
注:本例是生成歌曲评论的词云,artistId
是歌单的Id,content
是List<String>
集合,每个元素都是一个条评论,执行成功会在工程目录下生成wordCloud-歌单Id.png
的图片。