交换在斯坦福corenlp的Berkley解析器

时间:2015-01-31 08:31:43

标签: nlp stanford-nlp

我在我的实验中使用stanford nlp堆栈,直到stanford PCFG解析器开始对某些句子表现得很奇怪,它才能正常工作。我找到了http://tomato.banatao.berkeley.edu:8080/parser/parser.html berkley解析器为我的数据集中的句子提供了正确的解析树。我怎么能通过bekley解析器交换stanford pos tagger并继续使用stanford依赖解析器。我在这里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","");

    /*File: berkeley.bat*/

    @ECHO OFF
    java -jar C:\Users\Arindam\Downloads\berkeleymy.jar -gr C:/Users/Arindam/Downloads/eng_sm6.gr  -inputFile %4  -maxLength 399 -sentence_likelihood -kbest 2

1 个答案:

答案 0 :(得分:2)

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

然后使用Berkeley Parser返回的结果(转换为Stanford框架),您可以使用EnglishGrammaticalStructure将Berkeley选区解析转换为依赖树。


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


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

您应该创建自己的注释器,其中包含/ subslasses ParserAnnotator。覆盖的关键方法是ParserAnnotator#doOneSentence。在这里,您可以调用Berkeley Parser API,解析其结果,并使用正确转换的树调用ParserAnnotator#finishSentencefinishSentence应该注意为您准备正确的注释。

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