Учебники

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

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

Части речи Значение частей речи
Н.Н. Существительное, единственное или массовое
DT детерминанта
VB Глагол, базовая форма
ВБД Глагол прошедшего времени
VBZ Глагол, от третьего лица единственное настоящее
В Предлог или подчиняющее соединение
ННП Имя собственное, единственное число
К в
JJ Имя прилагательное

Пометка частей речи

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

Класс POSTaggerME пакета opennlp.tools.postag используется для загрузки этой модели и маркировки частей речи данного необработанного текста с использованием библиотеки OpenNLP. Для этого вам нужно –

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

  • Создайте класс POSTaggerME .

  • Токенизируйте предложение.

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

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

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

Создайте класс POSTaggerME .

Токенизируйте предложение.

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

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

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

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

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

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

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

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

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

Создайте экземпляр класса 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 используется для токенизации необработанного текста, переданного ему. Этот метод принимает переменную String в качестве параметра и возвращает массив строк (токенов).

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

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

Шаг 4: Генерация тегов

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

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

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

Шаг 5: Печать токенов и тегов

Класс POSSample представляет предложение с тегом POS. Для создания экземпляра этого класса нам потребуется массив токенов (текста) и массив тегов.

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

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

пример

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

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

//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

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