OpenNLP - поиск частей речи

Используя OpenNLP, вы также можете определять части речи в данном предложении и распечатывать их. Вместо полного названия частей речи OpenNLP использует краткие формы каждой части речи. В следующей таблице показаны различные части речей, обнаруженных OpenNLP, и их значения.

Части речи Значение частей речи
NN Существительное, единственное число или масса
DT Определитель
VB Глагол, основная форма
VBD Глагол, прошедшее время
ВБЗ Глагол в третьем лице единственного числа присутствует
В Предлог или подчинительный союз
NNP Имя собственное, единственное число
К к
JJ Имя прилагательное

Добавление тегов к частям речи

Чтобы пометить части речи предложения, OpenNLP использует модель, файл с именем en-posmaxent.bin. Это предопределенная модель, которая обучена помечать части речи данного необработанного текста.

В POSTaggerME класс opennlp.tools.postagпакет используется для загрузки этой модели и тегирования частей речи данного необработанного текста с помощью библиотеки OpenNLP. Для этого вам необходимо -

  • Загрузите en-pos-maxent.bin модель с использованием POSModel класс.

  • Создайте экземпляр POSTaggerME класс.

  • Обозначьте предложение.

  • Создайте теги, используя tag() метод.

  • Распечатайте токены и теги, используя POSSample класс.

Ниже приведены шаги, которые необходимо выполнить, чтобы написать программу, которая помечает части речи в данном исходном тексте с помощью POSTaggerME класс.

Шаг 1. Загрузите модель

Модель для маркировки POS представлена ​​классом с именем POSModel, который принадлежит пакету opennlp.tools.postag.

Чтобы загрузить модель токенизатора -

  • Создать InputStream объект модели (создайте экземпляр FileInputStream и передайте путь к модели в строковом формате ее конструктору).

  • Создайте экземпляр POSModel класс и пройти InputStream (объект) модели в качестве параметра для ее конструктора, как показано в следующем блоке кода -

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

Шаг 2. Создание экземпляра класса POSTaggerME

В POSTaggerME класс пакета opennlp.tools.postagиспользуется для предсказания частей речи данного исходного текста. Он использует максимальную энтропию для принятия решений.

Создайте экземпляр этого класса и передайте объект модели, созданный на предыдущем шаге, как показано ниже -

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

Шаг 3. Обозначение предложения

В tokenize() метод whitespaceTokenizerКласс используется для токенизации переданного ему необработанного текста. Этот метод принимает в качестве параметра строковую переменную и возвращает массив строк (токенов).

Создайте экземпляр whitespaceTokenizer class и вызвать этот метод, передав ему строковый формат предложения.

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

Шаг 4: Создание тегов

В tag() метод whitespaceTokenizerclass назначает теги POS предложению токенов. Этот метод принимает в качестве параметра массив токенов (String) и возвращает тег (массив).

Вызвать tag() путем передачи ему токенов, сгенерированных на предыдущем шаге.

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

Шаг 5. Распечатайте токены и теги

В POSSampleclass представляет предложение с тегами POS. Чтобы создать экземпляр этого класса, нам потребуется массив токенов (текста) и массив тегов.

В toString()метод этого класса возвращает помеченное предложение. Создайте экземпляр этого класса, передав токен и массивы тегов, созданные на предыдущих шагах, и вызовите егоtoString() , как показано в следующем блоке кода.

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

Example

Ниже приводится программа, которая помечает части речи в заданном необработанном тексте. Сохраните эту программу в файл с названиемPosTaggerExample.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()); 
   
   } 
}

Скомпилируйте и выполните сохраненный файл Java из командной строки, используя следующие команды:

javac PosTaggerExample.java 
java PosTaggerExample

При выполнении вышеупомянутая программа считывает заданный текст и определяет части речи этих предложений и отображает их, как показано ниже.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB

Производительность POS Tagger

Ниже приводится программа, которая помечает части речи данного исходного текста. Он также контролирует производительность и отображает производительность устройства для тегов. Сохраните эту программу в файл с названиемPosTagger_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();      
   } 
}

Скомпилируйте и выполните сохраненный файл Java из командной строки, используя следующие команды:

javac PosTaggerExample.java 
java PosTaggerExample

При выполнении указанная выше программа считывает заданный текст, помечает части речи этих предложений и отображает их. Кроме того, он также контролирует работу устройства тегов POS и отображает его.

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

Вероятность POS Tagger

В probs() метод POSTaggerME class используется для нахождения вероятностей для каждого тега недавно помеченного предложения.

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

Ниже приводится программа, которая отображает вероятности для каждого тега последнего помеченного предложения. Сохраните эту программу в файл с названиемPosTaggerProbs.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]); 
   } 
}

Скомпилируйте и выполните сохраненный файл Java из командной строки, используя следующие команды:

javac TokenizerMEProbs.java 
java TokenizerMEProbs

При выполнении указанная выше программа считывает данный необработанный текст, помечает части речи каждого токена в нем и отображает их. Кроме того, он также отображает вероятности для каждой части речи в данном предложении, как показано ниже.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB    
0.6416834779738033 
0.42983612874819177 
0.8584513635863117 
0.4394784478206072