前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java生成词云!你喜欢得书都在图里!

Java生成词云!你喜欢得书都在图里!

作者头像
JAVA葵花宝典
发布2019-07-30 16:19:20
3.4K0
发布2019-07-30 16:19:20
举报
文章被收录于专栏:JAVA葵花宝典JAVA葵花宝典

在做数据分析得时候,生成词云图是很常见得需求,正常情况下大部分都是通过python去采集数据并且生成,异常强大,本文来说说java如何生成词云!

在github上找轮子得时候,发现了这么一个项目:Kumo(项目地址:https://github.com/kennycason/kumo),

项目特点

  • 绘制矩形,圆形或图像叠加字云。图像叠加将在所有非透明像素上绘制单词。
  • 线性,平方根字体标量。完全可扩展。
  • 可变字体大小。
  • 单词轮换。只需提供开始角度,结束角度和切片数量。
  • 自定义背景颜色。完全可定制的BackGrounds即将推出。
  • 字填充。
  • 加载自定义彩色托盘。
  • Colision和Padding的两种模式:PIXEL_PERFECT和RECTANGLE。
  • 极地词云。在一个图像中绘制两个相对的字云,以便轻松比较/对比日期集。
  • 分层的词云。覆盖多个词云。
  • WhiteSpace和中文Word Tokenizer。完全可扩展。
  • 频率分析器用于标记,过滤和计算字数。

虽然功能没有python得轮子那么好使,但好歹也能满足基本需求,我们来看看该项目简介生成得效果图

本文以技术书籍随机权重来生成为例,看看生成得几个效果图

引入项目依赖

这里使用得是目前官方最新版本 1.17,第一个是核心包,第二个是语言支持

<dependency>
            <groupId>com.kennycason</groupId>
            <artifactId>kumo-core</artifactId>
            <version>1.17</version>
        </dependency>

        <dependency>
            <groupId>com.kennycason</groupId>
            <artifactId>kumo-tokenizers</artifactId>
            <version>1.17</version>
        </dependency>

代码实战

final FrequencyAnalyzer frequencyAnalyzer = new FrequencyAnalyzer();
        frequencyAnalyzer.setWordFrequenciesToReturn(600);
        frequencyAnalyzer.setMinWordLength(2);
        frequencyAnalyzer.setWordTokenizer(new ChineseWordTokenizer());

        // 可以直接从文件中读取
        //final List<WordFrequency> wordFrequencies = frequencyAnalyzer.load(getInputStream("text/chinese_language.txt"));

        final List<WordFrequency> wordFrequencies = new ArrayList<>();

        // 用后端技术书籍来随机生成词云
        String [] books = {"Spring实战","Spring源码深度解析","SpringBoot实战",
                "SpringBoot2精髓","一步一步学SpringBoot2","Spring微服务实战",
                "Head First Java","Java并发编程实战","深入理解Java 虚拟机",
                "Head First Design","effective java","J2EE development without EJB",
                "TCP/IP卷一"," 计算机网络:自顶向下","图解HTTP和图解TCP/IP",
                "计算机网络","深入理解计算机系统","现代操作系统",
                "Linux内核设计与实现","Unix网络编程","数据结构与算法",
                "算法导论","数据结构与算法(Java版)","算法图解,啊哈算法",
                "剑指offer","LeetCode"," Java编程思想",
                "Java核心技术卷一","深入理解JVM虚拟机","Java并发编程实战",
                " Java并发编程艺术","Java性能调优指南","Netty权威指南",
                "深入JavaWeb技术内幕","How Tomcat Works","Tomcat架构解析",
                "Spring实战","Spring源码深度解析","Spring MVC学习指南",
                "Maven实战","sql必知必会","深入浅出MySQL",
                "Spring cloud微服务实战","SpringBoot与Docker微服务实战","深入理解SpringBoot与微服务架构"
        };
        //加入分词并随机生成权重,每次生成得图片都不一样
        for (String book : books){
            wordFrequencies.add(new WordFrequency(book,new Random().nextInt(books.length)));
        }

        //此处不设置会出现中文乱码
        java.awt.Font font = new java.awt.Font("STSong-Light", 2, 18);

        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.setKumoFont(new KumoFont(font));
        wordCloud.setBackgroundColor(new Color(255, 255, 255));
        //因为我这边是生成一个圆形,这边设置圆的半径
        wordCloud.setBackground(new CircleBackground(255));

        wordCloud.build(wordFrequencies);
        wordCloud.writeToFile("d://3.png");

使用感悟

1.分词可以通过读取文件,也可以指定数据,指定数据如上例所示或者数据库统计出来得数据,通过分词得权重来显示在词云中得大小
// 可以直接从文件中读取
//final List<WordFrequency> wordFrequencies = frequencyAnalyzer.load(getInputStream("text/chinese_language.txt"));
2.虽然支持中文,但除了使用中文解析器之外还得指定字体,否则出现中文乱码,这点作者没有提及,所以很多网上类似demo都有底下留言中文乱码如何解决
frequencyAnalyzer.setWordTokenizer(new ChineseWordTokenizer());
 //此处不设置会出现中文乱码
java.awt.Font font = new java.awt.Font("STSong-Light", 2, 18);
3.可以指定生成得形状,以及背景色还有词频得颜色,想要生成得更好看,需要自己调整相关参数。

示例地址

https://github.com/pengziliu/kumo

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA葵花宝典 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目特点
  • 引入项目依赖
  • 代码实战
  • 使用感悟
  • 示例地址
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档