2009-07-22 8 views
52
भीतर

संभव डुप्लिकेट से:
Java Python Integrationअजगर का उपयोग करना जावा

मैं एक बड़ी मौजूदा codebase 100% जावा में लिखा है, लेकिन मैं इसके बारे में कुछ नए वर्गों के लिए अजगर का उपयोग करना चाहते हैं। मुझे कुछ पाठ और भाषा प्रसंस्करण करने की ज़रूरत है, और मैं इसे करने के लिए पाइथन और NLTK जैसी लाइब्रेरी का उपयोग करता हूं।

मैं Jython परियोजना के बारे में पता कर रहा हूँ, लेकिन यह इसके विपरीत एक अजगर के भीतर से जावा और उसके पुस्तकालयों का उपयोग करने के लिए रास्ता है, बजाय का प्रतिनिधित्व करता है की तरह यह लग रहा है - मैं इस बारे में गलत कर रहा हूँ?

यदि नहीं, तो जावा और पायथन के बीच इंटरफ़ेस करने का सबसे अच्छा तरीका क्या होगा, जैसे कि (आदर्श) मैं पाइथन में एक विधि कॉल कर सकता हूं और परिणाम जावा पर वापस आ गया है?

धन्यवाद।

+0

http://stackoverflow.com/questions/1119696/java-python-integration देखें अपनी परियोजना के साथ –

+0

अच्छी किस्मत ... यदि आप 'सफल हो सकता है शायद मेरे प्रश्न से रुकें और इसे कुछ प्यार दें ... एर जवाब दें: http://stackoverflow.com/questions/1075905/class-file-from-jython-with-pydev – Victor

उत्तर

33

मैं Jython परियोजना के बारे में पता कर रहा हूँ, लेकिन यह लग रहा है इस अजगर के भीतर से उपयोग जावा और उसके पुस्तकालयों के लिए एक रास्ता का प्रतिनिधित्व करता है की तरह है, बल्कि दूसरी तरह दौर से - मैं इस बारे में गलत कर रहा हूँ?

हाँ, आप गलत हैं। आप या तो call a command line interpreter या तो जैटन या use python code from Java का उपयोग कर पायथन कोड चलाने के लिए कर सकते हैं।अतीत में एक पायथन-टू-जावा कंपाइलर भी था, लेकिन इसे ज्योथन 2.2

+0

का उपयोग कर सकते हैं तो आपको एक पायथन स्क्रिप्ट कॉल करने के लिए ज्योथन की आवश्यकता क्यों है - मुझे इंटरफ़ेस के साथ दुभाषिया दृष्टिकोण पसंद है, लेकिन मुझे एक बनाना होगा इस पर कॉल करें कि मैं एक प्रदर्शन संकलित बनाम प्रदर्शन हिट कर सकता हूं। लेकिन धन्यवाद और सभी उत्तरदाताओं। – Liam

+7

बस यह जोड़ने के लिए कि पाइथन दुभाषिया को सीधे कॉल करने के पक्ष में jythonc दृष्टिकोण को हटा दिया गया है – dgorissen

+1

बस सीधे चीजों तक, आपको अभी भी अपने सिस्टम में स्थापित पायथन पर्यावरण/पुस्तकालय/आदि की आवश्यकता होगी? – nsn

0

बस पाइथन दुभाषिया को जावा के भीतर से एक उपप्रोसेसर के रूप में चलाएं।

अपनी पायथन कार्यक्षमता को उचित स्क्रिप्ट के रूप में लिखें, जो stdin से पढ़ता है और stdout को लिखता है।

जावा Runtime कक्षा का प्रयोग अपनी पाइथन लिपि चलाने वाले उपप्रोसेस को उत्पन्न करने के लिए करें। यह करना बहुत आसान है और एक बहुत ही साफ इंटरफ़ेस प्रदान करता है।


संपादित

import simplejson 
import sys 
for request in sys.stdin.readlines(): 
    args = simplejson.loads(request) 
    result = myFunction(args['this'], args['that']) 
    sys.stdout.writeline(simplejson.dumps(result) + "\n") 

इंटरफ़ेस सरल है, संरचित और बहुत कम भूमि के ऊपर।

+1

यह वास्तव में नहीं है 2 के बीच इंटरफ़ेस का अच्छा तरीका, वे पियटन में एक विधि कॉल करने में सक्षम नहीं होंगे और इसे जावा में आउटपुट कर पाएंगे। –

+0

मैं कहूंगा कि इंटरफेस साफ के विपरीत है, क्योंकि संचार पूरी तरह से असंरचित है और अतिरिक्त पार्सिंग तर्क की आवश्यकता है। –

+0

सहमत: जावा रनटाइम का उपयोग करके यह थोड़ा गन्दा हो सकता है: इसे तब तक टालें जब तक आपको वास्तव में नहीं करना पड़े। आपको सावधान रहना होगा कि पोर्टेबिलिटी समस्याओं को पेश न करें, आपको रिटर्न स्टेटस को संभालना होगा; आपको गलत व्यवहार प्रक्रियाओं को संभालना पड़ सकता है आदि; आप इसे करने में बहुत अधिक नियंत्रण खो देते हैं। – monojohnny

2

जेथन जेवीएम पर चल रहे एक पायथन कार्यान्वयन है। आप user guide में किसी मौजूदा जावा ऐप में पायथन को एम्बेड करने के बारे में जानकारी पा सकते हैं।

मुझे उस माहौल को नहीं पता है जिसमें आप काम कर रहे हैं, लेकिन ध्यान रखें कि एक ही ऐप में भाषाओं को मिलाकर जल्दी ही गड़बड़ी हो सकती है। मैं पाइथन कोड को लपेटने वाले अलग-अलग-पैक किए गए कार्यान्वयन कक्षाओं के साथ-साथ उन संचालनों का प्रतिनिधित्व करने के लिए जावा इंटरफेस बनाने की अनुशंसा करता हूं।

6

मैं पाठ और भाषा प्रसंस्करण को संभालने के लिए एक पायथन मॉड्यूल लिखूंगा, और उसके बाद जैवॉन में एक छोटा सा पुल तैयार करूँगा जिसमें आपका जावा प्रोग्राम बातचीत कर सकता है। ज्योथन पुल एक बहुत ही सरल होगा, जो वास्तव में केवल पायथन मॉड्यूल पर कॉल अग्रेषित करने के लिए ज़िम्मेदार है, और पाइथन मॉड्यूल से जावा मॉड्यूल में जवाब लौटाता है। ज्योथन का उपयोग करना वास्तव में आसान है, और सेटअप आपको 15 मिनट से अधिक नहीं लेना चाहिए।

शुभकामनाएँ!

+0

मुझे यह विचार पसंद है। क्या आप उदाहरण के लिए – KillBill

+0

पर इंगित कर सकते हैं या फिर जब आप Process.exec या ProcessBuilder – KillBill

2

मेरी राय में बंद कर दिया गया है, ज्योथन बिल्कुल वही है जो आप देख रहे हैं।
यह जेवीएम के भीतर पाइथन के कार्यान्वयन है; इस प्रकार, आप वस्तुओं का स्वतंत्र रूप से आदान-प्रदान कर सकते हैं और, उदाहरण के लिए, जावा क्लास (कुछ सीमाओं के साथ) से प्राप्त होता है।

ध्यान दें कि, इसकी प्रमुख ताकत बिंदु (जेवीएम के शीर्ष पर होने पर) भी इसकी बड़ी कमी है, क्योंकि यह सी (या किसी अन्य संकलित भाषा में) में लिखे गए सभी (सी) पायथन एक्सटेंशन का उपयोग नहीं कर सकती है; इससे आपके टेक्स्ट प्रोसेसिंग के साथ क्या करना है, इस पर असर पड़ सकता है।

ज्योथन, इसकी संभावित और इसकी सीमाओं के बारे में अधिक जानकारी के लिए, मैं आपको Jython FAQ पढ़ने का सुझाव देता हूं।

4

मुझे नहीं लगता कि आप जेथॉन से एनएलटीके का उपयोग कर सकते हैं, क्योंकि यह एनम्पी पर निर्भर करता है जो JVM को पोर्ट नहीं किया जाता है। यदि आपको एनएलटीके या किसी अन्य देशी सीपीथन एक्सटेंशन की आवश्यकता है, तो आप सीपीथॉन और जेवीएम के बीच संवाद करने के लिए कुछ आईपीसी तंत्र का उपयोग करने पर विचार कर सकते हैं।

http://jepp.sourceforge.net/

रिवर्स (CPython से जावा कोड बुला) JPype के लक्ष्य और javaclass है::

sourceforge कहा जा रहा है, वहाँ जावा से CPython बुला अनुमति देने के लिए एक परियोजना, Jepp कहा जाता है। शुद्ध/परियोजनाओं/jpype/

pypi.python.org/pypi/javaclass/0.1

मैं इन परियोजना के किसी भी उपयोग नहीं किया है, इसलिए मैं उनकी गुणवत्ता के लिए व्रत cant't।

0

पहले विकास के लिए भुगतान करने वाले लोगों से जांचना याद रखें कि वे डेवलपर की आवश्यकता वाले कोडबेस के साथ ठीक हैं जो अब से पाइथन और जावा दोनों को जानता है, और अन्य लागत और रखरखाव प्रभाव जो आपने निस्संदेह पहले से ही जिम्मेदार हैं।

देखें: http://www.acm.org/about/se-code 1.06, 2.03, 2.09, 4.03, 4.05, 6.07