代码如下:

package com.showdata;

import com.kennycason.kumo.CollisionMode;
import com.kennycason.kumo.WordCloud;
import com.kennycason.kumo.WordFrequency;
import com.kennycason.kumo.bg.PixelBoundryBackground;
import com.kennycason.kumo.font.KumoFont;
import com.kennycason.kumo.image.AngleGenerator;
import com.kennycason.kumo.palette.LinearGradientColorPalette;
import com.kennycason.kumo.wordstart.CenterWordStart;
import com.util.HBaseUtil;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.awt.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 词云
 */
public class CommentWordCloud {

    public WordCloud get() throws IOException {
        Connection conn = HBaseUtil.getConnection();
        /**********     Begin   **********/
        //1.读取Hbase表中数据显示
        TableName tableName = TableName.valueOf(Bytes.toBytes("comment_word_count"));
        Table table = conn.getTable(tableName); // 连接表
        Scan scan = new Scan();
        ResultScanner scanner = table.getScanner(scan);
        List<WordFrequency> words = new ArrayList<>();
            for (Result result : scanner) {
                String word = new String(result.getRow(), "UTF-8");
                int count = Bytes.toInt(result.getValue("word_info".getBytes(), "count".getBytes())); // 获取词频
                WordFrequency wordFrequency = new WordFrequency(word, count);
                if (count > 10) {
                    words.add(wordFrequency); // 由于文件中词汇过多,将大于10个的存进去将会大量减少运行时间
                }
            }
        //2.生成并渲染图片
        Dimension dimension = new Dimension(500, 312);
        WordCloud wordCloud = new WordCloud(dimension, CollisionMode.PIXEL_PERFECT);
        wordCloud.setPadding(2);
        // 修正字体定义,使用Font类常量
        Font font = new Font("宋体", Font.ITALIC, 24);
        wordCloud.setKumoFont(new KumoFont(font));
        // 设置渐变色板
        wordCloud.setColorPalette(new LinearGradientColorPalette(Color.RED, Color.BLUE, Color.GREEN, 30, 30));
        // 修正背景设置
        wordCloud.setBackgroundColor(Color.WHITE);
        wordCloud.setBackground(new PixelBoundryBackground("myImgs/whale_small.png"));
        wordCloud.setWordStartStrategy(new CenterWordStart());
        // 修正类名拼写
        wordCloud.setAngleGenerator(new AngleGenerator(0));
        // 修正变量名拼写
        wordCloud.build(words);
        /**********     End   **********/
        wordCloud.writeToFile("imgs/wordcloud_comment.png");
        return wordCloud;
    }
    
    public static void main(String[] args) {
        try {
            CommentWordCloud wordCloudGenerator = new CommentWordCloud();
            wordCloudGenerator.get();
            System.out.println("词云生成成功!");
        } catch (IOException e) {
            System.err.println("生成词云时出错: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐