1. 程式人生 > >使用java呼叫python程式碼

使用java呼叫python程式碼

1.為什麼用java呼叫python

java在web程式具有很大的優勢,然而在科學計算,機器學習等領域中不如python,使用java呼叫python就是為了能夠使得一個問題能夠更好的解決。

2.本程式環境要求

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[i]
        text1=jiebaclearText(text)
        print(text1)
        mathTest()

4.程式結果

這裡寫圖片描述

5.總結