OpenNLP - ประโยคแบ่งส่วน
การแบ่งประโยคหมายถึงการแบ่ง / แบ่งประโยคออกเป็นส่วน ๆ ของคำเช่นกลุ่มคำและกลุ่มคำกริยา
การแบ่งประโยคโดยใช้ OpenNLP
ในการตรวจจับประโยค OpenNLP ใช้โมเดลไฟล์ชื่อ en-chunker.bin. นี่คือรูปแบบที่กำหนดไว้ล่วงหน้าซึ่งได้รับการฝึกฝนให้แยกประโยคในข้อความดิบที่กำหนด
opennlp.tools.chunker แพคเกจประกอบด้วยคลาสและอินเทอร์เฟซที่ใช้เพื่อค้นหาคำอธิบายประกอบวากยสัมพันธ์ที่ไม่เรียกซ้ำเช่นกลุ่มวลีคำนาม
คุณสามารถแบ่งประโยคโดยใช้วิธีการ chunk() ของ ChunkerMEชั้นเรียน วิธีนี้ยอมรับโทเค็นของประโยคและแท็ก POS เป็นพารามิเตอร์ ดังนั้นก่อนที่จะเริ่มกระบวนการแยกชิ้นส่วนก่อนอื่นคุณต้องสร้างประโยคให้เป็นโทเค็นและสร้างแท็ก POS ของส่วนนั้น
ในการแยกประโยคโดยใช้ไลบรารี OpenNLP คุณต้อง -
Tokenize ประโยค
สร้างแท็ก POS สำหรับมัน
โหลดไฟล์ en-chunker.bin แบบจำลองโดยใช้ ChunkerModel ชั้นเรียน
เริ่มต้นไฟล์ ChunkerME ชั้นเรียน
แยกประโยคโดยใช้ chunk() วิธีการของคลาสนี้
ต่อไปนี้เป็นขั้นตอนที่ต้องปฏิบัติตามเพื่อเขียนโปรแกรมเพื่อเรียงประโยคจากข้อความดิบที่กำหนด
ขั้นตอนที่ 1: การแปลงประโยค
Tokenize ประโยคโดยใช้ tokenize() วิธีการของ whitespaceTokenizer คลาสดังที่แสดงในบล็อกรหัสต่อไปนี้
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
ขั้นตอนที่ 2: การสร้างแท็ก POS
สร้างแท็ก POS ของประโยคโดยใช้ tag() วิธีการของ POSTaggerME คลาสดังที่แสดงในบล็อกรหัสต่อไปนี้
//Generating the POS tags
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
ขั้นตอนที่ 3: การโหลดโมเดล
โมเดลสำหรับการแบ่งประโยคจะแสดงโดยคลาสที่มีชื่อว่า ChunkerModelซึ่งเป็นของแพ็คเกจ opennlp.tools.chunker.
ในการโหลดแบบจำลองการตรวจจับประโยค -
สร้างไฟล์ InputStream อ็อบเจ็กต์ของโมเดล (สร้างอินสแตนซ์ FileInputStream และส่งเส้นทางของโมเดลในรูปแบบ String ไปยังตัวสร้าง)
เริ่มต้นไฟล์ ChunkerModel ชั้นเรียนและผ่าน InputStream (วัตถุ) ของโมเดลเป็นพารามิเตอร์ของตัวสร้างดังที่แสดงในบล็อกโค้ดต่อไปนี้ -
//Loading the chunker model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel chunkerModel = new ChunkerModel(inputStream);
ขั้นตอนที่ 4: สร้างอินสแตนซ์คลาส chunkerME
chunkerME คลาสของแพ็คเกจ opennlp.tools.chunkerมีวิธีการแยกประโยค นี่คือกลุ่มข้อมูลที่อิงตามเอนโทรปีสูงสุด
สร้างอินสแตนซ์คลาสนี้และส่งผ่านโมเดลอ็อบเจ็กต์ที่สร้างในขั้นตอนก่อนหน้า
//Instantiate the ChunkerME class
ChunkerME chunkerME = new ChunkerME(chunkerModel);
ขั้นตอนที่ 5: การแบ่งประโยค
chunk() วิธีการของ ChunkerMEคลาสใช้เพื่อแยกประโยคในข้อความดิบที่ส่งผ่านไป วิธีนี้ยอมรับอาร์เรย์สตริงสองรายการที่แสดงโทเค็นและแท็กเป็นพารามิเตอร์
เรียกใช้เมธอดนี้โดยส่งอาร์เรย์โทเค็นและอาร์เรย์แท็กที่สร้างในขั้นตอนก่อนหน้าเป็นพารามิเตอร์
//Generating the chunks
String result[] = chunkerME.chunk(tokens, tags);
Example
ต่อไปนี้เป็นโปรแกรมที่จะแยกประโยคในข้อความดิบที่กำหนด บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อChunkerExample.java.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import opennlp.tools.chunker.ChunkerME;
import opennlp.tools.chunker.ChunkerModel;
import opennlp.tools.cmdline.postag.POSModelLoader;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class ChunkerExample{
public static void main(String args[]) throws IOException {
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating the POS tags
//Load the parts of speech model
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
//Loading the chunker model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel chunkerModel = new ChunkerModel(inputStream);
//Instantiate the ChunkerME class
ChunkerME chunkerME = new ChunkerME(chunkerModel);
//Generating the chunks
String result[] = chunkerME.chunk(tokens, tags);
for (String s : result)
System.out.println(s);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac ChunkerExample.java
java ChunkerExample
ในการดำเนินการโปรแกรมด้านบนจะอ่าน String ที่กำหนดและแยกประโยคในนั้นและแสดงดังที่แสดงด้านล่าง
Loading POS Tagger model ... done (1.040s)
B-NP
I-NP
B-VP
I-VP
การตรวจจับตำแหน่งของโทเค็น
นอกจากนี้เรายังสามารถตรวจจับตำแหน่งหรือช่วงของชิ้นงานโดยใช้ไฟล์ chunkAsSpans() วิธีการของ ChunkerMEชั้นเรียน วิธีนี้ส่งคืนอาร์เรย์ของอ็อบเจ็กต์ประเภท Span คลาสที่มีชื่อว่า Span of theopennlp.tools.util แพคเกจใช้ในการจัดเก็บไฟล์ start และ end จำนวนเต็มของชุด
คุณสามารถจัดเก็บช่วงเวลาที่ส่งคืนโดยไฟล์ chunkAsSpans() วิธีการในอาร์เรย์ Span และพิมพ์ดังที่แสดงในบล็อกรหัสต่อไปนี้
//Generating the tagged chunk spans
Span[] span = chunkerME.chunkAsSpans(tokens, tags);
for (Span s : span)
System.out.println(s.toString());
Example
ต่อไปนี้เป็นโปรแกรมที่ตรวจจับประโยคในข้อความดิบที่กำหนด บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อChunkerSpansEample.java.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import opennlp.tools.chunker.ChunkerME;
import opennlp.tools.chunker.ChunkerModel;
import opennlp.tools.cmdline.postag.POSModelLoader;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
import opennlp.tools.util.Span;
public class ChunkerSpansEample{
public static void main(String args[]) throws IOException {
//Load the parts of speech model
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
//Loading the chunker model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel chunkerModel = new ChunkerModel(inputStream);
ChunkerME chunkerME = new ChunkerME(chunkerModel);
//Generating the tagged chunk spans
Span[] span = chunkerME.chunkAsSpans(tokens, tags);
for (Span s : span)
System.out.println(s.toString());
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac ChunkerSpansEample.java
java ChunkerSpansEample
ในการดำเนินการโปรแกรมด้านบนจะอ่านสตริงที่กำหนดและช่วงของชิ้นส่วนในนั้นและแสดงผลลัพธ์ต่อไปนี้ -
Loading POS Tagger model ... done (1.059s)
[0..2) NP
[2..4) VP
Chunker Probability Detection
probs() วิธีการของ ChunkerME คลาสส่งคืนความน่าจะเป็นของลำดับที่ถอดรหัสล่าสุด
//Getting the probabilities of the last decoded sequence
double[] probs = chunkerME.probs();
ต่อไปนี้เป็นโปรแกรมพิมพ์ความน่าจะเป็นของลำดับที่ถอดรหัสล่าสุดโดยไฟล์ chunker. บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อChunkerProbsExample.java.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import opennlp.tools.chunker.ChunkerME;
import opennlp.tools.chunker.ChunkerModel;
import opennlp.tools.cmdline.postag.POSModelLoader;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class ChunkerProbsExample{
public static void main(String args[]) throws IOException {
//Load the parts of speech model
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
//Loading the chunker model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel cModel = new ChunkerModel(inputStream);
ChunkerME chunkerME = new ChunkerME(cModel);
//Generating the chunk tags
chunkerME.chunk(tokens, tags);
//Getting the probabilities of the last decoded sequence
double[] probs = chunkerME.probs();
for(int i = 0; i<probs.length; i++)
System.out.println(probs[i]);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac ChunkerProbsExample.java
java ChunkerProbsExample
ในการดำเนินการโปรแกรมด้านบนจะอ่านสตริงที่กำหนดแยกเป็นชิ้น ๆ และพิมพ์ความน่าจะเป็นของลำดับที่ถอดรหัสล่าสุด
0.9592746040797778
0.6883933131241501
0.8830563473996004
0.8951150529746051