OpenNLP - 解析句子
使用 OpenNLP API,您可以解析给定的句子。在本章中,我们将讨论如何使用 OpenNLP API 解析原始文本。
使用 OpenNLP 库解析原始文本
为了检测句子,OpenNLP 使用预定义模型,即名为 en-parserchunking.bin 的文件。这是一个预定义的模型,经过训练可以解析给定的原始文本。
opennlp.tools.Parser 包中的 Parser 类用于保存解析成分,opennlp.tools.cmdline.parser 包中的 ParserTool 类用于解析内容。
下面是编写使用 ParserTool 类解析给定原始文本的程序的步骤。
步骤 1:加载模型
解析文本的模型由名为 ParserModel 的类表示,该类属于 opennlp.tools.parser 包。
要加载 tokenizer 模型 −
创建一个模型的InputStream对象(实例化FileInputStream并将模型的路径以String格式传递给其构造函数)。
实例化ParserModel类,并将模型的InputStream(对象)作为参数传递给其构造函数,如下面的代码块所示。
//加载解析器模型 InputStream inputStream = new FileInputStream(".../en-parserchunking.bin"); ParserModel model = new ParserModel(inputStream);
步骤2:创建Parser类的对象
包opennlp.tools.parser的Parser类表示用于保存解析成分的数据结构。您可以使用 ParserFactory 类的静态 create() 方法创建此类的对象。
通过传递上一步中创建的模型对象来调用 ParserFactory 的 create() 方法,如下所示 −
//创建解析器 Parser parser = ParserFactory.create(model);
步骤 3:解析句子
ParserTool 类的 parseLine() 方法用于解析 OpenNLP 中的原始文本。此方法接受 −
表示要解析的文本的字符串变量。
解析器对象。
表示要执行的解析次数的整数。
通过向句子传递以下参数来调用此方法:在前面的步骤中创建的解析对象,以及表示需要执行的解析次数的整数。
//解析句子 String sentence = "Tutorialspoint is the largest tutorial library."; Parse topParses[] = ParserTool.parseLine(sentence, parser, 1);
示例
以下是解析给定原始文本的程序。将此程序保存在名为 ParserExample.java 的文件中。
import java.io.FileInputStream; import java.io.InputStream; import opennlp.tools.cmdline.parser.ParserTool; import opennlp.tools.parser.Parse; import opennlp.tools.parser.Parser; import opennlp.tools.parser.ParserFactory; import opennlp.tools.parser.ParserModel; public class ParserExample { public static void main(String args[]) throws Exception{ //加载解析器模型 InputStream inputStream = new FileInputStream(".../en-parserchunking.bin"); ParserModel model = new ParserModel(inputStream); //创建解析器 Parser parser = ParserFactory.create(model); //解析句子 String sentence = "Tutorialspoint is the largest tutorial library."; Parse topParses[] = ParserTool.parseLine(sentence, parser, 1); for (Parse p : topParses) p.show(); } }
使用以下命令从命令提示符编译并执行已保存的 Java 文件 −
javac ParserExample.java java ParserExample
执行时,上述程序读取给定的原始文本,对其进行解析,并显示以下输出 −
(TOP (S (NP (NN Tutorialspoint)) (VP (VBZ is) (NP (DT the) (JJS largest) (NN tutorial) (NN library.)))))