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

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

其中S是句子,NP是名词短语,VP是动词短语。等效地,可以将上面的树记为带括号的字符串,如下所示:S(NP(The sky) VP(is blue.))
我正在尝试使用OpenNLP从句子中获取带括号的字符串,但我无法使示例代码正常工作。

特别是,我遵循the last part of this tutorial,并且我的代码陷入初始化ParserModel的困境。

我已经从here下载了适当的二进制文件,并将opennlp-tools-1.5.3.jar(包括以下所有对象的类)添加为库,添加到了IntelliJ项目中。另外,我将en-parser-chunking.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的第一天,但​​我什至无法使这个简单的示例生效。

最佳答案

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.) ) )
     */
}

试试这个

关于java - 使用OpenNLP获取句子的分析树。陷入困境。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20765738/

10-15 13:29