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.)))))