gpt4 book ai didi

nlp - 如何获得与在线演示完全相同的依赖解析输出?

转载 作者:行者123 更新时间:2023-12-04 13:55:00 28 4
gpt4 key购买 nike

如何使用 stanford corenlp 以编程方式获得与在线演示中相同的依赖项解析?

我正在使用 corenlp 包来获取以下句子的依赖项解析。

当局说,德克萨斯州的第二名医护人员的埃博拉病毒检测呈阳性。

我尝试使用下面的代码以编程方式获取解析

            Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

String text = "Second healthcare worker in Texas tests positive for Ebola , authorities say ."; // Add your text here!
Annotation document = new Annotation(text);
pipeline.annotate(document);
String[] myStringArray = {"SentencesAnnotation"};
List<CoreMap> sentences = document.get(SentencesAnnotation.class);
for(CoreMap sentence: sentences) {
SemanticGraph dependencies = sentence.get(BasicDependenciesAnnotation.class);
IndexedWord root = dependencies.getFirstRoot();
System.out.printf("root(ROOT-0, %s-%d)%n", root.word(), root.index());
for (SemanticGraphEdge e : dependencies.edgeIterable()) {
System.out.printf ("%s(%s-%d, %s-%d)%n", e.getRelation().toString(), e.getGovernor().word(), e.getGovernor().index(), e.getDependent().word(), e.getDependent().index());
}
}

}

我使用 stanford corenlp 3.5.0 包得到以下输出。
root(ROOT-0, worker-3)
amod(worker-3, Second-1)
nn(worker-3, healthcare-2)
prep(worker-3, in-4)
amod(worker-3, positive-7)
dep(worker-3, say-12)
pobj(in-4, tests-6)
nn(tests-6, Texas-5)
prep(positive-7, for-8)
pobj(for-8, ebola-9)
nsubj(say-12, authorities-11)

但是在线演示给出了不同的答案,将 say 标记为词根,并且在解析中的单词之间具有其他关系,例如 ccomp。
amod(worker-3, Second-1)
nn(worker-3, healthcare-2)
nsubj(tests-6, worker-3)
prep(worker-3, in-4)
pobj(in-4, Texas-5)
ccomp(say-12, tests-6)
acomp(tests-6, positive-7)
prep(positive-7, for-8)
pobj(for-8, Ebola-9)
nsubj(say-12, authorities-11)
root(ROOT-0, say-12)

如何解决我的输出以与在线演示相匹配?

最佳答案

输出不同的原因是如果你使用 parser demo ,正在使用独立的解析器发行版,并且您的代码使用整个 CoreNLP 发行版。虽然它们都使用相同的解析器和相同的模型,但 CoreNLP 的默认配置在运行解析器之前运行词性 (POS) 标记器,并且解析器合并了 POS 信息,这在某些情况下可能会导致不同的结果。

为了获得相同的结果,您可以通过更改注释器列表来禁用 POS 标记器:

props.put("annotators", "tokenize, ssplit, parse, lemma, ner, dcoref");

但是请注意,lemma、ner 和 dcoref 注释器都需要 POS 标签,因此您必须更改注释器的顺序。

还有一个 CoreNLP demo它应该始终产生与您的代码相同的输出。

关于nlp - 如何获得与在线演示完全相同的依赖解析输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27865825/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com