2016-09-04 7 views
0

私はのテキストをすでにトークン化、文分割、およびPOSタグ付けしています。CoreNLP:posタグを提供

私はさらに注釈見出し語(lemma)、名前付きエンティティ(ner)、contituencyと依存関係の解析(parse)、およびcoreferences(dcoref)にCoreNLPを使用したいと思います。

コマンドラインオプションと、コマンドラインからこれを可能にするオプションファイル指定の組み合わせはありますか?その残っているすべてはであり、これはうまく機能

tokenize.whitespace = true 
ssplit.eolonly = true 

this questionによると、私はトークンを区切るように空白を表示するパーサを求めることができ、そして私の性質にこれを追加することによって、文章を区切りとして改行をファイル私がPOSタグを提供したいとCoreNLPに指定してください。

スタンドフォードパーサーを単独で使用する場合、既存のPOSタグを使用するにはseems to be possibleを使用しますが、その構文をCoreNLPの呼び出しにコピーすることは機能していないようです。たとえば、これは動作しません:

java -cp *:./* -Xmx2g edu.stanford.nlp.pipeline.StanfordCoreNLP -props my-properties-file -outputFormat xml -outputDirectory my-output-dir -sentences newline -tokenized -tagSeparator/-tokenizerFactory edu.stanford.nlp.process.WhitespaceTokenizer -tokenizerMethod newCoreLabelTokenizerFactory -file my-annotated-text.txt 

this questionは、プログラムの呼び出しをカバーしていますが、私はCoreNLPがより大きなシステムの一部としてコマンドラインを形成呼び出すので、私は本当にこれがでこれを達成することが可能であるかどうかを聞いていますのよコマンドラインオプション。

答えて

2

これはコマンドラインオプションでは考えられません。

カスタム注釈を作成してパイプラインに組み込むことができれば、そのルートに進むことができます。ここで

は、いくつかのサンプルコードです:

package edu.stanford.nlp.pipeline; 

import edu.stanford.nlp.util.logging.Redwood; 
import edu.stanford.nlp.ling.*; 
import edu.stanford.nlp.util.concurrent.MulticoreWrapper; 
import edu.stanford.nlp.util.concurrent.ThreadsafeProcessor; 

import java.util.*; 

public class ProvidedPOSTaggerAnnotator { 

    public String tagSeparator; 

    public ProvidedPOSTaggerAnnotator(String annotatorName, Properties props) { 
    tagSeparator = props.getProperty(annotatorName + ".tagSeparator", "_"); 
    } 

    public void annotate(Annotation annotation) { 

    for (CoreLabel token : annotation.get(CoreAnnotations.TokensAnnotation.class)) { 
     int tagSeparatorSplitLength = token.word().split(tagSeparator).length; 
     String posTag = token.word().split(tagSeparator)[tagSeparatorSplitLength-1]; 
     String[] wordParts = Arrays.copyOfRange(token.word().split(tagSeparator), 0, tagSeparatorSplitLength-1); 
     String tokenString = String.join(tagSeparator, wordParts); 
     // set the word with the POS tag removed 
     token.set(CoreAnnotations.TextAnnotation.class, tokenString); 
     // set the POS 
     token.set(CoreAnnotations.PartOfSpeechAnnotation.class, posTag); 
    } 
    } 
} 

あなたのトークンが「_」で区切られたPOSトークンを提供する場合これは動作するはずです。 forcedpos.tagSeparatorプロパティで変更できます。

あなたは、プロパティファイルにcustomAnnotator.forcedpos = edu.stanford.nlp.pipeline.ProvidedPOSTaggerAnnotator

を設定CLASSPATHに上記のクラスが含まれ、その後、「後のアノテーターのリストに「forcedpos」が含まれる場合tokenize "を使用すると、独自のposタグを渡すことができます。

これをもう少しクリーンアップして、実際には将来のリリースでそれを人に含めることができます!

私は実際にこのコードを試してみる時間がありませんでした。試してみるとエラーが出てきたら教えてください!

関連する問題