【问题标题】:Swapping in Berkley parser in Stanford corenlp在斯坦福 corenlp 的 Berkley 解析器中交换
【发布时间】:2015-01-31 08:31:42
【问题描述】:

我在实验中使用了 stanford nlp 堆栈,它运行良好,直到 stanford PCFG 解析器开始对某些句子表现出奇怪的行为。我发现 http://tomato.banatao.berkeley.edu:8080/parser/parser.html 伯克利解析器为我的数据集中的句子提供了正确的解析树。我如何通过 bekley 解析器交换 stanford pos tagger 并继续使用 stanford 依赖解析器。我发现这里@9​​87654322@ 可以做到,但不知道怎么做。

提前致谢


我为此使用了以下配置:

props.put("parse.type","charniak"); props.put("parse.executable","src/main/resources/berkeley.bat"); props.put("parse.model",""); /*文件:berkeley.bat*/ @ECHO 关闭 java -jar C:\Users\Arindam\Downloads\berkeleymy.jar -gr C:/Users/Arindam/Downloads/eng_sm6.gr -inputFile %4 -maxLength 399 -sentence_likelihood -kbest 2

【问题讨论】:

  • 您能否更具体一点:您想要拥有的确切管道是什么?您当前想要修改的 CoreNLP 中的注释器列表是什么?
  • 我想在我的管道中使用 pos,lemmatization,ner,parse,dcoref。

标签: nlp stanford-nlp


【解决方案1】:

要做到这一点,困难但干净的方法是构建您自己的注释器,该注释器挂钩到伯克利解析器的编程 API。您基本上想模仿ParserAnnotator 的行为,将对斯坦福ParserQuery 实现的引用替换为对Berkeley Parser + 进行必要转换的代码的引用。

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


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


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

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

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

【讨论】:

  • 我正在浏览代码并想出了上面提到的解决方案。它现在可以工作,但不确定它是否是黑客攻击。
  • 哈,这有点骇人听闻——这显然不是 CharniakParser 的用途——但它工作得很好!
  • 嗨,乔恩,你能给我更多关于第一种方法的信息吗?谢谢。
  • 好的,添加了一些信息。祝你好运!
  • @CSSStudent - 你最终实现了“干净”的集成方式吗?有什么经验(或代码)分享吗? @JonGauthier - 情绪(和其他)注释器是否仍然可以使用伯克利解析器而不是斯坦福解析器('CoreNlp')?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
相关资源
最近更新 更多