2016-10-22 9 views
1

正しく使用する方法スタンフォードNLPパイプライン 2フェーズ注釈用?スタンフォードNLPパイプライン逐次処理(Java)

Iはを分割のみ トークン化文が必要なので、私はこのコードを使用第一相

private Annotation annotatedDocument = null; 
private StanfordCoreNLP pipeline = null; 

... 

public void firstPhase() { 
     Properties props = new Properties(); 
     props.setProperty("annotators", "tokenize, ssplit"); 

     pipeline = new StanfordCoreNLP(props); 
     annotatedDocument = new Annotation(textDocument); 
} 

第二相は任意であるので、私はドン」最初の段階ですべての注釈を使用する。第2の位相コード:

public void secondPhase() { 
    POSTaggerAnnotator posTaggerAnot = new POSTaggerAnnotator(); 
    posAnot.annotate(annotatedDocument); 

    // Lemmatization 
    MorphaAnnotator morphaAnot = new MorphaAnnotator(); 
    morphaAnot.annotate(annotatedDocument); 
} 

最初の質問:このアプローチは正しい第二段階では、「スタンドアローン」アノテーターを使用していますか?または既存のパイプラインを使用する方法はありますか?

第2の質問:Correference注釈者に問題があります。私は次のように第二段階でそれを使いたい:

CorefAnnotator coref = new CorefAnnotator(new Properties()); 

しかし、このコンストラクタは決して終わらないようです。プロパティのないコンストラクタは存在しません。それはいくつかのプロパティ設定が必要ですか?

答えて

1

あなたがこれを行うことができます[少なくとも] 3通りの方法があります。あなたが説明

  1. 方法が。個々の注釈を呼び出すだけで完全に有効です。 corefアノテータは空のプロパティで動作するはずです。おそらくメモリが必要でしょうか?それは少しロードが遅く、モデルは小さくありません。

  2. パイプラインを引き続き使用する場合は、部分パイプラインを作成し、プロパティーenforceRequirements=falseを設定できます。これはアノテーションの連鎖を行いますが、要件が満たされる必要はありません。つまり、アノテーションが既にあることが分かっている場合は、アノノータを再実行する必要はありません。

  3. これは大きく変更されていますが、simple apiは実際にこの種の遅延評価を自動的に行います。だから、あなただけのDocumentオブジェクトを作成することができ、あなたはさまざまな注釈を要求したとき、それは怠惰でそれらを故障でしょう。そうだね

+0

を、** Coref注釈の問題は、** java.langです。 OutOfMemmoryError例外です。 – David

関連する問題