OpenNLP - Teile der Sprache finden

Mit OpenNLP können Sie auch die Wortarten eines bestimmten Satzes erkennen und ausdrucken. Anstelle des vollständigen Namens der Wortteile verwendet OpenNLP Kurzformen der einzelnen Wortarten. Die folgende Tabelle zeigt die verschiedenen Teile von Reden, die von OpenNLP erkannt wurden, und ihre Bedeutung.

Teile der Rede Bedeutung von Wortarten
NN Substantiv, Singular oder Masse
DT Bestimmer
VB Verb, Grundform
VBD Verb, Vergangenheitsform
VBZ Verb, dritte Person Singular anwesend
IM Präposition oder untergeordnete Konjunktion
NNP Eigenname, Singular
ZU zu
JJ Adjektiv

Markieren der Wortarten

Um die Wortarten eines Satzes zu kennzeichnen, verwendet OpenNLP ein Modell, eine Datei mit dem Namen en-posmaxent.bin. Dies ist ein vordefiniertes Modell, das darauf trainiert ist, die Wortarten des angegebenen Rohtextes zu kennzeichnen.

Das POSTaggerME Klasse der opennlp.tools.postagDas Paket wird verwendet, um dieses Modell zu laden und die Wortarten des angegebenen Rohtextes mithilfe der OpenNLP-Bibliothek zu kennzeichnen. Dazu müssen Sie -

  • Laden Sie die en-pos-maxent.bin Modell mit dem POSModel Klasse.

  • Instanziieren Sie die POSTaggerME Klasse.

  • Tokenisieren Sie den Satz.

  • Generieren Sie die Tags mit tag() Methode.

  • Drucken Sie die Token und Tags mit POSSample Klasse.

Im Folgenden sind die Schritte aufgeführt, die zum Schreiben eines Programms ausgeführt werden müssen, das die Teile der Sprache im angegebenen Rohtext mit dem Tag markiert POSTaggerME Klasse.

Schritt 1: Laden Sie das Modell

Das Modell für die POS-Kennzeichnung wird durch die genannte Klasse dargestellt POSModel, die zum Paket gehört opennlp.tools.postag.

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 POSModel Klasse und bestehen die InputStream (Objekt) des Modells als Parameter für seinen Konstruktor, wie im folgenden Codeblock gezeigt -

//Loading Parts of speech-maxent model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin"); 
POSModel model = new POSModel(inputStream);

Schritt 2: Instanziieren der POSTaggerME-Klasse

Das POSTaggerME Klasse des Pakets opennlp.tools.postagwird verwendet, um die Wortarten des gegebenen Rohtextes vorherzusagen. 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 POSTaggerME class 
POSTaggerME tagger = new POSTaggerME(model);

Schritt 3: Tokenisieren des Satzes

Das tokenize() Methode der whitespaceTokenizerKlasse 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.

Instanziieren Sie die whitespaceTokenizer Klasse und rufen Sie diese Methode auf, indem Sie das String-Format des Satzes an diese Methode übergeben.

//Tokenizing the sentence using WhitespaceTokenizer class  
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
String[] tokens = whitespaceTokenizer.tokenize(sentence);

Schritt 4: Generieren der Tags

Das tag() Methode der whitespaceTokenizerKlasse weist dem Satz von Token POS-Tags zu. Diese Methode akzeptiert ein Array von Token (String) als Parameter und gibt ein Tag (Array) zurück.

Rufen Sie die tag() Methode, indem die im vorherigen Schritt generierten Token an sie übergeben werden.

//Generating tags 
String[] tags = tagger.tag(tokens);

Schritt 5: Drucken der Token und Tags

Das POSSampleKlasse repräsentiert den POS-markierten Satz. Um diese Klasse zu instanziieren, benötigen wir ein Array von Token (des Textes) und ein Array von Tags.

Das toString()Die Methode dieser Klasse gibt den markierten Satz zurück. Instanziieren Sie diese Klasse, indem Sie das Token und die in den vorherigen Schritten erstellten Tag-Arrays übergeben und ihre aufrufentoString() Methode, wie im folgenden Codeblock gezeigt.

//Instantiating the POSSample class 
POSSample sample = new POSSample(tokens, tags); 
System.out.println(sample.toString());

Example

Es folgt das Programm, das die Wortarten in einem bestimmten Rohtext markiert. Speichern Sie dieses Programm in einer Datei mit dem NamenPosTaggerExample.java.

import java.io.FileInputStream; 
import java.io.InputStream;  

import opennlp.tools.postag.POSModel; 
import opennlp.tools.postag.POSSample; 
import opennlp.tools.postag.POSTaggerME; 
import opennlp.tools.tokenize.WhitespaceTokenizer;  

public class PosTaggerExample { 
  
   public static void main(String args[]) throws Exception{ 
    
      //Loading Parts of speech-maxent model       
      InputStream inputStream = new 
         FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin"); 
      POSModel model = new POSModel(inputStream); 
       
      //Instantiating POSTaggerME class 
      POSTaggerME tagger = new POSTaggerME(model); 
       
      String sentence = "Hi welcome to Tutorialspoint"; 
       
      //Tokenizing the sentence using WhitespaceTokenizer class  
      WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
      String[] tokens = whitespaceTokenizer.tokenize(sentence); 
       
      //Generating tags 
      String[] tags = tagger.tag(tokens);
      
      //Instantiating the POSSample class 
      POSSample sample = new POSSample(tokens, tags); 
      System.out.println(sample.toString()); 
   
   } 
}

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

javac PosTaggerExample.java 
java PosTaggerExample

Bei der Ausführung liest das obige Programm den angegebenen Text und erkennt die Wortarten dieser Sätze und zeigt sie an, wie unten gezeigt.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB

POS-Tagger-Leistung

Es folgt das Programm, das die Wortarten eines bestimmten Rohtextes markiert. Es überwacht auch die Leistung und zeigt die Leistung des Taggers an. Speichern Sie dieses Programm in einer Datei mit dem NamenPosTagger_Performance.java.

import java.io.FileInputStream; 
import java.io.InputStream;  

import opennlp.tools.cmdline.PerformanceMonitor; 
import opennlp.tools.postag.POSModel; 
import opennlp.tools.postag.POSSample; 
import opennlp.tools.postag.POSTaggerME; 
import opennlp.tools.tokenize.WhitespaceTokenizer;  

public class PosTagger_Performance { 
   public static void main(String args[]) throws Exception{ 
      //Loading Parts of speech-maxent model       
      InputStream inputStream = new 
         FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin"); 
      POSModel model = new POSModel(inputStream); 
       
      //Creating an object of WhitespaceTokenizer class  
      WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
      
      //Tokenizing the sentence 
      String sentence = "Hi welcome to Tutorialspoint"; 
      String[] tokens = whitespaceTokenizer.tokenize(sentence); 
       
      //Instantiating POSTaggerME class 
      POSTaggerME tagger = new POSTaggerME(model); 
       
      //Generating tags 
      String[] tags = tagger.tag(tokens); 
       
      //Instantiating POSSample class       
      POSSample sample = new POSSample(tokens, tags); 
      System.out.println(sample.toString()); 
       
      //Monitoring the performance of POS tagger 
      PerformanceMonitor perfMon = new PerformanceMonitor(System.err, "sent"); 
      perfMon.start(); 
      perfMon.incrementCounter(); 
      perfMon.stopAndPrintFinalResult();      
   } 
}

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

javac PosTaggerExample.java 
java PosTaggerExample

Bei der Ausführung liest das obige Programm den angegebenen Text und markiert die Wortarten dieser Sätze und zeigt sie an. Darüber hinaus wird die Leistung des POS-Taggers überwacht und angezeigt.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB  
Average: 0.0 sent/s  
Total: 1 sent 
Runtime: 0.0s

POS-Tagger-Wahrscheinlichkeit

Das probs() Methode der POSTaggerME Klasse wird verwendet, um die Wahrscheinlichkeiten für jedes Tag des kürzlich markierten Satzes zu finden.

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

Das folgende Programm zeigt die Wahrscheinlichkeiten für jedes Tag des letzten markierten Satzes an. Speichern Sie dieses Programm in einer Datei mit dem NamenPosTaggerProbs.java.

import java.io.FileInputStream; 
import java.io.InputStream;  

import opennlp.tools.postag.POSModel; 
import opennlp.tools.postag.POSSample; 
import opennlp.tools.postag.POSTaggerME; 
import opennlp.tools.tokenize.WhitespaceTokenizer;  

public class PosTaggerProbs { 
   
   public static void main(String args[]) throws Exception{ 
      
      //Loading Parts of speech-maxent model       
      InputStream inputStream = new FileInputStream("C:/OpenNLP_mdl/en-pos-maxent.bin"); 
      POSModel model = new POSModel(inputStream); 
       
      //Creating an object of WhitespaceTokenizer class  
      WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
       
      //Tokenizing the sentence 
      String sentence = "Hi welcome to Tutorialspoint"; 
      String[] tokens = whitespaceTokenizer.tokenize(sentence); 
       
      //Instantiating POSTaggerME class 
      POSTaggerME tagger = new POSTaggerME(model); 
             
      //Generating tags 
      String[] tags = tagger.tag(tokens);       
      
      //Instantiating the POSSample class 
      POSSample sample = new POSSample(tokens, tags);  
      System.out.println(sample.toString());
      
      //Probabilities for each tag of the last tagged sentence. 
      double [] probs = tagger.probs();       
      System.out.println("  ");       
      
      //Printing the probabilities  
      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 Rohtext, markiert die Wortarten jedes darin enthaltenen Tokens und zeigt sie an. Darüber hinaus werden die Wahrscheinlichkeiten für jeden Wortteil im angegebenen Satz angezeigt, wie unten gezeigt.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB    
0.6416834779738033 
0.42983612874819177 
0.8584513635863117 
0.4394784478206072