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合作的第一天,但我甚至无法让这个简单的例子起作用。
答案 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下)获取堆栈跟踪,或者使用调试器。