OpenNLP - Tokenisasi

Proses memotong kalimat yang diberikan menjadi bagian-bagian yang lebih kecil (token) dikenal sebagai tokenization. Secara umum, teks mentah yang diberikan diberi token berdasarkan sekumpulan pembatas (kebanyakan spasi).

Tokenisasi digunakan dalam tugas-tugas seperti pemeriksaan ejaan, pemrosesan pencarian, mengidentifikasi jenis kata, deteksi kalimat, klasifikasi dokumen dokumen, dll.

Tokenisasi menggunakan OpenNLP

Itu opennlp.tools.tokenize paket berisi kelas dan antarmuka yang digunakan untuk melakukan tokenisasi.

Untuk membuat token kalimat yang diberikan menjadi fragmen yang lebih sederhana, pustaka OpenNLP menyediakan tiga kelas berbeda -

  • SimpleTokenizer - Kelas ini memberi tokenize teks mentah yang diberikan menggunakan kelas karakter.

  • WhitespaceTokenizer - Kelas ini menggunakan spasi putih untuk memberi token pada teks yang diberikan.

  • TokenizerME- Kelas ini mengubah teks mentah menjadi token terpisah. Ia menggunakan Entropi Maksimum untuk membuat keputusannya.

SimpleTokenizer

Untuk memberi token pada kalimat menggunakan SimpleTokenizer kelas, Anda perlu -

  • Buat objek dari kelas masing-masing.

  • Tokenkan kalimat menggunakan tokenize() metode.

  • Cetak token.

Berikut adalah langkah-langkah yang harus diikuti untuk menulis program yang memberi token pada teks mentah yang diberikan.

Step 1 - Instansiasi kelas masing-masing

Di kedua kelas, tidak ada konstruktor yang tersedia untuk membuat instance-nya. Oleh karena itu, kita perlu membuat objek dari kelas-kelas ini menggunakan variabel statisINSTANCE.

SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;

Step 2 - Tokenkan kalimatnya

Kedua kelas ini berisi metode yang disebut tokenize(). Metode ini menerima teks mentah dalam format String. Saat dipanggil, ini memberi token pada String yang diberikan dan mengembalikan array Strings (token).

Tokenkan kalimat menggunakan tokenizer() metode seperti yang ditunjukkan di bawah ini.

//Tokenizing the given sentence 
 String tokens[] = tokenizer.tokenize(sentence);

Step 3 - Cetak tokennya

Setelah mentokenisasi kalimat, Anda dapat mencetak token menggunakan for loop, seperti yang ditunjukkan di bawah ini.

//Printing the tokens 
for(String token : tokens)       
   System.out.println(token);

Example

Berikut adalah program yang memberi token pada kalimat yang diberikan menggunakan kelas SimpleTokenizer. Simpan program ini dalam sebuah file dengan namaSimpleTokenizerExample.java.

import opennlp.tools.tokenize.SimpleTokenizer;  
public class SimpleTokenizerExample { 
   public static void main(String args[]){ 
     
      String sentence = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
    
      //Instantiating SimpleTokenizer class 
      SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE;  
       
      //Tokenizing the given sentence 
      String tokens[] = simpleTokenizer.tokenize(sentence);  
       
      //Printing the tokens 
      for(String token : tokens) {         
         System.out.println(token);  
      }       
   }  
}

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

javac SimpleTokenizerExample.java 
java SimpleTokenizerExample

Saat menjalankan, program di atas membaca String yang diberikan (teks mentah), memberi tokenize, dan menampilkan output berikut -

Hi 
. 
How 
are 
you 
? 
Welcome 
to 
Tutorialspoint 
. 
We 
provide 
free 
tutorials 
on 
various 
technologies

WhitespaceTokenizer

Untuk memberi token pada kalimat menggunakan WhitespaceTokenizer kelas, Anda perlu -

  • Buat objek dari kelas masing-masing.

  • Tokenkan kalimat menggunakan tokenize() metode.

  • Cetak token.

Berikut adalah langkah-langkah yang harus diikuti untuk menulis program yang memberi token pada teks mentah yang diberikan.

Step 1 - Instansiasi kelas masing-masing

Di kedua kelas, tidak ada konstruktor yang tersedia untuk membuat instance-nya. Oleh karena itu, kita perlu membuat objek dari kelas-kelas ini menggunakan variabel statisINSTANCE.

WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE;

Step 2 - Tokenkan kalimatnya

Kedua kelas ini berisi metode yang disebut tokenize(). Metode ini menerima teks mentah dalam format String. Saat dipanggil, ini memberi token pada String yang diberikan dan mengembalikan array Strings (token).

Tokenkan kalimat menggunakan tokenizer() metode seperti yang ditunjukkan di bawah ini.

//Tokenizing the given sentence 
 String tokens[] = tokenizer.tokenize(sentence);

Step 3 - Cetak tokennya

Setelah mentokenisasi kalimat, Anda dapat mencetak token menggunakan for loop, seperti yang ditunjukkan di bawah ini.

//Printing the tokens 
for(String token : tokens)       
   System.out.println(token);

Example

Berikut adalah program yang memberi token pada kalimat yang diberikan menggunakan WhitespaceTokenizerkelas. Simpan program ini dalam sebuah file dengan namaWhitespaceTokenizerExample.java.

import opennlp.tools.tokenize.WhitespaceTokenizer;  

public class WhitespaceTokenizerExample {  
   
   public static void main(String args[]){ 
     
      String sentence = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
    
      //Instantiating whitespaceTokenizer class 
       WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE;  
       
      //Tokenizing the given paragraph 
      String tokens[] = whitespaceTokenizer.tokenize(sentence);  
       
      //Printing the tokens 
      for(String token : tokens)     
         System.out.println(token);        
   } 
}

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

javac WhitespaceTokenizerExample.java 
java WhitespaceTokenizerExample

Saat menjalankan, program di atas membaca String yang diberikan (teks mentah), memberi tokenize, dan menampilkan output berikut.

Hi. 
How 
are 
you? 
Welcome 
to 
Tutorialspoint. 
We 
provide 
free 
tutorials 
on 
various 
technologies

Kelas TokenizerME

OpenNLP juga menggunakan model yang telah ditentukan, file bernama de-token.bin, untuk membuat token kalimat. Ia dilatih untuk membuat token kalimat dalam teks mentah tertentu.

Itu TokenizerME kelas dari opennlp.tools.tokenizerpaket digunakan untuk memuat model ini, dan membuat token teks mentah yang diberikan menggunakan pustaka OpenNLP. Untuk melakukannya, Anda perlu -

  • Muat file en-token.bin model menggunakan TokenizerModel kelas.

  • Instantiate TokenizerME kelas.

  • Tokenkan kalimat menggunakan tokenize() metode kelas ini.

Berikut adalah langkah-langkah yang harus diikuti untuk menulis program yang mentokenisasi kalimat dari teks mentah yang diberikan menggunakan TokenizerME kelas.

Step 1 - Memuat model

Model tokenisasi diwakili oleh kelas bernama TokenizerModel, yang termasuk dalam paket opennlp.tools.tokenize.

Untuk memuat model tokenizer -

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

  • Instantiate TokenizerModel kelas dan lulus InputStream (objek) model sebagai parameter untuk konstruktornya, seperti yang ditunjukkan pada blok kode berikut.

//Loading the Tokenizer model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin"); 
TokenizerModel tokenModel = new TokenizerModel(inputStream);

Step 2 - Membuat instance kelas TokenizerME

Itu TokenizerME kelas paket opennlp.tools.tokenizeberisi metode untuk memotong teks mentah menjadi bagian-bagian yang lebih kecil (token). Ia menggunakan Entropi Maksimum untuk membuat keputusannya.

Buat instance kelas ini dan teruskan objek model yang dibuat pada langkah sebelumnya seperti yang ditunjukkan di bawah ini.

//Instantiating the TokenizerME class 
TokenizerME tokenizer = new TokenizerME(tokenModel);

Step 3 - Tokenisasi kalimat

Itu tokenize() metode dari TokenizerMEclass digunakan untuk memberi token pada teks mentah yang diteruskan padanya. Metode ini menerima variabel String sebagai parameter, dan mengembalikan larik Strings (token).

Panggil metode ini dengan meneruskan format String dari kalimat ke metode ini, sebagai berikut.

//Tokenizing the given raw text 
String tokens[] = tokenizer.tokenize(paragraph);

Example

Berikut adalah program yang memberi token pada teks mentah yang diberikan. Simpan program ini dalam sebuah file dengan namaTokenizerMEExample.java.

import java.io.FileInputStream; 
import java.io.InputStream; 
import opennlp.tools.tokenize.TokenizerME; 
import opennlp.tools.tokenize.TokenizerModel;  

public class TokenizerMEExample { 
  
   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 the Tokenizer model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin"); 
      TokenizerModel tokenModel = new TokenizerModel(inputStream); 
       
      //Instantiating the TokenizerME class 
      TokenizerME tokenizer = new TokenizerME(tokenModel); 
       
      //Tokenizing the given raw text 
      String tokens[] = tokenizer.tokenize(sentence);       
          
      //Printing the tokens  
      for (String a : tokens) 
         System.out.println(a); 
   } 
}

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

javac TokenizerMEExample.java 
java TokenizerMEExample

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 
technologie

Mengambil Posisi Token

Kami juga bisa mendapatkan posisi atau spans token yang menggunakan tokenizePos()metode. Ini adalah metode antarmuka Tokenizer dari paket tersebutopennlp.tools.tokenize. Karena semua (tiga) kelas Tokenizer menerapkan antarmuka ini, Anda dapat menemukan metode ini di semuanya.

Metode ini menerima kalimat atau teks mentah dalam bentuk string dan mengembalikan larik objek bertipe Span.

Anda bisa mendapatkan posisi token menggunakan tokenizePos() metode, sebagai berikut -

//Retrieving the tokens 
tokenizer.tokenizePos(sentence);

Mencetak posisi (bentang)

Kelas bernama Span dari opennlp.tools.util paket digunakan untuk menyimpan bilangan bulat awal dan akhir dari set.

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

//Retrieving the tokens 
Span[] tokens = tokenizer.tokenizePos(sentence);
//Printing the spans of tokens 
for( Span token : tokens)        
   System.out.println(token);

Mencetak token dan posisinya bersamaan

Itu substring() metode kelas String menerima begin dan endmengimbangi dan mengembalikan string masing-masing. Kita dapat menggunakan metode ini untuk mencetak token dan span (posisinya) bersama-sama, seperti yang ditunjukkan pada blok kode berikut.

//Printing the spans of tokens 
for(Span token : tokens)  
   System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));

Example(SimpleTokenizer)

Berikut ini adalah program yang mengambil rentang token dari teks mentah menggunakan SimpleTokenizerkelas. Itu juga mencetak token bersama dengan posisinya. Simpan program ini dalam file dengan namaSimpleTokenizerSpans.java.

import opennlp.tools.tokenize.SimpleTokenizer; 
import opennlp.tools.util.Span;  

public class SimpleTokenizerSpans {  
   public static void main(String args[]){ 
     
      String sent = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
    
      //Instantiating SimpleTokenizer class 
      SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE;  
       
      //Retrieving the boundaries of the tokens 
      Span[] tokens = simpleTokenizer.tokenizePos(sent);  
       
      //Printing the spans of tokens 
      for( Span token : tokens)
         System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));          
   } 
}

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

javac SimpleTokenizerSpans.java 
java SimpleTokenizerSpans

Saat menjalankan, program di atas membaca String yang diberikan (teks mentah), memberi tokenize, dan menampilkan output berikut -

[0..2) Hi 
[2..3) . 
[4..7) How 
[8..11) are 
[12..15) you 
[15..16) ? 
[17..24) Welcome 
[25..27) to 
[28..42) Tutorialspoint 
[42..43) . 
[44..46) We 
[47..54) provide 
[55..59) free 
[60..69) tutorials 
[70..72) on 
[73..80) various 
[81..93) technologies

Example (WhitespaceTokenizer)

Berikut ini adalah program yang mengambil rentang token dari teks mentah menggunakan WhitespaceTokenizerkelas. Itu juga mencetak token bersama dengan posisinya. Simpan program ini dalam sebuah file dengan namaWhitespaceTokenizerSpans.java.

import opennlp.tools.tokenize.WhitespaceTokenizer;
import opennlp.tools.util.Span; 
public class WhitespaceTokenizerSpans {  
   public static void main(String args[]){ 
     
      String sent = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
    
      //Instantiating SimpleTokenizer class 
      WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE;  
       
      //Retrieving the tokens 
      Span[] tokens = whitespaceTokenizer.tokenizePos(sent);  
       
      //Printing the spans of tokens 
      for( Span token : tokens) 
         System.out.println(token +" 
            "+sent.substring(token.getStart(), token.getEnd()));        
   } 
}

Kompilasi dan jalankan file java yang disimpan dari command prompt menggunakan perintah berikut

javac WhitespaceTokenizerSpans.java 
java WhitespaceTokenizerSpans

Saat menjalankan, program di atas membaca String yang diberikan (teks mentah), memberi tokenize, dan menampilkan output berikut.

[0..3) Hi. 
[4..7) How 
[8..11) are 
[12..16) you? 
[17..24) Welcome 
[25..27) to 
[28..43) Tutorialspoint. 
[44..46) We 
[47..54) provide 
[55..59) free
[60..69) tutorials 
[70..72) on 
[73..80) various 
[81..93) technologies

Example (TokenizerME)

Berikut ini adalah program yang mengambil rentang token dari teks mentah menggunakan TokenizerMEkelas. Itu juga mencetak token bersama dengan posisinya. Simpan program ini dalam sebuah file dengan namaTokenizerMESpans.java.

import java.io.FileInputStream; 
import java.io.InputStream; 
import opennlp.tools.tokenize.TokenizerME; 
import opennlp.tools.tokenize.TokenizerModel; 
import opennlp.tools.util.Span;  

public class TokenizerMESpans { 
   public static void main(String args[]) throws Exception{     
      String sent = "Hello John how are you welcome to Tutorialspoint"; 
       
      //Loading the Tokenizer model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin"); 
      TokenizerModel tokenModel = new TokenizerModel(inputStream); 
       
      //Instantiating the TokenizerME class 
      TokenizerME tokenizer = new TokenizerME(tokenModel); 
       
      //Retrieving the positions of the tokens 
      Span tokens[] = tokenizer.tokenizePos(sent); 
       
      //Printing the spans of tokens 
      for(Span token : tokens) 
         System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));      
   } 
}

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

javac TokenizerMESpans.java 
java TokenizerMESpans

Saat menjalankan, program di atas membaca String yang diberikan (teks mentah), memberi tokenize, dan menampilkan output berikut -

[0..5) Hello 
[6..10) John 
[11..14) how 
[15..18) are 
[19..22) you 
[23..30) welcome 
[31..33) to 
[34..48) Tutorialspoint

Kemungkinan Tokenizer

Metode getTokenProbabilities () dari kelas TokenizerME digunakan untuk mendapatkan probabilitas yang terkait dengan panggilan terbaru ke metode tokenizePos ().

//Getting the probabilities of the recent calls to tokenizePos() method 
double[] probs = detector.getSentenceProbabilities();

Berikut ini adalah program untuk mencetak probabilitas yang terkait dengan panggilan ke metode tokenizePos (). Simpan program ini dalam sebuah file dengan namaTokenizerMEProbs.java.

import java.io.FileInputStream; 
import java.io.InputStream; 
import opennlp.tools.tokenize.TokenizerME; 
import opennlp.tools.tokenize.TokenizerModel; 
import opennlp.tools.util.Span;  

public class TokenizerMEProbs { 
   
   public static void main(String args[]) throws Exception{     
      String sent = "Hello John how are you welcome to Tutorialspoint"; 
      
      //Loading the Tokenizer model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin"); 
      TokenizerModel tokenModel = new TokenizerModel(inputStream); 
      
      //Instantiating the TokenizerME class 
      TokenizerME tokenizer = new TokenizerME(tokenModel);
      
      //Retrieving the positions of the tokens 
      Span tokens[] = tokenizer.tokenizePos(sent); 
       
      //Getting the probabilities of the recent calls to tokenizePos() method 
      double[] probs = tokenizer.getTokenProbabilities(); 
       
      //Printing the spans of tokens 
      for(Span token : tokens) 
         System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));      
         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 TokenizerMEProbs.java 
java TokenizerMEProbs

Saat mengeksekusi, program di atas membaca String yang diberikan dan memberi token pada kalimat dan mencetaknya. Selain itu, ini juga mengembalikan probabilitas yang terkait dengan panggilan terbaru ke metode tokenizerPos ().

[0..5) Hello 
[6..10) John 
[11..14) how 
[15..18) are 
[19..22) you 
[23..30) welcome 
[31..33) to 
[34..48) Tutorialspoint 
   
1.0 
1.0 
1.0 
1.0 
1.0 
1.0 
1.0 
1.0