更新時(shí)間:2018-11-09 來(lái)源:黑馬程序員 瀏覽量:
1.為什么用java調(diào)用python
2.本程序環(huán)境要求
3.程序書(shū)寫(xiě)
3.1.java基本代碼書(shū)寫(xiě)
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è)問(wèn)題能夠更好的解決。
2.本程序環(huán)境要求
java開(kāi)發(fā)環(huán)境:eclipse
python開(kāi)發(fā)環(huán)境:python3.6 - spyder
python包的要求:wordcloud(安裝方式:http://blog.csdn.net/meiqi0538/article/details/79535513)
3.程序書(shū)寫(xiě)
3.1.java基本代碼書(shū)寫(xiě)
創(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í),老舊的木門(mén)“吱呀”一聲開(kāi)了,他代表命運(yùn)來(lái)敲這位貪官的家門(mén)了。\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類(lèi)封裝了運(yùn)行時(shí)的環(huán)境。每個(gè) Java 應(yīng)用程序都有一個(gè) Runtime 類(lèi)實(shí)例,使應(yīng)用程序能夠與其運(yùn)行的環(huán)境相連接。
//一般不能實(shí)例化一個(gè)Runtime對(duì)象,應(yīng)用程序也不能創(chuàng)建自己的 Runtime 類(lèi)實(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/