4

私が達成しようとしていることを説明しましょう。過去にJavaプラットフォームで作業していたとき、私はJavaコードを書き(たとえば、MySQLデータベースからデータをプッシュまたはプルするなど)、基本的にすべてのクラスファイル、サポートファイルなどをバンドルするwarファイルを作成し、それをTomcat のようなサーブレット コンテナーであり、これが Web サービスになり、任意のプラットフォームから呼び出すことができます。

私の現在のシナリオでは、作業の大部分は Java で行われていますが、自然言語処理 (NLP)/機械学習 (ML) の部分は、NLTK、Scipy、Numpy などのライブラリを使用して Python で行われています。この Python エンジンのサービスを既存の Java コードで使用しようとしています。Jythonのようなものを介してPythonコードをJavaに統合することはそれほど簡単ではありません(私の知る限り、JythonはCベースの拡張機能を持つPythonモジュールの呼び出しをサポートしていないため)。過去に Java Web サービスで行ったことと同様の Web サービス。ML エンジンを Web サービスとして実行し、任意のプラットフォームから同じものを呼び出すにはどうすればよいでしょうか。現在のシナリオでは、これはたまたま Java です。ネットで調べてみましたが、これを達成するためのさまざまなオプションについて、CherryPy、Werkzeugなどを見つけましたが、適切なアプローチやサンプルコード、またはNLTK-Pythonスクリプトを呼び出してWeb経由で結果を提供する方法を示すものを見つけることができず、最終的に機能を複製しますJava Web サービスが提供します。Python-NLTK コードでは、ML エンジンが大規模なコーパスでデータ トレーニングを実行します (これには 3 ~ 4 分かかります)。メソッドが呼び出されるたびに Python コードがこのステップを実行することは望ましくありません。これを Web サービスにすると、データ トレーニングはサービスの開始時に 1 回だけ行われ、サービスを呼び出して既にトレーニング済みのエンジンを使用する準備が整います。最終的には、Java Web サービスが提供する機能を複製します。Python-NLTK コードでは、ML エンジンが大規模なコーパスでデータ トレーニングを実行します (これには 3 ~ 4 分かかります)。メソッドが呼び出されるたびに Python コードがこのステップを実行することは望ましくありません。これを Web サービスにすると、データ トレーニングはサービスの開始時に 1 回だけ行われ、サービスを呼び出して既にトレーニング済みのエンジンを使用する準備が整います。最終的には、Java Web サービスが提供する機能を複製します。Python-NLTK コードでは、ML エンジンが大規模なコーパスでデータ トレーニングを実行します (これには 3 ~ 4 分かかります)。メソッドが呼び出されるたびに Python コードがこのステップを実行することは望ましくありません。これを Web サービスにすると、データ トレーニングはサービスの開始時に 1 回だけ行われ、サービスを呼び出して既にトレーニング済みのエンジンを使用する準備が整います。

問題に戻って、私はPythonでこのWebサービスにかなり慣れていないので、これを達成する方法についての指針をいただければ幸いです.また、Webを使用せずにJavaからNLTKベースのPythonスクリプトを呼び出すという目標を達成するための指針サービス アプローチであり、実稼働サーバーに展開して優れたパフォーマンスを実現できることも、有用で評価できるものです。前もって感謝します。ちなみに、私は現在、Python 2.6、JDK 1.6 がインストールされた Linux マシンですべてのコードを実行しています。

4

2 に答える 2

0

NLTK ベースのシステムは、要求ごとの応答が遅くなる傾向がありますが、十分な RAM があれば良好なスループットを達成できます。

于 2012-11-15T14:21:13.933 に答える
0

1 つの方法は XML-RPC サーバーを構築することですが、サーバーが停止するのを防ぐために、接続ごとに新しいプロセスをフォークしたい場合があります。これについての詳細なチュートリアルを書きました: https://speakerdeck.com/timclicks/case-studies-of-python-in-parallel?slide=68

于 2012-11-15T10:05:07.623 に答える