在 Stanford corenlp 中交换 Berkley 解析器

Swapping in Berkley parser in Stanford corenlp

我在实验中使用了 stanford nlp stack,在 stanford PCFG 解析器开始对某些句子表现奇怪之前,它一直运行良好。我发现 http://tomato.banatao.berkeley.edu:8080/parser/parser.html the berkley parser giving correct parse tree for the sentences in my dataset. How could i swap in stanford pos tagger by bekley parser and continue using stanford dependency parser. I found here http://brenocon.com/blog/2011/09/end-to-end-nlp-packages/ 可以做到,但不确定如何做到。

提前致谢


我为此使用了以下配置:


    props.put("parse.type","charniak");
    props.put("parse.executable","src/main/resources/berkeley.bat");
    props.put("parse.model","");

    /*文件:berkeley.bat*/

    @回声关闭
    java -jar C:\Users\Arindam\Downloads\berkeleymy.jar -gr C:/Users/Arindam/Downloads/eng_sm6.gr -inputFile %4 -maxLength 399 -sentence_likelihood -kbest 2

实现此目的的困难但简洁的方法是构建您自己的注释器,该注释器连接到 Berkeley 解析器的编程 API。您基本上想要模仿 ParserAnnotator 的行为,将对 Stanford ParserQuery 实现的引用替换为对 Berkeley Parser + 进行必要转换的代码的引用。

然后利用Berkeley Parser返回的结果(转化为Stanford框架),可以使用EnglishGrammaticalStructure将Berkeley constituency parse转换为dependency trees


不太干净但可能更简单的方法是让 Berkeley 解析器输出 PTB 格式的解析,并使用 the main method of EnglishGrammaticalStructure 从此 CoNLL 格式的依赖项解析生成。


根据要求提供有关第一个选项的更多信息:

你应该制作自己的注释器,它由 / 子类组成 ParserAnnotator。要覆盖的关键方法是ParserAnnotator#doOneSentence。在这里,您可以调用 Berkeley 解析器 API,解析其结果,然后使用正确转换的树调用 ParserAnnotator#finishSentencefinishSentence 应该负责为您放置正确的注释。

您可以使用特殊的 属性 轻松地挂钩主管道上的自定义注释器。请参阅 this SO answer 示例代码(我指的是 customAnnotatorClass 属性)。