OpenNLP - Tokenisierung

Der Vorgang des Zerlegens des angegebenen Satzes in kleinere Teile (Token) ist bekannt als tokenization. Im Allgemeinen wird der angegebene Rohtext basierend auf einer Reihe von Trennzeichen (meistens Leerzeichen) tokenisiert.

Die Tokenisierung wird für Aufgaben wie Rechtschreibprüfung, Suchverarbeitung, Identifizierung von Wortarten, Satzerkennung, Dokumentklassifizierung von Dokumenten usw. verwendet.

Tokenisierung mit OpenNLP

Das opennlp.tools.tokenize Das Paket enthält die Klassen und Schnittstellen, die zur Durchführung der Tokenisierung verwendet werden.

Um die angegebenen Sätze in einfachere Fragmente zu unterteilen, bietet die OpenNLP-Bibliothek drei verschiedene Klassen:

  • SimpleTokenizer - Diese Klasse markiert den angegebenen Rohtext mithilfe von Zeichenklassen.

  • WhitespaceTokenizer - Diese Klasse verwendet Leerzeichen, um den angegebenen Text zu tokenisieren.

  • TokenizerME- Diese Klasse konvertiert Rohtext in separate Token. Es verwendet Maximum Entropy, um seine Entscheidungen zu treffen.

SimpleTokenizer

Um einen Satz mit dem zu tokenisieren SimpleTokenizer Klasse, müssen Sie -

  • Erstellen Sie ein Objekt der jeweiligen Klasse.

  • Tokenisieren Sie den Satz mit dem tokenize() Methode.

  • Drucken Sie die Token.

Im Folgenden finden Sie die Schritte zum Schreiben eines Programms, das den angegebenen Rohtext tokenisiert.

Step 1 - Instanziieren der jeweiligen Klasse

In beiden Klassen sind keine Konstruktoren verfügbar, um sie zu instanziieren. Daher müssen wir Objekte dieser Klassen mit der statischen Variablen erstellenINSTANCE.

SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;

Step 2 - Tokenisieren Sie die Sätze

Beide Klassen enthalten eine aufgerufene Methode tokenize(). Diese Methode akzeptiert einen Rohtext im String-Format. Beim Aufrufen wird der angegebene String mit einem Token versehen und ein Array von Strings (Token) zurückgegeben.

Tokenisieren Sie den Satz mit dem tokenizer() Methode wie unten gezeigt.

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

Step 3 - Drucken Sie die Token

Nach dem Tokenisieren des Satzes können Sie die Token mit drucken for loop, Wie nachfolgend dargestellt.

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

Example

Das folgende Programm markiert den angegebenen Satz mithilfe der SimpleTokenizer-Klasse. Speichern Sie dieses Programm in einer Datei mit dem NamenSimpleTokenizerExample.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);  
      }       
   }  
}

Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie an der Eingabeaufforderung mit den folgenden Befehlen aus:

javac SimpleTokenizerExample.java 
java SimpleTokenizerExample

Bei der Ausführung liest das obige Programm den angegebenen String (Rohtext), markiert ihn mit einem Token und zeigt die folgende Ausgabe an:

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

WhitespaceTokenizer

Um einen Satz mit dem zu tokenisieren WhitespaceTokenizer Klasse, müssen Sie -

  • Erstellen Sie ein Objekt der jeweiligen Klasse.

  • Tokenisieren Sie den Satz mit dem tokenize() Methode.

  • Drucken Sie die Token.

Im Folgenden finden Sie die Schritte zum Schreiben eines Programms, das den angegebenen Rohtext tokenisiert.

Step 1 - Instanziieren der jeweiligen Klasse

In beiden Klassen sind keine Konstruktoren verfügbar, um sie zu instanziieren. Daher müssen wir Objekte dieser Klassen mit der statischen Variablen erstellenINSTANCE.

WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE;

Step 2 - Tokenisieren Sie die Sätze

Beide Klassen enthalten eine aufgerufene Methode tokenize(). Diese Methode akzeptiert einen Rohtext im String-Format. Beim Aufrufen wird der angegebene String mit einem Token versehen und ein Array von Strings (Token) zurückgegeben.

Tokenisieren Sie den Satz mit dem tokenizer() Methode wie unten gezeigt.

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

Step 3 - Drucken Sie die Token

Nach dem Tokenisieren des Satzes können Sie die Token mit drucken for loop, Wie nachfolgend dargestellt.

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

Example

Es folgt das Programm, das den angegebenen Satz mit dem Token markiert WhitespaceTokenizerKlasse. Speichern Sie dieses Programm in einer Datei mit dem NamenWhitespaceTokenizerExample.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);        
   } 
}

Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie an der Eingabeaufforderung mit den folgenden Befehlen aus:

javac WhitespaceTokenizerExample.java 
java WhitespaceTokenizerExample

Bei der Ausführung liest das obige Programm den angegebenen String (Rohtext), markiert ihn mit einem Token und zeigt die folgende Ausgabe an.

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

TokenizerME-Klasse

OpenNLP verwendet auch ein vordefiniertes Modell, eine Datei mit dem Namen de-token.bin, um die Sätze zu tokenisieren. Es wird trainiert, um die Sätze in einem bestimmten Rohtext zu tokenisieren.

Das TokenizerME Klasse der opennlp.tools.tokenizerDas Paket wird verwendet, um dieses Modell zu laden und den angegebenen Rohtext mithilfe der OpenNLP-Bibliothek zu tokenisieren. Dazu müssen Sie -

  • Laden Sie die en-token.bin Modell mit dem TokenizerModel Klasse.

  • Instanziieren Sie die TokenizerME Klasse.

  • Tokenisieren Sie die Sätze mit dem tokenize() Methode dieser Klasse.

Im Folgenden sind die Schritte aufgeführt, die zum Schreiben eines Programms ausgeführt werden müssen, das die Sätze aus dem angegebenen Rohtext mithilfe von tokenisiert TokenizerME Klasse.

Step 1 - Laden des Modells

Das Modell für die Tokenisierung wird durch die genannte Klasse dargestellt TokenizerModel, die zum Paket gehört opennlp.tools.tokenize.

So laden Sie ein Tokenizer-Modell:

  • Erstelle ein InputStream Objekt des Modells (Instanziieren Sie den FileInputStream und übergeben Sie den Pfad des Modells im String-Format an seinen Konstruktor).

  • Instanziieren Sie die TokenizerModel Klasse und bestehen die InputStream (Objekt) des Modells als Parameter für seinen Konstruktor, wie im folgenden Codeblock gezeigt.

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

Step 2 - Instanziieren der TokenizerME-Klasse

Das TokenizerME Klasse des Pakets opennlp.tools.tokenizeenthält Methoden, um den Rohtext in kleinere Teile (Token) zu zerlegen. Es verwendet Maximum Entropy, um seine Entscheidungen zu treffen.

Instanziieren Sie diese Klasse und übergeben Sie das im vorherigen Schritt erstellte Modellobjekt wie unten gezeigt.

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

Step 3 - Tokenisierung des Satzes

Das tokenize() Methode der TokenizerMEKlasse wird verwendet, um den an sie übergebenen Rohtext zu tokenisieren. Diese Methode akzeptiert eine String-Variable als Parameter und gibt ein Array von Strings (Token) zurück.

Rufen Sie diese Methode auf, indem Sie das String-Format des Satzes wie folgt an diese Methode übergeben.

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

Example

Es folgt das Programm, das den angegebenen Rohtext tokenisiert. Speichern Sie dieses Programm in einer Datei mit dem NamenTokenizerMEExample.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); 
   } 
}

Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie an der Eingabeaufforderung mit den folgenden Befehlen aus:

javac TokenizerMEExample.java 
java TokenizerMEExample

Bei der Ausführung liest das obige Programm den angegebenen String und erkennt die darin enthaltenen Sätze und zeigt die folgende Ausgabe an:

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

Abrufen der Positionen der Token

Wir können auch die Positionen bekommen oder spans der Token mit dem tokenizePos()Methode. Dies ist die Methode der Tokenizer-Schnittstelle des Paketsopennlp.tools.tokenize. Da alle (drei) Tokenizer-Klassen diese Schnittstelle implementieren, finden Sie diese Methode in allen.

Diese Methode akzeptiert den Satz oder Rohtext in Form einer Zeichenfolge und gibt ein Array von Objekten des Typs zurück Span.

Sie können die Positionen der Token mit dem abrufen tokenizePos() Methode wie folgt -

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

Drucken der Positionen (Bereiche)

Die benannte Klasse Span des opennlp.tools.util Paket wird verwendet, um die Start- und End-Ganzzahl von Mengen zu speichern.

Sie können die vom tokenizePos() Methode im Span-Array und drucken Sie sie aus, wie im folgenden Codeblock gezeigt.

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

Token und ihre Positionen zusammen drucken

Das substring() Methode der String-Klasse akzeptiert die begin und die endversetzt und gibt die entsprechende Zeichenfolge zurück. Mit dieser Methode können wir die Token und ihre Bereiche (Positionen) zusammen drucken, wie im folgenden Codeblock gezeigt.

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

Example(SimpleTokenizer)

Es folgt das Programm, das die Token-Bereiche des Rohtextes mit dem abruft SimpleTokenizerKlasse. Außerdem werden die Token zusammen mit ihren Positionen gedruckt. Speichern Sie dieses Programm in einer Datei mit dem NamenSimpleTokenizerSpans.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()));          
   } 
}

Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie an der Eingabeaufforderung mit den folgenden Befehlen aus:

javac SimpleTokenizerSpans.java 
java SimpleTokenizerSpans

Bei der Ausführung liest das obige Programm den angegebenen String (Rohtext), markiert ihn mit einem Token und zeigt die folgende Ausgabe an:

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

Es folgt das Programm, das die Token-Bereiche des Rohtextes mit dem abruft WhitespaceTokenizerKlasse. Außerdem werden die Token zusammen mit ihren Positionen gedruckt. Speichern Sie dieses Programm in einer Datei mit dem NamenWhitespaceTokenizerSpans.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()));        
   } 
}

Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie mit den folgenden Befehlen an der Eingabeaufforderung aus

javac WhitespaceTokenizerSpans.java 
java WhitespaceTokenizerSpans

Bei der Ausführung liest das obige Programm den angegebenen String (Rohtext), markiert ihn mit einem Token und zeigt die folgende Ausgabe an.

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

Es folgt das Programm, das die Token-Bereiche des Rohtextes mit dem abruft TokenizerMEKlasse. Außerdem werden die Token zusammen mit ihren Positionen gedruckt. Speichern Sie dieses Programm in einer Datei mit dem NamenTokenizerMESpans.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()));      
   } 
}

Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie an der Eingabeaufforderung mit den folgenden Befehlen aus:

javac TokenizerMESpans.java 
java TokenizerMESpans

Bei der Ausführung liest das obige Programm den angegebenen String (Rohtext), markiert ihn mit einem Token und zeigt die folgende Ausgabe an:

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

Tokenizer-Wahrscheinlichkeit

Die Methode getTokenProbabilities () der TokenizerME-Klasse wird verwendet, um die Wahrscheinlichkeiten abzurufen, die den letzten Aufrufen der tokenizePos () -Methode zugeordnet sind.

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

Im Folgenden finden Sie das Programm zum Drucken der Wahrscheinlichkeiten, die mit den Aufrufen der tokenizePos () -Methode verbunden sind. Speichern Sie dieses Programm in einer Datei mit dem NamenTokenizerMEProbs.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]);          
   } 
}

Kompilieren Sie die gespeicherte Java-Datei und führen Sie sie an der Eingabeaufforderung mit den folgenden Befehlen aus:

javac TokenizerMEProbs.java 
java TokenizerMEProbs

Bei der Ausführung liest das obige Programm den angegebenen String, markiert die Sätze und druckt sie aus. Darüber hinaus werden auch die Wahrscheinlichkeiten zurückgegeben, die mit den letzten Aufrufen der tokenizerPos () -Methode verknüpft sind.

[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