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