更新时间:2018-11-09 来源:黑马程序员 浏览量:
1.为什么用java调用python
2.本程序环境要求
3.程序书写
3.1.java基本代码书写
4.程序结果
5.总结
1.为什么用java调用python
java在web程序具有很大的优势,然而在科学计算,机器学习等领域中不如python,使用java调用python就是为了能够使得一个问题能够更好的解决。
2.本程序环境要求
java开发环境:eclipse
python开发环境:python3.6 - spyder
python包的要求:wordcloud(安装方式:http://blog.csdn.net/meiqi0538/article/details/79535513)
3.程序书写
3.1.java基本代码书写
创建一个java工程我这里是命名为:TestCollection01;在src目录下载创建一个包:cn.python.test;创建一个java文件:demo01.java。
java代码如下:
package cn.python.test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class demo01 {
public static void main(String[] args) {
String text="呢。\r\n" +
" 他重新经过安检,回到了候机大厅。大厅里仍是一片嘈杂。他强迫自己镇静,在饮水机前喝了几口水,找了一处空椅子坐下,闭目养神。已经落网的赵德汉的形象适时浮现在眼前,他禁不住又沉浸到了对赵德汉的回忆中。昨天晚上,当此人捧着大海碗吃炸酱面时,老旧的木门“吱呀”一声开了,他代表命运来敲这位贪官的家门了。\r\n" +
" 贪官一脸憨厚相,乍看上去,不太像机关干部,倒像个刚";
//定义个获取结果的变量
String result="";
try {
//调用python,其中字符串数组对应的是python,python文件路径,向python传递的参数
String[] strs=new String[] {"python","E:\\Python\\code\\python_BaseLearn\\Jieba\\test1.py",text};
//Runtime类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
//一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。
// exec(String[] cmdarray) 在单独的进程中执行指定命令和变量。
Process pr = Runtime.getRuntime().exec(strs);
//使用缓冲流接受程序返回的结果
BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream(),"GBK"));//注意格式
//定义一个接受python程序处理的返回结果
String line=" ";
while((line=in.readLine())!=null) {
//循环打印出运行的结果
result+=line+"\n";
}
//关闭in资源
in.close();
pr.waitFor();
}catch (Exception e) {
e.printStackTrace();
}
System.out.println("python传来的结果:");
//打印返回结果
System.out.println(result);
}
}
python代码如下:
# -*- coding: utf-8 -*-
"""
Created on Tue Mar 20 22:35:03 2018
@author: piqia
"""
import sys
import jieba
#添加需要自定以的分词, 这里是使用的jieba分词,并且这里使用的文本为人民的名义,需要为分词库添加一些分词
jieba.add_word("侯亮平")
jieba.add_word("沙瑞金")
jieba.add_word("赵东来")
jieba.add_word("京州市")
#定义个函数式用于分词
def jiebaclearText(text):
#定义一个空的列表,将去除的停用词的分词保存
mywordList=[]
#进行分词
seg_list=jieba.cut(text,cut_all=False)
#将一个generator的内容用/连接
listStr='/'.join(seg_list)
#对默认模式分词的进行遍历,去除停用词
for myword in listStr.split('/'):
mywordList.append(myword)
return '/ '.join(mywordList)
def mathTest():
sum=0
for i in range(1,11):
sum+=i
print("这是1-10累加和的第{0}个结果{1}".format(str(i),str(sum)))
if __name__=="__main__":
for i in range(1,len(sys.argv)):
#获取系统传来的参数
text=sys.argv
text1=jiebaclearText(text)
print(text1)
mathTest()
4.程序结果
作者:黑马程序员人工智能+Python培训学院
首发:http://python.itheima.com/