我在我的实验中使用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
答案 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#finishSentence
。 finishSentence
应该注意为您准备正确的注释。
您可以使用特殊属性轻松挂接主管道上的自定义注释器。有关示例代码,请参阅this SO answer(我指的是customAnnotatorClass
属性)。