OpenNLP - Tokenizasyon

Verilen cümleyi daha küçük parçalara (jetonlara) bölme süreci olarak bilinir tokenization. Genel olarak, verilen işlenmemiş metin bir dizi sınırlayıcıya (çoğunlukla beyaz boşluklar) dayalı olarak belirtilir.

Tokenizasyon, yazım denetimi, aramaları işleme, konuşma bölümlerini tanımlama, cümle algılama, belgelerin belge sınıflandırması vb. Gibi görevlerde kullanılır.

OpenNLP kullanarak kodlama

opennlp.tools.tokenize paketi, belirteçleştirmeyi gerçekleştirmek için kullanılan sınıfları ve arabirimleri içerir.

Verilen cümleleri daha basit parçalar halinde belirtmek için, OpenNLP kitaplığı üç farklı sınıf sağlar -

  • SimpleTokenizer - Bu sınıf, karakter sınıflarını kullanarak verilen ham metni belirteçler.

  • WhitespaceTokenizer - Bu sınıf, verilen metni belirtmek için beyaz boşlukları kullanır.

  • TokenizerME- Bu sınıf, ham metni ayrı belirteçlere dönüştürür. Kararlarını vermek için Maksimum Entropi kullanır.

SimpleTokenizer

Kullanarak bir cümleyi belirtmek için SimpleTokenizer sınıf, yapmanız gereken -

  • İlgili sınıfın bir nesnesini oluşturun.

  • Cümleyi kullanarak cümleyi şifreleyin tokenize() yöntem.

  • Jetonları yazdırın.

Verilen ham metni belirteçlere ayıran bir program yazmak için izlenecek adımlar aşağıdadır.

Step 1 - İlgili sınıfı örneklemek

Her iki sınıfta da, onları başlatacak yapıcılar yoktur. Bu nedenle, statik değişkeni kullanarak bu sınıfların nesnelerini oluşturmamız gerekir.INSTANCE.

SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;

Step 2 - Cümleleri şifreleyin

Her iki sınıf da adında bir yöntem içerir tokenize(). Bu yöntem, String formatında bir ham metni kabul eder. Çağrıldığında, verilen String'i jetonlaştırır ve bir Dizeler (jeton) dizisi döndürür.

Cümleyi kullanarak cümleyi şifreleyin tokenizer() yöntemi aşağıda gösterildiği gibi.

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

Step 3 - Jetonları yazdırın

Cümleyi belirtdikten sonra, belirteçleri kullanarak yazdırabilirsiniz. for loop, Aşağıda gösterildiği gibi.

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

Example

Aşağıda verilen cümleyi SimpleTokenizer sınıfını kullanarak belirteç yapan program yer almaktadır. Bu programı adıyla bir dosyaya kaydedinSimpleTokenizerExample.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);  
      }       
   }  
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac SimpleTokenizerExample.java 
java SimpleTokenizerExample

Yürütüldüğünde, yukarıdaki program verilen String'i (ham metin) okur, onu tokenize eder ve aşağıdaki çıktıyı görüntüler -

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

WhitespaceTokenizer

Kullanarak bir cümleyi belirtmek için WhitespaceTokenizer sınıf, yapmanız gereken -

  • İlgili sınıfın bir nesnesini oluşturun.

  • Cümleyi kullanarak cümleyi şifreleyin tokenize() yöntem.

  • Jetonları yazdırın.

Verilen ham metni belirteçlere ayıran bir program yazmak için izlenecek adımlar aşağıdadır.

Step 1 - İlgili sınıfı örneklemek

Her iki sınıfta da, onları başlatacak yapıcılar yoktur. Bu nedenle, statik değişkeni kullanarak bu sınıfların nesnelerini oluşturmamız gerekir.INSTANCE.

WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE;

Step 2 - Cümleleri şifreleyin

Her iki sınıf da adında bir yöntem içerir tokenize(). Bu yöntem, String formatında bir ham metni kabul eder. Çağrıldığında, verilen String'i jetonlaştırır ve bir Dizeler (jeton) dizisi döndürür.

Cümleyi kullanarak cümleyi şifreleyin tokenizer() yöntemi aşağıda gösterildiği gibi.

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

Step 3 - Jetonları yazdırın

Cümleyi belirtdikten sonra, belirteçleri kullanarak yazdırabilirsiniz. for loop, Aşağıda gösterildiği gibi.

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

Example

Aşağıda, verilen cümleyi kullanarak jetonlaştıran programdır. WhitespaceTokenizersınıf. Bu programı adıyla bir dosyaya kaydedinWhitespaceTokenizerExample.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);        
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac WhitespaceTokenizerExample.java 
java WhitespaceTokenizerExample

Yürütüldüğünde, yukarıdaki program verilen String'i (ham metin) okur, onu tokenize eder ve aşağıdaki çıktıyı görüntüler.

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

TokenizerME sınıfı

OpenNLP ayrıca cümleleri belirtmek için önceden tanımlanmış bir model, de-token.bin adlı bir dosya kullanır. Belirli bir ham metindeki cümleleri belirtmek için eğitilmiştir.

TokenizerME sınıfı opennlp.tools.tokenizerpaketi, bu modeli yüklemek ve verilen ham metni OpenNLP kitaplığını kullanarak belirtmek için kullanılır. Bunu yapmak için yapmanız gerekenler -

  • Yükle en-token.bin kullanarak model TokenizerModel sınıf.

  • Örnekleyin TokenizerME sınıf.

  • Cümleleri kullanarak şifreleyin tokenize() bu sınıfın yöntemi.

Aşağıdakiler, verilen ham metinden cümleleri kullanarak dizgeye ayıran bir program yazmak için izlenecek adımlardır. TokenizerME sınıf.

Step 1 - Modeli yükleme

Simgeleştirme modeli, adlı sınıf tarafından temsil edilir. TokenizerModelpakete ait olan opennlp.tools.tokenize.

Bir jetonlaştırıcı modeli yüklemek için -

  • Oluşturduğunuz bir InputStream modelin nesnesi (FileInputStream'i somutlaştırın ve modelin yolunu String biçiminde yapıcısına iletin).

  • Örnekleyin TokenizerModel sınıf ve geç InputStream (nesne) modelinin yapıcısına bir parametre olarak aşağıdaki kod bloğunda gösterildiği gibi.

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

Step 2 - TokenizerME sınıfını örnekleme

TokenizerME paketin sınıfı opennlp.tools.tokenizeişlenmemiş metni daha küçük parçalara (jetonlar) ayırmak için yöntemler içerir. Kararlarını vermek için Maksimum Entropi kullanır.

Bu sınıfı somutlaştırın ve önceki adımda oluşturulan model nesnesini aşağıda gösterildiği gibi iletin.

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

Step 3 - Cümlenin simge haline getirilmesi

tokenize() yöntemi TokenizerMEsınıfı, kendisine iletilen ham metni belirtmek için kullanılır. Bu yöntem bir String değişkenini parametre olarak kabul eder ve bir Dizeler (belirteçler) dizisi döndürür.

Aşağıdaki gibi, cümlenin String biçimini bu yönteme ileterek bu yöntemi çağırın.

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

Example

Aşağıda verilen ham metni tokenize eden program yer almaktadır. Bu programı adıyla bir dosyaya kaydedinTokenizerMEExample.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); 
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac TokenizerMEExample.java 
java TokenizerMEExample

Yürütüldüğünde, yukarıdaki program verilen String'i okur ve içindeki cümleleri algılar ve aşağıdaki çıktıyı görüntüler -

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

Jetonların Konumlarını Geri Alma

Pozisyonları da alabiliriz veya spans token'ların tokenizePos()yöntem. Bu, paketin Tokenizer arayüzünün yöntemidiropennlp.tools.tokenize. Tüm (üç) Tokenizer sınıfı bu arayüzü uyguladığından, bu yöntemi hepsinde bulabilirsiniz.

Bu yöntem cümleyi veya ham metni bir dize biçiminde kabul eder ve türdeki nesnelerin bir dizisini döndürür Span.

Tokenların pozisyonlarını şurayı kullanarak alabilirsiniz: tokenizePos() yöntem, aşağıdaki gibi -

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

Pozisyonları (aralıkları) yazdırma

Adlı sınıf Span of opennlp.tools.util paketi, kümelerin başlangıç ​​ve bitiş tam sayılarını saklamak için kullanılır.

Tarafından döndürülen aralıkları saklayabilirsiniz. tokenizePos() yöntemini Span dizisine ekleyin ve aşağıdaki kod bloğunda gösterildiği gibi yazdırın.

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

Jetonları ve konumlarını birlikte yazdırma

substring() String sınıfının yöntemi, begin ve endofsetler ve ilgili dizeyi döndürür. Bu yöntemi, aşağıdaki kod bloğunda gösterildiği gibi, jetonları ve bunların aralıklarını (konumlarını) birlikte yazdırmak için kullanabiliriz.

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

Example(SimpleTokenizer)

Aşağıda, ham metnin belirteç aralıklarını kullanarak SimpleTokenizersınıf. Ayrıca, jetonları konumlarıyla birlikte yazdırır. Bu programı isimli bir dosyaya kaydedin.SimpleTokenizerSpans.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()));          
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac SimpleTokenizerSpans.java 
java SimpleTokenizerSpans

Yürütüldüğünde, yukarıdaki program verilen String'i (ham metin) okur, onu tokenize eder ve aşağıdaki çıktıyı görüntüler -

[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)

Aşağıda, ham metnin belirteç aralıklarını kullanarak WhitespaceTokenizersınıf. Ayrıca, jetonları konumlarıyla birlikte yazdırır. Bu programı adıyla bir dosyaya kaydedinWhitespaceTokenizerSpans.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()));        
   } 
}

Kaydedilen java dosyasını aşağıdaki komutları kullanarak komut isteminden derleyin ve yürütün

javac WhitespaceTokenizerSpans.java 
java WhitespaceTokenizerSpans

Yürütüldüğünde, yukarıdaki program verilen String'i (ham metin) okur, onu tokenize eder ve aşağıdaki çıktıyı görüntüler.

[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)

Aşağıda, ham metnin belirteç aralıklarını kullanarak TokenizerMEsınıf. Ayrıca, jetonları konumlarıyla birlikte yazdırır. Bu programı adıyla bir dosyaya kaydedinTokenizerMESpans.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()));      
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac TokenizerMESpans.java 
java TokenizerMESpans

Yürütüldüğünde, yukarıdaki program verilen String'i (ham metin) okur, onu tokenize eder ve aşağıdaki çıktıyı görüntüler -

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

Tokenizatör Olasılığı

TokenizerME sınıfının getTokenProbabilities () yöntemi, tokenizePos () yöntemine yapılan en son çağrılarla ilişkili olasılıkları almak için kullanılır.

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

Aşağıdaki program, tokenizePos () yöntemine yapılan çağrılarla ilişkili olasılıkları yazdırmaktır. Bu programı adıyla bir dosyaya kaydedinTokenizerMEProbs.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]);          
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac TokenizerMEProbs.java 
java TokenizerMEProbs

Yürütüldüğünde, yukarıdaki program verilen dizgeyi okur ve cümleleri belirtip, yazdırır. Ek olarak, tokenizerPos () yöntemine yapılan en son çağrılarla ilişkili olasılıkları da döndürür.

[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