首頁(yè)技術(shù)文章正文

編程語(yǔ)言之間都是互通的

更新時(shí)間:2018-11-09 來(lái)源:黑馬程序員 瀏覽量:

1.為什么用java調(diào)用python
2.本程序環(huán)境要求
3.程序書寫
3.1.java基本代碼書寫
4.程序結(jié)果
5.總結(jié)
1.為什么用java調(diào)用python
java在web程序具有很大的優(yōu)勢(shì),然而在科學(xué)計(jì)算,機(jī)器學(xué)習(xí)等領(lǐng)域中不如python,使用java調(diào)用python就是為了能夠使得一個(gè)問題能夠更好的解決。

2.本程序環(huán)境要求
java開發(fā)環(huán)境:eclipse 
python開發(fā)環(huán)境:python3.6 - spyder 
python包的要求:wordcloud(安裝方式:http://blog.csdn.net/meiqi0538/article/details/79535513)

3.程序書寫
3.1.java基本代碼書寫
創(chuàng)建一個(gè)java工程我這里是命名為:TestCollection01;在src目錄下載創(chuàng)建一個(gè)包:cn.python.test;創(chuàng)建一個(gè)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" + 
                "  他重新經(jīng)過(guò)安檢,回到了候機(jī)大廳。大廳里仍是一片嘈雜。他強(qiáng)迫自己鎮(zhèn)靜,在飲水機(jī)前喝了幾口水,找了一處空椅子坐下,閉目養(yǎng)神。已經(jīng)落網(wǎng)的趙德漢的形象適時(shí)浮現(xiàn)在眼前,他禁不住又沉浸到了對(duì)趙德漢的回憶中。昨天晚上,當(dāng)此人捧著大海碗吃炸醬面時(shí),老舊的木門“吱呀”一聲開了,他代表命運(yùn)來(lái)敲這位貪官的家門了。\r\n" + 
                "  貪官一臉憨厚相,乍看上去,不太像機(jī)關(guān)干部,倒像個(gè)剛";
        //定義個(gè)獲取結(jié)果的變量
        String result="";
        try {
            //調(diào)用python,其中字符串?dāng)?shù)組對(duì)應(yīng)的是python,python文件路徑,向python傳遞的參數(shù)
            String[] strs=new String[] {"python","E:\\Python\\code\\python_BaseLearn\\Jieba\\test1.py",text};
            //Runtime類封裝了運(yùn)行時(shí)的環(huán)境。每個(gè) Java 應(yīng)用程序都有一個(gè) Runtime 類實(shí)例,使應(yīng)用程序能夠與其運(yùn)行的環(huán)境相連接。
            //一般不能實(shí)例化一個(gè)Runtime對(duì)象,應(yīng)用程序也不能創(chuàng)建自己的 Runtime 類實(shí)例,但可以通過(guò) getRuntime 方法獲取當(dāng)前Runtime運(yùn)行時(shí)對(duì)象的引用。
            // exec(String[] cmdarray) 在單獨(dú)的進(jìn)程中執(zhí)行指定命令和變量。 
            Process pr = Runtime.getRuntime().exec(strs);
            //使用緩沖流接受程序返回的結(jié)果
            BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream(),"GBK"));//注意格式
            //定義一個(gè)接受python程序處理的返回結(jié)果
            String line=" ";
            while((line=in.readLine())!=null) {
                //循環(huán)打印出運(yùn)行的結(jié)果
                result+=line+"\n";
            }
            //關(guān)閉in資源
            in.close();
            pr.waitFor();
        }catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("python傳來(lái)的結(jié)果:");
        //打印返回結(jié)果
        System.out.println(result);
    }
}

python代碼如下:

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 20 22:35:03 2018

@author: piqia
"""
import sys
import jieba

#添加需要自定以的分詞, 這里是使用的jieba分詞,并且這里使用的文本為人民的名義,需要為分詞庫(kù)添加一些分詞
jieba.add_word("侯亮平")
jieba.add_word("沙瑞金")
jieba.add_word("趙東來(lái)")
jieba.add_word("京州市")

#定義個(gè)函數(shù)式用于分詞
def jiebaclearText(text):
    #定義一個(gè)空的列表,將去除的停用詞的分詞保存
    mywordList=[]
    #進(jìn)行分詞
    seg_list=jieba.cut(text,cut_all=False)
    #將一個(gè)generator的內(nèi)容用/連接
    listStr='/'.join(seg_list)
    #對(duì)默認(rèn)模式分詞的進(jìn)行遍歷,去除停用詞
    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}個(gè)結(jié)果{1}".format(str(i),str(sum)))

if __name__=="__main__":
    for i in range(1,len(sys.argv)):
        #獲取系統(tǒng)傳來(lái)的參數(shù)
        text=sys.argv
        text1=jiebaclearText(text)
        print(text1)
        mathTest()

4.程序結(jié)果

作者:黑馬程序員人工智能+Python培訓(xùn)學(xué)院
首發(fā):http://python.itheima.com/

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!