全国咨询/投诉热线:400-618-9090

首页技术文章

为什么用java调用python?会产生什么样的结果?

更新时间:2018年11月09日 13时29分31秒 来源:黑马程序员

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/