61

重複の可能性:
Java Python 統合

100% Java で記述された既存の大規模なコードベースがありますが、その一部の新しいセクションには Python を使用したいと考えています。テキストと言語の処理を行う必要があり、これを行うには Python とNLTKのようなライブラリを使用したいと考えています。

Jython プロジェクトは知っていますが、これは Python 内から Java とそのライブラリを使用する方法を表しているように見えますが、その逆ではありません。これは間違っていますか?

そうでない場合、(理想的には) Python でメソッドを呼び出して結果を Java に返すことができるように、Java と Python の間でインターフェイスをとるための最良の方法は何でしょうか?

4

7 に答える 7

34

Jython プロジェクトは知っていますが、これは Python 内から Java とそのライブラリを使用する方法を表しているように見えますが、その逆ではありません。これは間違っていますか?

はい、あなたは間違っています。コマンド ライン インタープリターを呼び出して、Jyton を使用して Python コードを実行するか、Java から Pythonコードを使用することができます。過去には python-to-Java コンパイラーもありましたが、Jython 2.2 で廃止されました。

于 2009-07-22T12:14:05.303 に答える
6

テキストと言語の処理を処理する Python モジュールを作成し、Java プログラムが対話できる小さなブリッジを jthon で構築します。jython ブリッジは、Python モジュールへの呼び出しを転送し、Python モジュールから Java モジュールに応答を返すだけの非常に単純なものになります。Jython は非常に使いやすく、セットアップには 15 分もかかりません。

頑張ってください!

于 2009-07-22T12:12:29.500 に答える
4

Jython から NLTK を使用できるとは思いません。JVM に移植されていない Numpy に依存しているためです。NLTK またはその他のネイティブ CPython 拡張機能が必要な場合は、IPC メカニズムを使用して CPython と JVM の間で通信することを検討してください。そうは言っても、Jepp と呼ばれる Java からの CPython の呼び出しを許可するプロジェクトがあります。

http://jepp.sourceforge.net/

逆 (CPython から Java コードを呼び出す) は、JPype と javaclass の目標です。

sourceforge.net/projects/jpype/

pypi.python.org/pypi/javaclass/0.1

私はこれらのプロジェクトを使用したことがないので、その品質を保証することはできません.

于 2009-07-22T15:21:17.770 に答える
2

私の意見では、Jythonはまさにあなたが見ているものです。
これは、JVM内でのPythonの実装です。そのため、オブジェクトを自由に交換したり、たとえばJavaクラスから継承したりできます(いくつかの制限があります)。

C(または他のコンパイル言語)で記述されたすべての(C)Python拡張機能を使用できないため、その主な長所(JVMの上にある)も主な欠点であることに注意してください。これは、テキスト処理で何をしようとしているかに影響を与える可能性があります。

Jythonとは何か、その可能性と制限について詳しくは、JythonFAQをお読みになることをお勧めします

于 2009-07-22T12:29:52.033 に答える
2

Jython は、JVM 上で実行される Python 実装です。Python を既存の Java アプリに埋め込む方法については、ユーザー ガイドを参照してください。

あなたが作業している環境はわかりませんが、同じアプリで言語を混在させると、すぐに混乱する可能性があることに注意してください。Python コードをラップする個別にパッケージ化された実装クラスと共に、使用する予定の操作を表す Java インターフェイスを作成することをお勧めします。

于 2009-07-22T12:11:43.027 に答える
0

Python インタープリターを Java 内からサブプロセスとして実行するだけです。

標準入力から読み取り、標準出力に書き込む適切なスクリプトとして Python 機能を記述します。

JavaRuntimeクラスを使用して、Python スクリプトを実行するサブプロセスを生成します。これは非常に簡単に実行でき、非常にクリーンなインターフェースを提供します。


編集

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" )

インターフェイスはシンプルで構造化されており、オーバーヘッドが非常に少ないです。

于 2009-07-22T12:10:31.483 に答える
0

最初に、開発にお金を払っている人に、今後 Python と Java の両方を知っている開発者を必要とするコードベースに問題がないこと、およびあなたが間違いなくすでに説明したその他のコストと保守性の影響を確認することを忘れないでください。

参照: http://www.acm.org/about/se-code 1.06、2.03、2.09、4.03、4.05、6.07

于 2009-07-22T17:45:24.067 に答える