導航:首頁 > 編程語言 > pythongensim使用

pythongensim使用

發布時間:2023-03-05 07:17:01

java調用python,有第三方包gensim,怎麼調用呢,是報錯。求教....

Jython(原JPython),是一個用Java語言寫的Python解釋器。

在沒有第三方模塊的情況下,通常選擇利用Jython來調用Python代碼,

它是一個開源的JAR包,你可以到官網下載

一個HelloPython程序

importorg.python.util.PythonInterpreter;

publicclassHelloPython{

publicstaticvoidmain(String[]args){

PythonInterpreterinterpreter=newPythonInterpreter();

interpreter.exec("print('hello')");

}

}

什麼是PythonInterpreter?它的中文意思即是「Python解釋器」。我們知道Python程序都是通過解釋器來執行的,我們在Java中創建一個「解釋器」對象,模擬Python解釋器的行為,通過exec("Python語句")直接在JVM中執行Python代碼,上面代碼的輸出結果為:hello

在Jvm中執行Python腳本

interpreter.execfile("D:/labs/mytest/hello.py");

如上,將exec改為execfile就可以了。需要注意的是,這個.py文件不能含有第三方模塊,因為這個「Python腳本」最終還是在JVM環境下執行的,如果有第三方模塊將會報錯:javaImportError:Nomolenamedxxx

僅在Java中調用Python編寫的函數

先完成一個hello.py代碼:

defhello():

return'Hello'

在Java代碼中調用這個函數:

importorg.python.core.PyFunction;

importorg.python.core.PyObject;

importorg.python.util.PythonInterpreter;

publicclassHelloPython{

publicstaticvoidmain(String[]args){

PythonInterpreterinterpreter=newPythonInterpreter();

interpreter.execfile("D:/labs/hello.py");

PyFunctionpyFunction=interpreter.get("hello",PyFunction.class);//第一個參數為期望獲得的函數(變數)的名字,第二個參數為期望返回的對象類型

PyObjectpyObject=pyFunction.__call__();//調用函數

System.out.println(pyObject);

}

}

上面的代碼執行結果為:Hello

即便只是調用一個函數,也必須先載入這個.py文件,之後再通過Jython包中所定義的類獲取、調用這個函數。

如果函數需要參數,在Java中必須先將參數轉化為對應的「Python類型」,例如:

__call__(newPyInteger(a),newPyInteger(b))

a,b的類型為Java中的int型,還有諸如:PyString(Stringstring)、PyList(Iterator<PyObject>iter)等。

詳細可以參考官方的api文檔。

包含第三方模塊的情況:一個手寫識別程序

這是我和舍友合作寫的一個小程序,完整代碼在這里:

,界面上引用了corejava上的一段代碼。Python代碼是舍友寫的,因為在Python程序中使用了第三方的NumPy模塊,導致無法通過Jython執行。下面這個方法純粹是個人思路,沒有深入查資料。核心代碼如下:

importjava.io.*;

classPyCaller{

privatestaticfinalStringDATA_SWAP="temp.txt";

privatestaticfinalStringPY_URL=System.getProperty("user.dir")+"\test.py";

(Stringpath){

PrintWriterpw=null;

try{

pw=newPrintWriter(newFileWriter(newFile(DATA_SWAP)));

}catch(IOExceptione){

e.printStackTrace();

}

pw.print(path);

pw.close();

}

publicstaticStringreadAnswer(){

BufferedReaderbr;

Stringanswer=null;

try{

br=newBufferedReader(newFileReader(newFile(DATA_SWAP)));

answer=br.readLine();

}catch(FileNotFoundExceptione){

e.printStackTrace();

}catch(IOExceptione){

e.printStackTrace();

}

returnanswer;

}

publicstaticvoidexecPy(){

Processproc=null;

try{

proc=Runtime.getRuntime().exec("python"+PY_URL);

proc.waitFor();

}catch(IOExceptione){

e.printStackTrace();

}catch(InterruptedExceptione){

e.printStackTrace();

}

}

//測試碼

publicstaticvoidmain(String[]args)throwsIOException,InterruptedException{

writeImagePath("D:\labs\mytest\test.jpg");

execPy();

System.out.println(readAnswer());

}

}

實際上就是通過Java執行一個命令行指令。

⑵ 如何用python做數據分析

首先,是數據分析的模塊,numpy 高效處理數據,提供數組支持,很多模塊都依賴它,比如pandas,scipy,matplotlib都依賴他,所
以這個模塊都是基礎。所以必須先安裝numpy。
然後,pandas 主要用於進行數據的採集與分析,scipy 主要進行數值計算。同時支持矩陣運算,並提供了很多高等數據處理功能,比如
積分,微分方程求樣等。matplotlib 作圖模塊,結合其他數據分析模塊,解決可視化問題,statsmodels 這個模塊主要用於統計分析,
Gensim 這個模塊主要用於文本挖掘,sklearn,keras 前者機器學習,後者深度學習。
然後,安裝的numpy版本一定要是帶mkl版本的,沒有返回值的,修改原處的值,這里等於修改了Xx.max() # 最大值,對二維數組都管
用x.min() # 最小值,對二維數組都管用x1=x[1:3] # 取區間,和python的列表沒有區別。
然後,通過pandas導入數據,pandas支持多種輸入格式,我這里就簡單羅列日常生活最常用的幾種,對於更多的輸入方式可以查看源碼
後者官網。csv文件導入後顯示輸出的話,是按照csv文件默認的行輸出的,有多少列就輸出多少列。
更多學習內容,請點擊《Python學習網》!

閱讀全文

與pythongensim使用相關的資料

熱點內容
怎麼買賣副圖源碼 瀏覽:660
廣東農信app怎麼更改預留手機號碼 瀏覽:777
嵌套頁面php 瀏覽:566
安卓手機怎麼調到微信聊天模式 瀏覽:857
java博客開源系統 瀏覽:719
男人之間的加密對話日語 瀏覽:359
怎麼連遠程連接伺服器 瀏覽:11
安卓二手手機該如何檢測 瀏覽:213
微信可以共享圖片文件夾嗎 瀏覽:80
聯通wifi加密碼 瀏覽:643
錄屏文件夾小米 瀏覽:548
車上的app怎麼重設 瀏覽:24
指定文件夾屬性 瀏覽:131
linuxphp編程 瀏覽:337
以下不正確的是雲伺服器 瀏覽:909
琉璃神社壓縮密碼 瀏覽:715
大一學生解壓視頻 瀏覽:376
單位電腦e盤加密輸入正確密碼 瀏覽:873
phpfileupload 瀏覽:634
刑拘程序員 瀏覽:617