OpenNLP - Deteksi Kalimat
Saat memproses bahasa alami, memutuskan awal dan akhir kalimat adalah salah satu masalah yang harus ditangani. Proses ini dikenal sebagaiSmasuk Boundary Disambiguasi (SBD) atau hanya pemutusan kalimat.
Teknik yang kami gunakan untuk mendeteksi kalimat dalam teks tertentu, bergantung pada bahasa teks.
Deteksi Kalimat Menggunakan Java
Kita bisa mendeteksi kalimat dalam teks yang diberikan di Java menggunakan, Regular Expressions, dan seperangkat aturan sederhana.
Misalnya, mari kita asumsikan titik, tanda tanya, atau tanda seru mengakhiri kalimat dalam teks yang diberikan, kemudian kita dapat membagi kalimat menggunakan split() metode dari Stringkelas. Di sini, kita harus melewatkan ekspresi reguler dalam format String.
Berikut adalah program yang menentukan kalimat dalam teks tertentu menggunakan ekspresi reguler Java (split method). Simpan program ini dalam sebuah file dengan namaSentenceDetection_RE.java.
public class SentenceDetection_RE {
public static void main(String args[]){
String sentence = " Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
String simple = "[.?!]";
String[] splitString = (sentence.split(simple));
for (String string : splitString)
System.out.println(string);
}
}
Kompilasi dan jalankan file java yang disimpan dari command prompt menggunakan perintah berikut.
javac SentenceDetection_RE.java
java SentenceDetection_RE
Saat menjalankan, program di atas membuat dokumen PDF yang menampilkan pesan berikut.
Hi
How are you
Welcome to Tutorialspoint
We provide free tutorials on various technologies
Deteksi Kalimat Menggunakan OpenNLP
Untuk mendeteksi kalimat, OpenNLP menggunakan model yang telah ditentukan sebelumnya, sebuah file bernama en-sent.bin. Model standar ini dilatih untuk mendeteksi kalimat dalam teks mentah tertentu.
Itu opennlp.tools.sentdetect paket berisi kelas dan antarmuka yang digunakan untuk melakukan tugas deteksi kalimat.
Untuk mendeteksi kalimat menggunakan pustaka OpenNLP, Anda perlu -
Muat file en-sent.bin model menggunakan SentenceModel kelas
Instantiate SentenceDetectorME kelas.
Deteksi kalimat menggunakan sentDetect() metode kelas ini.
Berikut adalah langkah-langkah yang harus diikuti untuk menulis program yang mendeteksi kalimat dari teks mentah yang diberikan.
Langkah 1: Memuat model
Model untuk pendeteksian kalimat diwakili oleh kelas bernama SentenceModel, yang termasuk dalam paket opennlp.tools.sentdetect.
Untuk memuat model deteksi kalimat -
Buat InputStream objek model (Membuat Instansiasi FileInputStream dan meneruskan jalur model dalam format String ke konstruktornya).
Instantiate SentenceModel kelas dan lulus InputStream (object) dari model sebagai parameter untuk konstruktornya seperti yang ditunjukkan pada blok kode berikut -
//Loading sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/ensent.bin");
SentenceModel model = new SentenceModel(inputStream);
Langkah 2: Membuat instance kelas SentenceDetectorME
Itu SentenceDetectorME kelas paket opennlp.tools.sentdetectberisi metode untuk membagi teks mentah menjadi kalimat. Kelas ini menggunakan model Entropi Maksimum untuk mengevaluasi karakter akhir kalimat dalam sebuah string untuk menentukan apakah mereka menandakan akhir kalimat.
Buat instance kelas ini dan teruskan objek model yang dibuat pada langkah sebelumnya, seperti yang ditunjukkan di bawah ini.
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
Langkah 3: Mendeteksi kalimat
Itu sentDetect() metode dari SentenceDetectorMEkelas digunakan untuk mendeteksi kalimat dalam teks mentah yang diteruskan padanya. Metode ini menerima variabel String sebagai parameter.
Panggil metode ini dengan meneruskan format String dari kalimat ke metode ini.
//Detecting the sentence
String sentences[] = detector.sentDetect(sentence);
Example
Berikut adalah program yang mendeteksi kalimat-kalimat dalam teks mentah tertentu. Simpan program ini dalam file dengan namaSentenceDetectionME.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
public class SentenceDetectionME {
public static void main(String args[]) throws Exception {
String sentence = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Loading sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
//Detecting the sentence
String sentences[] = detector.sentDetect(sentence);
//Printing the sentences
for(String sent : sentences)
System.out.println(sent);
}
}
Kompilasi dan jalankan file Java yang disimpan dari Command prompt menggunakan perintah berikut -
javac SentenceDetectorME.java
java SentenceDetectorME
Saat menjalankan, program di atas membaca String yang diberikan dan mendeteksi kalimat di dalamnya dan menampilkan output berikut.
Hi. How are you?
Welcome to Tutorialspoint.
We provide free tutorials on various technologies
Mendeteksi Posisi Kalimat
Kami juga dapat mendeteksi posisi kalimat menggunakan metode sentPosDetect () dari SentenceDetectorME class.
Berikut adalah langkah-langkah yang harus diikuti untuk menulis program yang mendeteksi posisi kalimat dari teks mentah yang diberikan.
Langkah 1: Memuat model
Model untuk pendeteksian kalimat diwakili oleh kelas bernama SentenceModel, yang termasuk dalam paket opennlp.tools.sentdetect.
Untuk memuat model deteksi kalimat -
Buat InputStream objek model (Membuat Instansiasi FileInputStream dan meneruskan jalur model dalam format String ke konstruktornya).
Instantiate SentenceModel kelas dan lulus InputStream (objek) model sebagai parameter untuk konstruktornya, seperti yang ditunjukkan pada blok kode berikut.
//Loading sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
Langkah 2: Membuat instance kelas SentenceDetectorME
Itu SentenceDetectorME kelas paket opennlp.tools.sentdetectberisi metode untuk membagi teks mentah menjadi kalimat. Kelas ini menggunakan model Entropi Maksimum untuk mengevaluasi karakter akhir kalimat dalam sebuah string untuk menentukan apakah mereka menandakan akhir kalimat.
Buat instance kelas ini dan teruskan objek model yang dibuat di langkah sebelumnya.
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
Langkah 3: Mendeteksi posisi kalimat
Itu sentPosDetect() metode dari SentenceDetectorMEclass digunakan untuk mendeteksi posisi kalimat dalam teks mentah yang diteruskan padanya. Metode ini menerima variabel String sebagai parameter.
Panggil metode ini dengan meneruskan format String dari kalimat sebagai parameter untuk metode ini.
//Detecting the position of the sentences in the paragraph
Span[] spans = detector.sentPosDetect(sentence);
Langkah 4: Mencetak rentang kalimat
Itu sentPosDetect() metode dari SentenceDetectorME class mengembalikan larik objek bertipe Span. Kelas bernama Span of theopennlp.tools.util paket digunakan untuk menyimpan bilangan bulat awal dan akhir dari set.
Anda dapat menyimpan durasi yang dikembalikan oleh sentPosDetect() metode dalam array Span dan mencetaknya, seperti yang ditunjukkan pada blok kode berikut.
//Printing the sentences and their spans of a sentence
for (Span span : spans)
System.out.println(paragraph.substring(span);
Example
Berikut adalah program yang mendeteksi kalimat-kalimat dalam teks mentah yang diberikan. Simpan program ini dalam file dengan namaSentenceDetectionME.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
import opennlp.tools.util.Span;
public class SentencePosDetection {
public static void main(String args[]) throws Exception {
String paragraph = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Loading sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
//Detecting the position of the sentences in the raw text
Span spans[] = detector.sentPosDetect(paragraph);
//Printing the spans of the sentences in the paragraph
for (Span span : spans)
System.out.println(span);
}
}
Kompilasi dan jalankan file Java yang disimpan dari Command prompt menggunakan perintah berikut -
javac SentencePosDetection.java
java SentencePosDetection
Saat menjalankan, program di atas membaca String yang diberikan dan mendeteksi kalimat di dalamnya dan menampilkan output berikut.
[0..16)
[17..43)
[44..93)
Kalimat bersama dengan Posisinya
Itu substring() metode kelas String menerima begin dan end offsetsdan mengembalikan string masing-masing. Kita dapat menggunakan metode ini untuk mencetak kalimat dan bentang (posisi) mereka bersama-sama, seperti yang ditunjukkan pada blok kode berikut.
for (Span span : spans)
System.out.println(sen.substring(span.getStart(), span.getEnd())+" "+ span);
Berikut adalah program untuk mendeteksi kalimat dari teks mentah yang diberikan dan menampilkannya beserta posisinya. Simpan program ini dalam file dengan namaSentencesAndPosDetection.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
import opennlp.tools.util.Span;
public class SentencesAndPosDetection {
public static void main(String args[]) throws Exception {
String sen = "Hi. How are you? Welcome to Tutorialspoint."
+ " We provide free tutorials on various technologies";
//Loading a sentence model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
//Detecting the position of the sentences in the paragraph
Span[] spans = detector.sentPosDetect(sen);
//Printing the sentences and their spans of a paragraph
for (Span span : spans)
System.out.println(sen.substring(span.getStart(), span.getEnd())+" "+ span);
}
}
Kompilasi dan jalankan file Java yang disimpan dari Command prompt menggunakan perintah berikut -
javac SentencesAndPosDetection.java
java SentencesAndPosDetection
Saat mengeksekusi, program di atas membaca String yang diberikan dan mendeteksi kalimat beserta posisinya dan menampilkan output berikut.
Hi. How are you? [0..16)
Welcome to Tutorialspoint. [17..43)
We provide free tutorials on various technologies [44..93)
Deteksi Kemungkinan Kalimat
Itu getSentenceProbabilities() metode dari SentenceDetectorME class mengembalikan probabilitas yang terkait dengan panggilan terbaru ke metode sentDetect ().
//Getting the probabilities of the last decoded sequence
double[] probs = detector.getSentenceProbabilities();
Berikut ini adalah program untuk mencetak probabilitas yang terkait dengan panggilan ke metode sentDetect (). Simpan program ini dalam sebuah file dengan namaSentenceDetectionMEProbs.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
public class SentenceDetectionMEProbs {
public static void main(String args[]) throws Exception {
String sentence = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Loading sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
//Detecting the sentence
String sentences[] = detector.sentDetect(sentence);
//Printing the sentences
for(String sent : sentences)
System.out.println(sent);
//Getting the probabilities of the last decoded sequence
double[] probs = detector.getSentenceProbabilities();
System.out.println(" ");
for(int i = 0; i<probs.length; i++)
System.out.println(probs[i]);
}
}
Kompilasi dan jalankan file Java yang disimpan dari Command prompt menggunakan perintah berikut -
javac SentenceDetectionMEProbs.java
java SentenceDetectionMEProbs
Saat menjalankan, program di atas membaca String yang diberikan dan mendeteksi kalimat dan mencetaknya. Selain itu, ini juga mengembalikan probabilitas yang terkait dengan panggilan terbaru ke metode sentDetect (), seperti yang ditunjukkan di bawah ini.
Hi. How are you?
Welcome to Tutorialspoint.
We provide free tutorials on various technologies
0.9240246995179983
0.9957680129995953
1.0