1

Windowsで NLP プロジェクトを行っていますが、コマンド プロンプトからスタンフォード CoreNLP を実行するたびに、指定された入力テキスト ファイルの XML 出力を生成するのに約 14 ~ 15 秒かかるという問題があります。この問題は、ライブラリのロードにかなりの時間がかかるためだと思います。今回の問題は私のプロジェクトにとって大きな問題であるため、誰かが問題の内容と、この問題を解決するにはどうすればよいかを説明してもらえますか?

4

3 に答える 3

9

スタンフォード CoreNLP は、さまざまなコンポーネントのパラメーターの大きなモデル ファイルを使用します。はい、読み込みに時間がかかります。あなたがしたいことは、プログラムを 1 回だけ起動してから、たくさんのテキストをフィードすることです。

それを行う方法は、何をしているかによって異なります。

  • -filelist をコマンドライン バージョンに渡して、多数のファイルを一度に処理できます。
  • 1 つの StanfordCoreNLP オブジェクトを実行したままにして、ファイルを送信し、API を使用して出力を取得できます。
  • 必要な NLP 処理によっては、使用していないモデルを読み込まないようにすることで、起動を大幅に高速化できる場合もあります。「アノテーター」プロパティを参照してください。

2016 年の更新:これに関する詳細情報は、ドキュメント ページのメモリと時間の使用についてに記載されています。

于 2012-06-27T05:43:42.403 に答える
5

クリストファーは正しいです、ここに解決策の1つがあります:

import java.util.Properties;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;

public class SentimentAnalyzer {
    private StanfordCoreNLP pipeline;

    public void initializeCoreNLP() { 
        Properties props = new Properties();
        props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, sentiment");
        pipeline = new StanfordCoreNLP(props);
    }

    public T getSentiment(String text) {
        ...
        Annotation annotation= new Annotation(text);
        pipeline.annotate(annotation);
        ...
        return ...
    }

    public static void main(String[] argv) {
        SentimentAnalyzer sentimentAnalyzer = new SentimentAnalyzer();
        sentimentAnalyzer.initializeCoreNLP(); // run this only once
        T t = sentimentAnalyzer.getSentiment("put text here..."); // run this multiple times
    }
}
于 2014-06-01T19:17:11.053 に答える