一直想找个java包画词云,但是网上并没有什么现成方案。在github上用关键词wordcloud搜一下,发现用java开发的没有比较好的开源项目(获得星星都很少,最多也就个位数)。但是又想在java项目上用上词云,考虑了一下,还是用java调取R语言的wordcloud包来画词云,然后用swing界面显示。

下面给出基本步骤:

1. java与R的通信,网上的步骤很多,这里不做具体讲解,这里使用的是Rserve方式连接。基本步骤是:

a.安装好jdk和R。

b.R中安装wordcloud包和Rserve包。

c.java项目中导入REngine.jar和RserveEngine.jar两个包。如下图:

2. 先给出代码:Rutil.java是java连接R的连接类,WordCloud.java是java画词云的实现类

package rserve;import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;
/*******************************************
* @function:
* @author hduxyd
* @note:
******************************************/
public class RUtil {private static String R_EXE_PATH = "D:\\R-3.0.1_7\\bin\\R.exe";private static String R_SCRIPT_PATH = "D:\\R-3.0.1_7\\MyScript\\rserve.R";public static RConnection getRConnection() {try {RConnection rcon = new RConnection();return rcon;} catch (RserveException e) {System.out.println("Rserve未开启,现在启动RServe……");try {Runtime rn = Runtime.getRuntime();rn.exec(R_EXE_PATH + " CMD BATCH \"" + R_SCRIPT_PATH + "\"");Thread.sleep(1000);} catch (Exception e1) {e1.printStackTrace();}return getRConnection();}}
}
package rserve;/******************************************* @function:* @author hduxyd* @note:******************************************/
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import javax.swing.JFrame;
import org.rosuda.REngine.REXP;
import org.rosuda.REngine.Rserve.RConnection;public class WordCloud extends JFrame {private static final long serialVersionUID = 1L;static Image img;public static void main(String[] args) throws Exception {WordCloud wc = new WordCloud();REXP xp = wc.getRobj();// 获得R的内容对象wc.PlotDemo(xp, wc);}/*** @throws Exception* @function:*/private REXP getRobj() throws Exception {RConnection c = RUtil.getRConnection();c.setStringEncoding("utf8");REXP Rversion = c.eval("R.version.string");System.out.println(Rversion.asString());System.out.println("\n--------------画图演示----------------");REXP xp = c.parseAndEval("jpeg('test.jpg',quality=90)");c.eval("library(wordcloud)");c.voidEval("colors=c('red','blue','green','yellow','purple')");c.eval("data=read.table('C:/Users/xyd/Desktop/测试.txt',header = F)");c.parseAndEval("wordcloud(data$V2,data$V1,scale=c(5,0.3),min.freq=-Inf,max.words=60,colors=colors,random.order=F,random.color=F,ordered.colors=F);dev.off()");xp = c.parseAndEval("r=readBin('test.jpg','raw',2048*2048); unlink('test.jpg'); r");return xp;}public void PlotDemo(REXP xp, JFrame f) throws Exception {img = Toolkit.getDefaultToolkit().createImage(xp.asBytes());MediaTracker mediaTracker = new MediaTracker(this);mediaTracker.addImage(img, 0);mediaTracker.waitForID(0);f.setTitle("Test image");f.setSize(img.getWidth(null), img.getHeight(null));f.setDefaultCloseOperation(EXIT_ON_CLOSE);f.setVisible(true);}public void paint(Graphics g) {g.drawImage(img, 0, 0, null);}
}

3. 需要解释的地方

在Rutil.java中有两个路径,R_EXE_PATH 和R_SCRIPT_PATH

R_EXE_PATH:

R_SCRIPT_PATH:

在R安装路径的根目录下新建一个MyScript文件夹,在文件夹下写一个R脚本,两行代码:

library(Rserve)

Rserve()

4. 需要注意的地方:

这样执行成功的话,程序会关不掉,在myeclipse中点击红色按钮没反应。这时需要打开任务管理器。将Rserve服务关闭才行。这样程序才能结束运行。

解决办法是先关闭原有Rserve进程,打开R软件,运行Rserve()重开一个进程,再执行上文给出的java代码:

问题是解决了,但是感觉并不方便,不知道有没有更好的方案,坐等大神指教。

5. 数据格式以及运行结果:

在 c.eval("data=read.table('C:/Users/xyd/Desktop/测试.txt',header = F)");  这条代码中可以看到我是把测试数据放到桌面的。

测试.txt        格式为:词频  词语     //中间空格         内容为:

11 郑州
21 白糖
31 期货
41 小幅
51 低开
61 震荡
71 跌幅
81 分析师
91 表示
101 下跌
111 态势
121 食糖
131 价格
141 昨日
151 继续
141 不过
131 午盘
121 止跌
111 继续
101 反抽
91 力度
81 不大
71 低位
61 买盘
51 积极
41 目前
31 采购
21 糖价
11 反弹

结果图:

最后欢迎各位批评指正

java调用R 画词云相关推荐

  1. 用R进行文本挖掘与分析:分词、画词云

    数据分析入门与实战  公众号: weic2c 要分析文本内容,最常见的分析方法是提取文本中的词语,并统计频率.频率能反映词语在文本中的重要性,一般越重要的词语,在文本中出现的次数就会越多.词语提取后, ...

  2. java怎么画词云_Matplotlib学习---用wordcloud画词云(Word Cloud)

    画词云首先需要安装wordcloud(生成词云)和jieba(中文分词). 先来说说wordcloud的安装吧,真是一波三折.首先用pip install wordcloud出现错误,说需要安装Vis ...

  3. JAVA调用R语言之Rserve(二)

    之前,我写了一篇文章是java调用R语言之Rserve,但我发现那种方法比较麻烦.后来我发现了一个比较方便的方法,所以今天从又写了一篇博客,来简单说说. 这次我们需要写一个简单的R语言脚本,然后通过运 ...

  4. R语言生成词云(wordcloud)实战

    R语言生成词云(wordcloud)实战 目录 R语言生成词云(wordcloud)实战 #包的安装及导入 #仿真数据

  5. JAVA调用R语言之Rserve

    为什么要用java调用R? Java作为一个非常流行的编程语言,具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂 ...

  6. R语言实战应用精讲50篇(十三)-如何使用JAVA调用R语言,两种语言的完美结合

    前言 为什么要用java调用R? Java作为一个非常流行的编程语言,具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进 ...

  7. SQL Server报表生成器中的R脚本词云

    什么是R (What is R) R is a very popular data programing language. R is especially used in data analysis ...

  8. 小程序画布功能+JAVA用KUMO生成词云图片

    小程序画布功能+JAVA用KUMO生成词云图片 KUMO git地址:https://github.com/kennycason/kumo 原理:利用Kumo生成词云,并转换成64位传到小程序,小程序 ...

  9. Java调用R脚本的方法总结

    0 前言 R是一种非常方便易用的绘图.统计分析.ML算法设计方面的脚本语言.实际中有这样一种场景:算法工程师用R搭建了机器学习算法模型,想用于javaweb之中但是又不想重新用java写一遍算法模型, ...

最新文章

  1. 利用硅光子学的移动心脏监护仪
  2. 安装ESXi5.5遇到Relocating modules and starting up the kernel的处理
  3. SRS前需求双向追溯解决方法
  4. 这个火热的社区都升级到2.0了,你还不知道它?
  5. Servlet之第一个web项目
  6. OpenWrt分支LEDE嵌入式无线路由系统定制-1.编辑环境搭建
  7. OWOD:开放世界目标检测,更贴近现实的检测场景 | CVPR 2021 Oral
  8. 2021全国研究生数学建模竞赛D题思路
  9. 基于FlashWavRecorder实现IE11浏览器录音后用科大讯飞转文字
  10. 王者s19服务器维护,王者S19丨4个必须知道的调整!最后一个不知没法玩!
  11. 修复谷歌拼音输入法已停止运行
  12. 轻流整体调研-v 1.0
  13. DE-MerTOX™ 重金属排毒剂-道格拉斯实验室
  14. 从Java 8 到 Java 14,几个令人印象深刻的新特性
  15. Linux学习笔记1:文件权限和chgrp、chown、chmod指令
  16. 使用vnc软件将kindle作为显示屏。
  17. 斜视锥体裁剪Camera.CalculateObliqueMatrix的推导
  18. vue图书推荐_Vue上面向图书馆作者和最终用户的聊天社区
  19. 全国计算机应用水平考试是一级吗,全国计算机等级考试1级证书可以免考计算机应用能力考试吗?...
  20. 【c语言趣味编程100例】出售金鱼

热门文章

  1. edge 黑色 护眼 深色模式
  2. Android TabLayout基本使用及完美调整指示器位置的技巧
  3. 心田花开:中学生心理状态分析
  4. Java工程师未来的三大就业方向
  5. 值得收藏!EEG/ MEG/MRI/ fNIRS公开数据库大盘点
  6. pixhawk2.4.8飞控相关资料
  7. SSClone非ARP会话劫持原理分析-ARP原理
  8. 线性插值(双线性)(三线性)
  9. iOS 常用第三方库及插件
  10. IntelliJ IDEA查看类层次结构图