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/