我正在使用Stanford CoreNLP管道,并从TreeAnnotation
获得BasicDependenciesAnnotation
和SentencesAnnotation
。
我正在寻找一种方法来说明关于POS标签和依赖结构的解析器是多么确定。
我记得早些时候,当我在修补斯坦福NLP图书馆的时候,我看到了同一句话返回了多个不同排名的多棵树。 我找不到任何有关如何从解析器或管道获取此信息的信息。
DependencyScoring
类似乎在TypedDependency
上运行,而不是管道产生的东西作为注释过程的一部分,据我所知。
编辑:代码明细:
Annotation document = new Annotation("This is my sentence");
pipeline.annotate(document);
List<CoreMap> sentences = document.get(SentencesAnnotation.class);
...
Tree tree = sentence1.get(TreeAnnotation.class);
SemanticGraph dependencies = sentence1.get(CollapsedCCProcessedDependenciesAnnotation.class);
答案 0 :(得分:0)
如果您正在使用默认的CoreNLP管道(即使用parse
注释器而不是depparse
),那么您所看到的依赖关系解析来自选区解析的确定性转换这句话。最好的&#34;得分&#34;你可以到这里来查看候选人选区解析,最终会产生依赖性解析(转换后)。
但是,您需要打破CoreNLP管道来完成这项特定工作。如果您有LexicalizedParser
个实例,则可以获得 k 最佳解析(附带分数),如下所示:
List<CoreLabel> mySentence = ...
LexicalizedParser parser = LexicalizedParser.loadModel("edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz");
ParserQuery pq = parser.parserQuery();
if (pq.parse(mySentence)) {
// Get best parse and associated score
Tree parse = pq.getBestPCFGParse();
double score = pq.getPCFGScore();
// Print parse
parse.pennPrint();
// ----
// Get collection of best parses
List<ScoredObject<Tree>> bestParses = pq.getBestPCFGParses();
// ----
// Convert a constituency parse to dependency representation
GrammaticalStructure gs = parser.treebankLanguagePack()
.grammaticalStructureFactory().newGrammaticalStructure(parse);
List<TypedDependency> dependencies = gs.typedDependenciesCCprocessed();
System.out.println(dependencies);
}
相关Javadoc:
(注意:未经测试的代码,但这应该有效..)