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

使用OpenNLP获取句子的解析树。陷入示例。

施晗昱
2023-03-14

OpenNLP是一个关于自然语言处理的Apache项目。NLP程序的目的之一是解析一个句子,给出其语法结构的树。例如,句子“天空是蓝色的”可能被解析为

      S
     / \
   NP   VP
  / \    | \
The sky is blue.

其中S是句子,NP是名词短语,VP是动词短语。等效地,上面的树可以写成一个带括号的字符串,如下所示:S(NP(The sky)VP(是蓝色的。))

我试图使用OpenNLP从句子中获取带括号的字符串,但我无法让示例代码正常工作。

特别是,我正在遵循本教程的最后一部分,我的代码在初始化ParserModel时卡住了。

我已经从这里下载了相应的二进制文件,并添加了opennlp-tools-1.5.3。jar(包括以下所有对象的类)作为IntelliJ项目的库。此外,我移动了en解析器分块。bin到我的“user.dir”

下面的代码应该给我一个解析树,但它在创建ParserModel对象时无限期运行。

    InputStream is = new FileInputStream("en-parser-chunking.bin");
    ParserModel model = new ParserModel(is);
    Parser parser = ParserFactory.create(model);
    String sentence = "The sky is blue.";
    Parse topParses[] = ParserTool.parseLine(sentence, parser, 1);
    for (Parse p : topParses)
        p.show();
    is.close();

这是我使用OpenNLP的第一天,但我甚至不能让这个简单的例子工作。

共有2个答案

林玮
2023-03-14

您的模型可能已损坏。请重新下载并使用该模型。如果没有帮助,请调用kill-QUIT

东方俊杰
2023-03-14
public static void Parse() throws InvalidFormatException, IOException {
    // http://sourceforge.net/apps/mediawiki/opennlp/index.php?title=Parser#Training_Tool
    InputStream is = new FileInputStream("en-parser-chunking.bin");

    ParserModel model = new ParserModel(is);

    Parser parser = ParserFactory.create(model);

    String sentence = "Programcreek is a very huge and useful website.";
    Parse topParses[] = ParserTool.parseLine(sentence, parser, 1);

    for (Parse p : topParses)
        p.show();

    is.close();

    /*
     * (TOP (S (NP (NN Programcreek) ) (VP (VBZ is) (NP (DT a) (ADJP (RB
     * very) (JJ huge) (CC and) (JJ useful) ) ) ) (. website.) ) )
     */
}

试试这个

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

  • 我试图使用官方OpenNLP网站手册示例来训练一个新模型,以下是示例: 问题出在2º线上, 帮我说:不赞成。改用PlainTextByLineStream(InputStreamFactory,Charset)。但是我不知道如何使用这个构造函数。我想举一个例子,使用同一个语料库文件使用这个未弃用的构造函数。 我已经编写了下一段代码,使用opennlp帮助和两种使用train方法的方法,不推荐的和建

  • 我正在试用OpenNLP句子检测工具。文本在一个文件-para3中。txt。内容: 我使用以下命令运行此命令: 我得到如下输出: 理想情况下,我会看到三句话作为输出: 现在,如果我尝试其他句子,其中“句号”或“句号”出现,句子检测就会发生。一个人可能会猜到文本中有3个句子,但是如何通过OpenNLP完成呢?NLP的哪些工具可以在这里提供帮助???句子检测的下一个层次是什么?

  • 假设解析树中存在连接两个名词的动词,那么找出它的好策略是什么?例如,在这个句子中: 这名男子在回家前给妻子打了电话。 考虑到“男人”和“妻子”的输入,我想得到动词“called”。OpenNLP给了我一个解析树: (前)(前)(后)(后)(前)(后)(后)(后)(后)(后)(前)(前)(后)(后)(后)(前)(后)(后)(后)(后)(后)(前)(后)(后)(前)(后)(后)(后)(前)(后)(后)

  • 问题内容: 我想拥有一个句子的K个最佳解析,我认为这可以通过ExhaustivePCFGParser类来完成,问题是我不知道如何使用该类,更确切地说,我可以实例化该类吗?(构造函数是:ExhaustivePCFGParser(BinaryGrammar bg,UnaryGrammar ug,Lexicon lex,Options op,Index stateIndex,Index wordInde

  • 我正在寻找优化斯坦福大学CoreNLP情绪管道性能的方法。因此,a希望获得句子的情感,但只希望获得那些包含特定关键字作为输入的句子。 我尝试了两种方法: 方法1:StanfordCoreNLP管道用情感注释整个文本 我定义了一个注释器管道:标记化、ssplit、解析和情感。我在整篇文章中运行了它,然后在每个句子中查找关键字,如果它们存在,运行一个返回关键字值的方法。虽然处理过程需要几秒钟,但我并不