2

私は Stanford CoreNLP (01.2016 バージョン) を使用しており、依存関係の句読点を維持したいと考えています。コマンドラインから実行するときにそれを行う方法をいくつか見つけましたが、依存関係を抽出する Java コードに関しては何も見つかりませんでした。

これが私の現在のコードです。動作しますが、句読点は含まれていません:

Annotation document = new Annotation(text);

        Properties props = new Properties();

        props.setProperty("annotators", "tokenize, ssplit, pos, lemma, parse");

        props.setProperty("ssplit.newlineIsSentenceBreak", "always");

        props.setProperty("ssplit.eolonly", "true");

        props.setProperty("pos.model", modelPath1);

        props.put("parse.model", modelPath );

        StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

        pipeline.annotate(document);

        LexicalizedParser lp = LexicalizedParser.loadModel(modelPath + lexparserNameEn,

                "-maxLength", "200", "-retainTmpSubcategories");

        TreebankLanguagePack tlp = new PennTreebankLanguagePack();

        GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory();

        List<CoreMap> sentences = document.get(SentencesAnnotation.class);

        for (CoreMap sentence : sentences) {

            List<CoreLabel> words = sentence.get(CoreAnnotations.TokensAnnotation.class);               

            Tree parse = lp.apply(words);

            GrammaticalStructure gs = gsf.newGrammaticalStructure(parse);
            Collection<TypedDependency> td = gs.typedDependencies();

            parsedText += td.toString() + "\n";

基本、型付き、折りたたみなど、あらゆる種類の依存関係が問題ありません。句読点を含めたいだけです。

前もって感謝します、

4

1 に答える 1

2

ここでは、CoreNLP を介してパーサーを実行し、次に を呼び出して再度実行しているため、かなりの余分な作業を行っていますlp.apply(words)

句読点を含む依存関係ツリー/グラフを取得する最も簡単な方法は、parse.keepPunct次のように CoreNLP オプションを使用することです。

Annotation document = new Annotation(text);
Properties props = new Properties();
props.setProperty("annotators", "tokenize, ssplit, pos, lemma, parse");
props.setProperty("ssplit.newlineIsSentenceBreak", "always");
props.setProperty("ssplit.eolonly", "true");
props.setProperty("pos.model", modelPath1);
props.setProperty("parse.model", modelPath);
props.setProperty("parse.keepPunct", "true");

StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

pipeline.annotate(document);

for (CoreMap sentence : sentences) {
   //Pick whichever representation you want
   SemanticGraph basicDeps = sentence.get(SemanticGraphCoreAnnotations.BasicDependenciesAnnotation.class);
   SemanticGraph collapsed = sentence.get(SemanticGraphCoreAnnotations.CollapsedDependenciesAnnotation.class);
   SemanticGraph ccProcessed = sentence.get(SemanticGraphCoreAnnotations.CollapsedCCProcessedDependenciesAnnotation.class);
}

センテンス アノテーション オブジェクトは、依存関係ツリー/グラフを として格納しますSemanticGraphTypedDependencyオブジェクトのリストが必要な場合は、 メソッドを使用しtypedDependencies()ます。例えば、

List<TypedDependency> dependencies = basicDeps.typedDependencies();
于 2016-05-11T00:50:58.833 に答える