我想優化我目前正在處理的一個python項目中一些自然語言處理的性能。基本上我想將計算密集的部分外包給使用apache OpenNLP,它是用Java編寫的。從python調用java代碼
我的問題是將Java函數/類鏈接回我的python代碼的推薦方式是什麼?我曾經想過的三個主要方法是
使用C/C++綁定在蟒蛇,然後嵌入在我的C程序中的JVM。這就是我所傾向的,因爲我對Python的C擴展有些熟悉,但是使用C語言的三角形作爲中介似乎並不正確。使用Jython。我主要關心的是,據我所知,CPython是絕大多數流行的python實現,我不想破壞與其他協作者或包的兼容性。
流輸入和輸出到二進制文件 OpenNLP隨附。 Apache提供令牌處理器,例如可以管理數據的獨立二進制文件。這可能是最容易實現的選項,但它似乎也是最粗糙的。
我想知道如果任何人誰擁有經驗接口Python和Java知道性能有多大可能在這些選項之間不同,哪一個是「推薦」或在這種情況下被認爲是最佳的做法 - 或當然如果有一種完全不同的方式來做到這一點,我還沒有想到。
我確實搜索過現有的答案,發現this,但它是從3.5年前的答案,並提到一些項目,要麼死了,很難整合/配置/安裝或仍在開發中。
有些評論提到,與運行實際NLP代碼所需的時間相比,所有三種方法的開銷可能都是微不足道的。這可能是事實,但我仍然對從更一般的角度來看答案感興趣。
謝謝!
呃,我沒有看到綁定的性能真的很重要......大部分時間將花在OepnNLP本身上,對吧? – fge
嗯,我不知道 - 你告訴我:)要考慮的一件事是,目前代碼的方式,我經常打電話給OpenNLP來處理一小塊文本,所以這就是爲什麼我認爲優化綁定可能會是重要的(儘管在理論上,當然可以重新調整我現有的代碼以最小化調用的發生)。我也只是好奇這種場景的「最佳實踐」是什麼 – Moritz
嗯,_you_告訴我案例;)如果塊很小並且處理得很快,那麼是的,「跨語言調用」的開銷確實是一個需要考慮的事情。 – fge