OpenNLP - znajdowanie części mowy

Korzystając z OpenNLP, możesz także wykryć części mowy danego zdania i je wydrukować. Zamiast pełnych nazw części mowy, OpenNLP używa krótkich form każdej części mowy. Poniższa tabela przedstawia różne części przemówień wykryte przez OpenNLP i ich znaczenie.

Części mowy Znaczenie części mowy
NN Rzeczownik, liczba pojedyncza lub masa
DT Determiner
VB Czasownik, forma podstawowa
VBD Czasownik, czas przeszły
VBZ Czasownik, trzecia osoba liczby pojedynczej obecny
W Przyimek lub koniunkcja podrzędna
NNP Rzeczownik w liczbie pojedynczej
DO do
JJ Przymiotnik

Oznaczanie części mowy

Aby oznaczyć części mowy w zdaniu, OpenNLP używa modelu, pliku o nazwie en-posmaxent.bin. Jest to predefiniowany model, który jest uczony do oznaczania części mowy danego surowego tekstu.

Plik POSTaggerME klasa opennlp.tools.postagpakiet służy do wczytywania tego modelu i oznaczania części mowy danego surowego tekstu za pomocą biblioteki OpenNLP. Aby to zrobić, musisz -

  • Załaduj en-pos-maxent.bin model przy użyciu POSModel klasa.

  • Utwórz wystąpienie POSTaggerME klasa.

  • Tokenizuj zdanie.

  • Wygeneruj tagi za pomocą tag() metoda.

  • Wydrukuj tokeny i tagi za pomocą POSSample klasa.

Poniżej przedstawiono kroki, które należy wykonać, aby napisać program, który oznacza części mowy w danym surowym tekście przy użyciu rozszerzenia POSTaggerME klasa.

Krok 1: Załaduj model

Model oznaczania punktów sprzedaży jest reprezentowany przez nazwaną klasę POSModel, który należy do pakietu opennlp.tools.postag.

Aby załadować model tokenizera -

  • Stworzyć InputStream obiekt modelu (Utwórz wystąpienie FileInputStream i przekaż ścieżkę modelu w formacie String do jego konstruktora).

  • Utwórz wystąpienie POSModel klasę i zdaj InputStream (obiekt) modelu jako parametr jego konstruktora, jak pokazano w poniższym bloku kodu -

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

Krok 2: Tworzenie wystąpienia klasy POSTaggerME

Plik POSTaggerME klasa pakietu opennlp.tools.postagsłuży do przewidywania części mowy danego surowego tekstu. Do podejmowania decyzji używa maksymalnej entropii.

Utwórz wystąpienie tej klasy i przekaż obiekt modelu utworzony w poprzednim kroku, jak pokazano poniżej -

//Instantiating POSTaggerME class 
POSTaggerME tagger = new POSTaggerME(model);

Krok 3: Tokenizacja wyroku

Plik tokenize() metoda whitespaceTokenizerklasa jest używana do tokenizacji przekazanego do niej surowego tekstu. Ta metoda przyjmuje zmienną String jako parametr i zwraca tablicę Strings (tokenów).

Utwórz wystąpienie whitespaceTokenizer class i wywołaj tę metodę, przekazując format String zdania do tej metody.

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

Krok 4: Generowanie tagów

Plik tag() metoda whitespaceTokenizerclass przypisuje tagi POS do zdania tokenów. Ta metoda przyjmuje tablicę tokenów (String) jako parametr i zwraca tag (tablicę).

Wywołaj tag() poprzez przekazanie do niej tokenów wygenerowanych w poprzednim kroku.

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

Krok 5: Drukowanie tokenów i tagów

Plik POSSampleklasa reprezentuje zdanie oznaczone tagiem POS. Aby utworzyć instancję tej klasy, wymagalibyśmy tablicy tokenów (tekstu) i tablicy tagów.

Plik toString()metoda tej klasy zwraca otagowane zdanie. Utwórz wystąpienie tej klasy, przekazując token i tablice tagów utworzone w poprzednich krokach i wywołaj jegotoString() metoda, jak pokazano w poniższym bloku kodu.

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

Example

Poniżej znajduje się program, który oznacza części mowy w danym surowym tekście. Zapisz ten program w pliku o nazwiePosTaggerExample.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()); 
   
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac PosTaggerExample.java 
java PosTaggerExample

Podczas wykonywania powyższy program czyta podany tekst i wykrywa części mowy tych zdań i wyświetla je, jak pokazano poniżej.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB

Wydajność POS Taggera

Poniżej znajduje się program, który oznacza fragmenty mowy danego surowego tekstu. Monitoruje również wydajność i wyświetla wydajność taggera. Zapisz ten program w pliku o nazwiePosTagger_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();      
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac PosTaggerExample.java 
java PosTaggerExample

Powyższy program podczas wykonywania odczytuje podany tekst i taguje części mowy tych zdań i wyświetla je. Ponadto monitoruje również wydajność taggera POS i wyświetla go.

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

Prawdopodobieństwo Taggera POS

Plik probs() metoda POSTaggerME class służy do znajdowania prawdopodobieństw dla każdego znacznika ostatnio oznaczonego zdania.

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

Poniżej znajduje się program, który wyświetla prawdopodobieństwa dla każdego znacznika ostatniego oznaczonego zdania. Zapisz ten program w pliku o nazwiePosTaggerProbs.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]); 
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac TokenizerMEProbs.java 
java TokenizerMEProbs

Podczas wykonywania powyższy program odczytuje podany surowy tekst, oznacza części mowy każdego tokena w nim i wyświetla je. Ponadto wyświetla również prawdopodobieństwa dla każdej części mowy w danym zdaniu, jak pokazano poniżej.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB    
0.6416834779738033 
0.42983612874819177 
0.8584513635863117 
0.4394784478206072