如何处理我从 syntaxnet 获得的树?(conll 格式)

How to process tree that i got from syntaxnet?(conll format)

我想我需要 edu.stanford.nlp 包中的 Semgrex。对于这个任务,我需要从 edu.stanford.nlp.trees.Tree 构造树并像

一样处理那棵树
import edu.stanford.nlp.semgraph.semgrex.SemgrexMatcher;
import edu.stanford.nlp.trees.Tree;
import edu.stanford.nlp.semgraph.SemanticGraphFactory;

public class SemgrexDemo  {
    public static void main(String[] args) {
        Tree someHowBuiltTree;//idnt know how to construct Tree from conll
        SemanticGraph graph = SemanticGraphFactory.generateUncollapsedDependencies(someHowBuiltTree);
        SemgrexPattern semgrex = SemgrexPattern.compile("{}=A <<nsubj {}=B");
        SemgrexMatcher matcher = semgrex.matcher(graph);
    }
}

实际上我需要一些关于如何从 conll 构造树的建议。

您想从您的 CoNLL 文件加载 SemanticGraph

import edu.stanford.nlp.trees.ud.ConLLUDocumentReader;
...

CoNLLUDocumentReader reader = new CoNLLUDocumentReader();
Iterator<SemanticGraph> it = reader.getIterator(IOUtils.readerFromString(conlluFile));

这将生成一个 Iterator,它将为您文件中的每个句子提供一个 SemanticGraph

从依存分析生成选区树是一个开放的研究问题,因此据我所知,目前 Stanford CoreNLP 无法做到这一点。