1

私は他の多くのライブラリの中でStanfordCoreNLPライブラリを使用するアプリケーションを書いています。アプリケーションはURLを取得し、そこからテキストを抽出してから、CoreNLPを使用してテキストを処理します。問題は、CoreNLPライブラリがテキストに注釈を付ける前にモデルをメモリにロードするのに長い時間がかかることです。初期化手順を1回だけ実行するための最良の方法を探しています。次にアプリを使用したいときに、URLを入力しても、モデルが再度読み込まれることはありません。

4

2 に答える 2

1

おそらく、アプリケーションをコンテナ内で実行する必要があります-サーブレットコンテナまたはApache TomcatのようなWebコンテナですか?アプリケーションを単純なWARとしてパッケージ化すると、コンテナはすべてのJavaクラスを一度初期化し、単一のURLのNLP処理をトリガーするサーブレットを公開すると仮定すると、結果として生じるすべてのNLP処理呼び出しの初期化時間を節約できます。

編集:

サーブレットを使用する必要はありません。または、次のいずれかを実行できます。

  1. いくつかの構成ソース(DBまたはファイル)からURLを読み取るループをWARで実行し、URLごとにNLPと解析を実行します(後で分析するために結果を保存しますか?)
  2. より高度なソリューションには、Quartzと組み合わせた既存のJavaプログラムを含めることができます。このプログラムは、X秒/分/時間ごとに1つのNLP +パーサーを実行します。さらに高度なバージョンでは、SpringBatchでQuartzを使用ます

幸運を!

于 2012-04-24T20:57:51.403 に答える
0

彼らのページStanfordCoreNLPの例を見ると、テキストに注釈を付けるために以下が使用されています。

Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
String text = ... // Add your text here!
Annotation document = new Annotation(text);
pipeline.annotate(document);

したがって、アプリの初期化時にオブジェクトを作成してダミーテキストを解析できます。アプリの読み込み時に必要なモジュールを読み込むことが目的であるため、操作の結果は無視してください。その後、「パイプライン」オブジェクトを保持し、必要に応じて追加の注釈操作のためにそれを参照できます。

于 2012-04-24T21:08:56.343 に答える