首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Java 方式实现词云显示

  • 25-03-07 20:01
  • 3654
  • 10923
blog.csdn.net

之前做文本数据的机器学习分类,需要对文本进行分词、词云分析,为了更好的呈现分词效果,使用了JAVA来生成词云图。说不定能帮上你~

先来看下词云效果图吧!

实现词云图2种方式word_cloud、stylecloud

word_cloud : http://amueller.github.io/word_cloud/

stylecloud :https://github.com/minimaxir/stylecloud

 

接下来,是通过调用WordCloud来实现词云的显示


1、需要先添加一下maven依赖

  1. com.kennycason
  2. kumo-core
  3. 1.27
  4. com.kennycason
  5. kumo-tokenizers
  6. 1.27

2、JAVA代码实现如下:

  1. package com.lei.test;
  2. import com.kennycason.kumo.CollisionMode;
  3. import com.kennycason.kumo.WordCloud;
  4. import com.kennycason.kumo.WordFrequency;
  5. import com.kennycason.kumo.bg.CircleBackground;
  6. import com.kennycason.kumo.font.KumoFont;
  7. import com.kennycason.kumo.font.scale.SqrtFontScalar;
  8. import com.kennycason.kumo.nlp.FrequencyAnalyzer;
  9. import com.kennycason.kumo.nlp.tokenizers.ChineseWordTokenizer;
  10. import com.kennycason.kumo.palette.LinearGradientColorPalette;
  11. import java.awt.*;
  12. import java.util.*;
  13. import java.util.List;
  14. public class T00_WordCountSample {
  15. public static void main(String[] args) {
  16. createWordCountPic();
  17. }
  18. private static void createWordCountPic(){
  19. FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();
  20. frequencyAnalyzer.setWordFrequenciesToReturn(600);
  21. frequencyAnalyzer.setMinWordLength(2);
  22. frequencyAnalyzer.setWordTokenizer(new ChineseWordTokenizer());
  23. // 可以直接从文件中读取
  24. //List wordFrequencies = frequencyAnalyzer.load(getInputStream("D:\\citydo-one\\技术\\Java_Note-master\\python\\tp\\Trump.txt"));
  25. List wordFrequencies = new ArrayList<>();
  26. // 用词语来随机生成词云
  27. List test = Arrays.asList("你好","谢谢");
  28. String strValue = "铁路投资=20, 步伐=20, 国际证券=10, 新开工=15, 加快=15, 逆势增长=15, 增速=7, 万亿元=7, 5月份=6, 同增=5, 水利=5, 相比=5, 跌幅=5, 公路=4, 建筑行业=4, 基建=4, 投资额=4, 本周=4, 高铁=4, 铁路=4, 市政=4, 项目=4, 板块=4, 减少=3, 表现=3, 铁路建设=3, 亿元=3, 新线=3, 回落=3, 开通=3, 下跌=3, 中标=3, 上市公司=3, 6月份=3, 细分=2, 六保=2, 三大=2, 单相=2, 单月=2, 六稳=2, 建筑板块=2, 2项=2, 0.11=2, 洪涝灾害=2, 增长=2, 基建投资=2, 全国铁路=2, 最小=2, 投资=2, 作用=2, 稳步复苏=2, 行业=2, 相关=2, 提升=2, 地产=2, 火车头=2, 预计=2, 央企=2, 建筑=2, 施工=2, 来源=2, 地产投资=2, 签订=2, 比上周=2, 区间=2, 不及预期=2, 34.6=2, 中的=2, 8.4=2, 同比分别=2, 大幅提升=1, 持续=1, 建设步伐=1, 环比=1, 口径=1, 115=1, 其次是=1, 公布=1, 当月=1, 建筑指数=1, 24个=1, 2.85=1, 据介绍=1, 2020年=1, 产业链=1, 行业投资=1, 投资增速=1, 10.8=1, 较上周=1, 亮眼=1, 电热=1, 多个=1, 29.2=1, 欠佳=1, 装配式建筑=1, 收盘=1, ppp=1, 总体=1, 复工=1, 建中=1, 中国=1, 6.3=1, 6.5=1, 下挫=1, 发行=1, 0.07=1, 合计=1, 跑赢大盘=1, 稳步增长=1, 大盘=1, 下半年=1, 3项=1, 计为=1, 气水=1, 0.14=1, 好于=1, 概念板块=1, 金融界=1, 分别为=1, 专项=1, 明显加快=1, 上涨=1, 订单金额=1, 上半年=1, 增速放缓=1, 0.44=1, 开工=1, 1.08=1, 超过=1, 30.1=1, 整体估值=1, 4.5=1, 1.8pct=1, 0.020=1, 八大=1, 1178=1, epc=1, 主要风险=1, 0.60=1, 公用=1, 申万=1, 连镇=1, 2084.43=1, 显现=1, 有望=1, 跌幅为=1, 投资数据=1, 合并=1, 改善=1, 复苏=1, 0.87=1, 0.950=1, 0.85=1, 新开工项目=1, 评级=1, 北段=1, 影响=1, 房地产开发投资=1, 影响下=1, 主要是=1, 0.90=1, 园林工程=1, 2.36=1, 1.68=1, 0.93=1, 涨幅=1, 二级=1, 6月=1, 建筑节能=1, 建筑工程=1, 情况=1, 交运=1, 四大=1, 网站=1, 下降=1, 邮储=1, 开始显现=1, 设计=1, 格库铁路=1, 12.1=1, 2.39=1, 微涨=1, 3.05=1, 所致=1, 继续保持=1, 5000=1, 认为是=1, 3.19=1, 4400公里=1, 新疆=1, 2300公里=1, 订单=1, 分支=1, 公里=1";
  29. String[] split = strValue.split(", ");
  30. String word = "";
  31. int count = 0;
  32. for (int i = 0; i < split.length; i++) {
  33. String[] wordInfo = split[i].split("=");
  34. word = wordInfo[0];
  35. count = Integer.valueOf(wordInfo[1]);
  36. wordFrequencies.add(new WordFrequency(word, count));
  37. }
  38. //加入分词并随机生成权重,每次生成得图片都不一样
  39. //test.stream().forEach(e-> wordFrequencies.add(new WordFrequency(e,new Random().nextInt(test.size()))));
  40. //此处不设置会出现中文乱码
  41. java.awt.Font font = new java.awt.Font("STSong-Light", 2, 18);
  42. //设置图片分辨率
  43. Dimension dimension = new Dimension(500, 500);
  44. //此处的设置采用内置常量即可,生成词云对象
  45. WordCloud wordCloud = new WordCloud(dimension, CollisionMode.PIXEL_PERFECT);
  46. //设置边界及字体
  47. wordCloud.setPadding(2);
  48. //因为我这边是生成一个圆形,这边设置圆的半径
  49. wordCloud.setBackground(new CircleBackground(255));
  50. wordCloud.setFontScalar(new SqrtFontScalar(12, 42));
  51. //设置词云显示的三种颜色,越靠前设置表示词频越高的词语的颜色
  52. wordCloud.setColorPalette(new LinearGradientColorPalette(Color.RED, Color.BLUE, Color.GREEN, 30, 30));
  53. wordCloud.setKumoFont(new KumoFont(font));
  54. wordCloud.setBackgroundColor(new Color(255, 255, 255));
  55. //因为我这边是生成一个圆形,这边设置圆的半径
  56. wordCloud.setBackground(new CircleBackground(255));
  57. wordCloud.build(wordFrequencies);
  58. //生成词云图路径
  59. wordCloud.writeToFile("E:\\wordCount.png");
  60. }
  61. }

文章最后,给大家推荐一些受欢迎的技术博客链接:

  1. Hadoop相关技术博客链接
  2. Spark 核心技术链接
  3. JAVA相关的深度技术博客链接
  4. 超全干货--Flink思维导图,花了3周左右编写、校对
  5. 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
  6. 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
  7. 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂

 


欢迎扫描下方的二维码或 搜索 公众号“10点进修”,我们会有更多、且及时的资料推送给您,欢迎多多交流!

                                           

       

注:本文转载自blog.csdn.net的不埋雷的探长的文章"https://blog.csdn.net/weixin_32265569/article/details/107675358"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top