12

我正在寻找一个库来在 Java 应用程序中创建标签云,然后我找到了 OpenCloud

我不想使用 Web 服务器,OpenCloud 需要它来获取输出,不是吗?有没有办法让 OpenCloud 在 Java/Swing 面板中工作?我想要一个独立应用程序的东西。如果这是不可能的,我还能在哪里寻找这样的 API?

4

3 回答 3

15

我用 Java 创建了词云库 Kumo(日语中的云)。奇怪的是,我一直很喜欢词云。:)

Kumo 可以生成 BufferedImages、图像文件(PNG、BMP 等),并且还有示例显示在 JPanel 中的用法。该项目是 mavenized 并在 Maven Central 中,以使集成更容易。以下是一些示例词云,更多示例在 Kumo 的 GitHub 页面:https ://github.com/kennycason/kumo

这里还有一个 JPanel 示例和这里的屏幕截图。

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

于 2014-07-03T22:52:51.683 回答
15

实际上 OpenCloud 不需要 Web 服务器。只需使用 Swing 呈现而不是 HTML/JSP。这是一个小片段,展示了一个使用 OpenCloud 库的非常基本的 Swing 标签云。它可以改进,但它为您提供了要点:

import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import org.mcavallo.opencloud.Cloud;
import org.mcavallo.opencloud.Tag;

public class TestOpenCloud {

    private static final String[] WORDS = { "art", "australia", "baby", "beach", "birthday", "blue", "bw", "california", "canada", "canon",
            "cat", "chicago", "china", "christmas", "city", "dog", "england", "europe", "family", "festival", "flower", "flowers", "food",
            "france", "friends", "fun", "germany", "holiday", "india", "italy", "japan", "london", "me", "mexico", "music", "nature",
            "new", "newyork", "night", "nikon", "nyc", "paris", "park", "party", "people", "portrait", "sanfrancisco", "sky", "snow",
            "spain", "summer", "sunset", "taiwan", "tokyo", "travel", "trip", "uk", "usa", "vacation", "water", "wedding" };

    protected void initUI() {
        JFrame frame = new JFrame(TestOpenCloud.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        Cloud cloud = new Cloud();
        Random random = new Random();
        for (String s : WORDS) {
            for (int i = random.nextInt(50); i > 0; i--) {
                cloud.addTag(s);
            }
        }
        for (Tag tag : cloud.tags()) {
            final JLabel label = new JLabel(tag.getName());
            label.setOpaque(false);
            label.setFont(label.getFont().deriveFont((float) tag.getWeight() * 10));
            panel.add(label);
        }
        frame.add(panel);
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TestOpenCloud().initUI();
            }
        });
    }

}

此代码基于OpenCloud 库的示例 1

这是我得到的输出:

Swing 标签云演示图

于 2012-07-14T09:34:24.040 回答
1

我使用 openCloud 创建简单的 java 词云,使用词频和/或对数似然值来调整词的权重(字体大小)。云使用随机颜色并提供简单的随机旋转。

Github 仓库在这里

英文样本

阿拉伯语样本

于 2016-02-25T16:57:52.963 回答