OpenNLP - การแยกวิเคราะห์ประโยค

เมื่อใช้ OpenNLP API คุณสามารถแยกวิเคราะห์ประโยคที่กำหนดได้ ในบทนี้เราจะพูดถึงวิธีการแยกวิเคราะห์ข้อความดิบโดยใช้ OpenNLP API

การแยกวิเคราะห์ข้อความดิบโดยใช้ OpenNLP Library

ในการตรวจจับประโยค OpenNLP ใช้โมเดลที่กำหนดไว้ล่วงหน้าไฟล์ชื่อ en-parserchunking.bin. นี่คือโมเดลที่กำหนดไว้ล่วงหน้าซึ่งได้รับการฝึกฝนให้แยกวิเคราะห์ข้อความดิบที่กำหนด

Parser คลาสของ opennlp.tools.Parser แพ็กเกจใช้เพื่อเก็บองค์ประกอบการแยกวิเคราะห์และไฟล์ ParserTool คลาสของ opennlp.tools.cmdline.parser แพ็กเกจใช้เพื่อแยกวิเคราะห์เนื้อหา

ต่อไปนี้เป็นขั้นตอนที่ต้องปฏิบัติตามเพื่อเขียนโปรแกรมซึ่งแยกวิเคราะห์ข้อความดิบที่กำหนดโดยใช้ไฟล์ ParserTool ชั้นเรียน

ขั้นตอนที่ 1: กำลังโหลดโมเดล

โมเดลสำหรับการแยกวิเคราะห์ข้อความแสดงโดยคลาสที่มีชื่อว่า ParserModelซึ่งเป็นของแพ็คเกจ opennlp.tools.parser.

ในการโหลดโมเดลโทเค็นไนเซอร์ -

  • สร้างไฟล์ InputStream อ็อบเจ็กต์ของโมเดล (สร้างอินสแตนซ์ FileInputStream และส่งเส้นทางของโมเดลในรูปแบบ String ไปยังตัวสร้าง)

  • เริ่มต้นไฟล์ ParserModel ชั้นเรียนและผ่าน InputStream (วัตถุ) ของโมเดลเป็นพารามิเตอร์ของตัวสร้างดังที่แสดงในบล็อกโค้ดต่อไปนี้

//Loading parser model 
InputStream inputStream = new FileInputStream(".../en-parserchunking.bin"); 
ParserModel model = new ParserModel(inputStream);

ขั้นตอนที่ 2: สร้างออบเจ็กต์ของคลาส Parser

Parser คลาสของแพ็คเกจ opennlp.tools.parserแสดงถึงโครงสร้างข้อมูลสำหรับการเก็บองค์ประกอบการแยกวิเคราะห์ คุณสามารถสร้างออบเจ็กต์ของคลาสนี้โดยใช้สแตติกcreate() วิธีการของ ParserFactory ชั้นเรียน

เรียกใช้ไฟล์ create() วิธีการของ ParserFactory โดยส่งผ่านโมเดลวัตถุที่สร้างขึ้นในขั้นตอนก่อนหน้าดังที่แสดงด้านล่าง -

//Creating a parser Parser parser = ParserFactory.create(model);

ขั้นตอนที่ 3: แยกวิเคราะห์ประโยค

parseLine() วิธีการของ ParserToolคลาสใช้เพื่อแยกวิเคราะห์ข้อความดิบใน OpenNLP วิธีนี้ยอมรับ -

  • ตัวแปร String ที่แสดงถึงข้อความที่จะแยกวิเคราะห์

  • วัตถุแยกวิเคราะห์

  • จำนวนเต็มแทนจำนวนการแยกวิเคราะห์ที่จะดำเนินการ

เรียกใช้เมธอดนี้โดยส่งผ่านประโยคไปยังพารามิเตอร์ต่อไปนี้: ออบเจ็กต์แยกวิเคราะห์ที่สร้างขึ้นในขั้นตอนก่อนหน้านี้และจำนวนเต็มแทนจำนวนที่ต้องการของการแยกวิเคราะห์

//Parsing the sentence 
String sentence = "Tutorialspoint is the largest tutorial library.";       
Parse topParses[] = ParserTool.parseLine(sentence, parser, 1);

Example

ต่อไปนี้เป็นโปรแกรมที่แยกวิเคราะห์ข้อความดิบที่กำหนด บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อ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{  
      //Loading parser model 
      InputStream inputStream = new FileInputStream(".../en-parserchunking.bin"); 
      ParserModel model = new ParserModel(inputStream); 
       
      //Creating a parser 
      Parser parser = ParserFactory.create(model); 
      
      //Parsing the sentence 
      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.)))))