当前位置: 首页 > 知识库问答 >
问题:

无法转换opennlp解析的结果

夹谷信鸿
2023-03-14

我正在使用opennlp的Parse模型来解析一行输入,我的代码:

public void parse(String input){
InputStream modelIn = null;
try {
    modelIn = new FileInputStream("en-parser-chunking.bin");
  ParserModel model = new ParserModel(modelIn);
    opennlp.tools.parser.Parser parser = ParserFactory.create(model);
    opennlp.tools.parser.Parse topParses[] = ParserTool.parseLine(input, parser, 1);
for (opennlp.tools.parser.Parse p : topParses){
            p.show();

                         }
}catch (IOException e) {
  e.printStackTrace();
}finally {
  if (modelIn != null) {
    try {
      modelIn.close();
    }
    catch (IOException e) {
    }
  }
}
    }

如果我的输入是,这是一条测试线p.toString显示(TOP(S(NP(DT-this))(VP(VBZ-is)(NP(DT-a)(NN-test)(NN-line k k),但p.toString显示这是一条测试线

我怎样才能让它和p.show一样?

共有2个答案

傅志诚
2023-03-14

正如格雷格所说,这个问题的解决方案失败了。它失败是因为这行内容不正确:

StringBuilder sb = new StringBuilder(input.length() * 4);

在OpenNLP工具包中,Parse类中的show()方法不能使用StringBuilder类型:

如果StringBuilder类型更改为StringBuffer类型,则发布的解决方案将起作用:

StringBuffer sb = new StringBuffer(input.length() * 4);

见:https://opennlp.apache.org/docs/1.9.0/apidocs/opennlp-tools/opennlp/tools/parser/Parse.html#show-爪哇。lang.StringBuffer-

show(StringBuffer sb)用该解析的字符串表示形式追加指定的字符串缓冲区。

毋承基
2023-03-14

您必须使用重载的show,它会在内部更新传入的StringBuffer引用

public void parse(String input){
InputStream modelIn = null;
try {
    modelIn = new FileInputStream("en-parser-chunking.bin");
  ParserModel model = new ParserModel(modelIn);
    opennlp.tools.parser.Parser parser = ParserFactory.create(model);
    opennlp.tools.parser.Parse topParses[] = ParserTool.parseLine(input, parser, 1);
    for (opennlp.tools.parser.Parse p : topParses){

      StringBuilder sb = new StringBuilder(input.length() * 4);
      p.show(sb);
      //sb now contains all the tags
      System.out.println(sb);

    }
}catch (IOException e) {
  e.printStackTrace();
}finally {
  if (modelIn != null) {
    try {
      modelIn.close();
    }
    catch (IOException e) {
    }
  }
}
} 
 类似资料:
  • 有关于OpenNLP中解析器标记含义的文档吗?我知道POS标记类型遵循树库约定,但不幸的是,我没有找到任何关于解析器标记的信息,例如“SBAR”等。 这个留档是存在于某个地方还是我必须自己弄清楚?

  • 我有一个NLP任务,我需要确保多个句子的一个段落至少包含一个结构良好的问题,我正在使用OpenNLP生成段落中的解析树。我的问题是: 1-有没有一种方法可以为一个结构合理的问题获取可能的解析树列表。 2.如何比较两个解析树 谢谢

  • 我在文件中添加了一个翻译,因此现在我有2个文件,一个是希伯来文文件,一个是英文文件(原始文件)。在我这样做之后,突然在文件中,每次代码中出现时,它都以红色显示,并表示 我尝试了其他帖子中的所有答案,但没有任何帮助: 我尝试清理分级并同步它。 没有xml错误 添加后,错误消失,但现在对所有xml文件名显示相同的错误(例如,为红色,并显示此错误。 我尝试重新启动Android Studio 我尝试添加

  • 问题内容: 我正在使用eclipse java ee执行Java编程。 我的其中一个功能中包含以下代码行: 我收到以下错误: 类型不匹配:无法从int转换为Long 我不太明白为什么当我在变量中添加数字时会出现此错误。 该问题如何解决?为什么首先发生? 问题答案: 对象之间没有转换,因此您需要从中进行转换。加a 使整数成为(): 但是,从进行了转换,因此可以使用: 因此,您也可以这样编写: 从一个