OpenNLP - Chunking Kalimat

Memotong kalimat mengacu pada pemecahan / pembagian kalimat menjadi beberapa bagian kata seperti kelompok kata dan kelompok kata kerja.

Memecah Kalimat menggunakan OpenNLP

Untuk mendeteksi kalimat, OpenNLP menggunakan model, file bernama en-chunker.bin. Ini adalah model standar yang dilatih untuk memecah kalimat dalam teks mentah yang diberikan.

Itu opennlp.tools.chunker paket berisi kelas dan antarmuka yang digunakan untuk menemukan anotasi sintaksis non-rekursif seperti potongan frase kata benda.

Anda dapat memotong kalimat menggunakan metode ini chunk() dari ChunkerMEkelas. Metode ini menerima token kalimat dan tag POS sebagai parameter. Oleh karena itu, sebelum memulai proses chunking, pertama-tama Anda perlu melakukan Token pada kalimat dan membuat tag POS bagian-bagiannya.

Untuk memotong kalimat menggunakan pustaka OpenNLP, Anda perlu -

  • Tokenkan kalimat tersebut.

  • Hasilkan tag POS untuk itu.

  • Muat file en-chunker.bin model menggunakan ChunkerModel kelas

  • Instantiate ChunkerME kelas.

  • Potong kalimat menggunakan chunk() metode kelas ini.

Berikut adalah langkah-langkah yang harus diikuti untuk menulis program untuk memotong kalimat dari teks mentah yang diberikan.

Langkah 1: Tokenisasi kalimat

Tokenkan kalimat menggunakan tokenize() metode dari whitespaceTokenizer kelas, seperti yang ditunjukkan pada blok kode berikut.

//Tokenizing the sentence 
String sentence = "Hi welcome to Tutorialspoint";       
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
String[] tokens = whitespaceTokenizer.tokenize(sentence);

Langkah 2: Membuat tag POS

Hasilkan tag POS dari kalimat menggunakan tag() metode dari POSTaggerME kelas, seperti yang ditunjukkan pada blok kode berikut.

//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);

Langkah 3: Memuat model

Model untuk memotong kalimat diwakili oleh kelas bernama ChunkerModel, yang termasuk dalam paket opennlp.tools.chunker.

Untuk memuat model deteksi kalimat -

  • Buat InputStream objek model (Membuat Instansiasi FileInputStream dan meneruskan jalur model dalam format String ke konstruktornya).

  • Instantiate ChunkerModel kelas dan lulus InputStream (object) dari model sebagai parameter untuk konstruktornya, seperti yang ditunjukkan pada blok kode berikut -

//Loading the chunker model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin"); 
ChunkerModel chunkerModel = new ChunkerModel(inputStream);

Langkah 4: Membuat instance kelas chunkerME

Itu chunkerME kelas paket opennlp.tools.chunkerberisi metode untuk memotong kalimat. Ini adalah chunker berbasis entropi maksimum.

Buat instance kelas ini dan teruskan objek model yang dibuat di langkah sebelumnya.

//Instantiate the ChunkerME class 
ChunkerME chunkerME = new ChunkerME(chunkerModel);

Langkah 5: Memotong kalimat

Itu chunk() metode dari ChunkerMEclass digunakan untuk memotong kalimat dalam teks mentah yang diteruskan padanya. Metode ini menerima dua larik String yang mewakili token dan tag, sebagai parameter.

Panggil metode ini dengan meneruskan larik token dan larik tag yang dibuat pada langkah sebelumnya sebagai parameter.

//Generating the chunks 
String result[] = chunkerME.chunk(tokens, tags);

Example

Berikut adalah program untuk memotong kalimat dalam teks mentah yang diberikan. Simpan program ini dalam sebuah file dengan namaChunkerExample.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);         
   }    
}

Kompilasi dan jalankan file Java yang disimpan dari Command prompt menggunakan perintah berikut -

javac ChunkerExample.java 
java ChunkerExample

Saat menjalankan, program di atas membaca String yang diberikan dan memotong kalimat di dalamnya, dan menampilkannya seperti yang ditunjukkan di bawah ini.

Loading POS Tagger model ... done (1.040s) 
B-NP 
I-NP 
B-VP 
I-VP

Mendeteksi Posisi Token

Kami juga dapat mendeteksi posisi atau bentang potongan menggunakan chunkAsSpans() metode dari ChunkerMEkelas. Metode ini mengembalikan larik objek dengan tipe Span. Kelas bernama Span of theopennlp.tools.util paket digunakan untuk menyimpan file start dan end bilangan bulat himpunan.

Anda dapat menyimpan durasi yang dikembalikan oleh chunkAsSpans() metode dalam array Span dan mencetaknya, seperti yang ditunjukkan pada blok kode berikut.

//Generating the tagged chunk spans 
Span[] span = chunkerME.chunkAsSpans(tokens, tags); 
       
for (Span s : span) 
   System.out.println(s.toString());

Example

Berikut adalah program yang mendeteksi kalimat-kalimat dalam teks mentah yang diberikan. Simpan program ini dalam sebuah file dengan namaChunkerSpansEample.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());  
   }    
}

Kompilasi dan jalankan file Java yang disimpan dari Command prompt menggunakan perintah berikut -

javac ChunkerSpansEample.java 
java ChunkerSpansEample

Saat menjalankan, program di atas membaca String dan span yang diberikan dari potongan di dalamnya, dan menampilkan output berikut -

Loading POS Tagger model ... done (1.059s) 
[0..2) NP 
[2..4) VP

Deteksi Kemungkinan Chunker

Itu probs() metode dari ChunkerME kelas mengembalikan probabilitas dari urutan yang terakhir didekodekan.

//Getting the probabilities of the last decoded sequence       
double[] probs = chunkerME.probs();

Berikut adalah program untuk mencetak probabilitas dari urutan terakhir yang diterjemahkan oleh chunker. Simpan program ini dalam sebuah file dengan namaChunkerProbsExample.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]);       
   }    
}

Kompilasi dan jalankan file Java yang disimpan dari Command prompt menggunakan perintah berikut -

javac ChunkerProbsExample.java 
java ChunkerProbsExample

Saat menjalankan, program di atas membaca String yang diberikan, memotongnya, dan mencetak probabilitas dari urutan yang terakhir didekodekan.

0.9592746040797778 
0.6883933131241501 
0.8830563473996004 
0.8951150529746051