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.parserParser类表示用于保存解析成分的数据结构。您可以使用 ParserFactory 类的静态 create() 方法创建此类的对象。

通过传递上一步中创建的模型对象来调用 ParserFactorycreate() 方法,如下所示 −

//创建解析器
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.)))))