使用OpenNLP获取句子的解析树。卡住了榜样。

时间:2013-12-24 19:10:45

标签: java parsing intellij-idea nlp opennlp

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合作的第一天,但​​我甚至无法让这个简单的例子起作用。

2 个答案:

答案 0 :(得分:2)

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

试试这个

答案 1 :(得分:1)

您的型号可能已损坏。尝试再次下载并使用那个。如果这没有用,请在进程挂起时调用kill -QUIT <pid>(在Linux下)获取堆栈跟踪,或者使用调试器。