Учебники

OpenNLP — Чанкинг Предложения

Разделение предложения на части означает разделение / разделение предложения на части слов, такие как группы слов и группы глаголов.

Разделение предложения с помощью OpenNLP

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

Пакет opennlp.tools.chunker содержит классы и интерфейсы, которые используются для поиска нерекурсивных синтаксических аннотаций, таких как фрагменты имен существительных.

Вы можете разделить предложение на части, используя метод chunk () класса ChunkerME . Этот метод принимает токены предложения и POS-теги в качестве параметров. Поэтому, прежде чем начинать процесс разбиения на фрагменты, прежде всего вам необходимо токенизировать предложение и генерировать POS-теги его частей.

Чтобы разделить предложение на части с помощью библиотеки OpenNLP, вам необходимо:

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

  • Создать POS-теги для него.

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

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

  • Разделите предложения, используя метод chunk () этого класса.

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

Создать POS-теги для него.

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

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

Разделите предложения, используя метод chunk () этого класса.

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

Шаг 1: Маркировка предложения

Токенизируйте предложения, используя метод tokenize () класса whitespaceTokenizer , как показано в следующем блоке кода.

//Tokenizing the sentence 
String sentence = "Hi welcome to Tutorialspoint";       
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
String[] tokens = whitespaceTokenizer.tokenize(sentence);

Шаг 2: Генерация POS-тегов

Сгенерируйте POS-теги предложения, используя метод tag () класса POSTaggerME , как показано в следующем блоке кода.

//Generating the POS tags 
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");     
POSModel model = new POSModelLoader().load(file);     
//Constructing the tagger 
POSTaggerME tagger = new POSTaggerME(model);        
//Generating tags from the tokens 
String[] tags = tagger.tag(tokens); 

Шаг 3: Загрузка модели

Модель разбиения предложения представлена ​​классом с именем ChunkerModel , который принадлежит пакету opennlp.tools.chunker .

Чтобы загрузить модель определения предложения —

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

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

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

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

//Loading the chunker model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin"); 
ChunkerModel chunkerModel = new ChunkerModel(inputStream);  

Шаг 4: Создание класса chunkerME

Класс chunkerME пакета opennlp.tools.chunker содержит методы для разделения предложений. Это основанный на максимальной энтропии чанкер.

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

//Instantiate the ChunkerME class 
ChunkerME chunkerME = new ChunkerME(chunkerModel); 

Шаг 5: Разделение предложения

Метод chunk () класса ChunkerME используется для разбиения предложений в необработанном тексте, переданном ему. Этот метод принимает два строковых массива, представляющих токены и теги, в качестве параметров.

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

//Generating the chunks 
String result[] = chunkerME.chunk(tokens, tags); 

пример

Ниже приведена программа для разбиения предложений в заданном необработанном тексте. Сохраните эту программу в файле с именем ChunkerExample.java .

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream;  

import opennlp.tools.chunker.ChunkerME; 
import opennlp.tools.chunker.ChunkerModel; 
import opennlp.tools.cmdline.postag.POSModelLoader; 
import opennlp.tools.postag.POSModel; 
import opennlp.tools.postag.POSTaggerME; 
import opennlp.tools.tokenize.WhitespaceTokenizer;  

public class ChunkerExample{ 
   
   public static void main(String args[]) throws IOException { 
      //Tokenizing the sentence 
      String sentence = "Hi welcome to Tutorialspoint";       
      WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
      String[] tokens = whitespaceTokenizer.tokenize(sentence); 
     
      //Generating the POS tags 
      //Load the parts of speech model 
      File file = new File("C:/OpenNLP_models/en-pos-maxent.bin"); 
      POSModel model = new POSModelLoader().load(file);     
      
      //Constructing the tagger 
      POSTaggerME tagger = new POSTaggerME(model);        
      
      //Generating tags from the tokens 
      String[] tags = tagger.tag(tokens);    
    
      //Loading the chunker model 
      InputStream inputStream = new 
         FileInputStream("C:/OpenNLP_models/en-chunker.bin"); 
      ChunkerModel chunkerModel = new ChunkerModel(inputStream);  
      
      //Instantiate the ChunkerME class 
      ChunkerME chunkerME = new ChunkerME(chunkerModel);
       
      //Generating the chunks 
      String result[] = chunkerME.chunk(tokens, tags); 
  
      for (String s : result) 
         System.out.println(s);         
   }    
}      

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

javac ChunkerExample.java 
java ChunkerExample 

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

Loading POS Tagger model ... done (1.040s) 
B-NP 
I-NP 
B-VP 
I-VP

Обнаружение позиций токенов

Мы также можем определить позиции или промежутки блоков, используя метод chunkAsSpans () класса ChunkerME . Этот метод возвращает массив объектов типа Span. Класс с именем Span пакета opennlp.tools.util используется для хранения начального и конечного целого числа наборов.

Вы можете сохранить диапазоны, возвращенные методом chunkAsSpans (), в массиве Span и распечатать их, как показано в следующем блоке кода.

//Generating the tagged chunk spans 
Span[] span = chunkerME.chunkAsSpans(tokens, tags); 
       
for (Span s : span) 
   System.out.println(s.toString()); 

пример

Ниже приводится программа, которая обнаруживает предложения в заданном необработанном тексте. Сохраните эту программу в файле с именем ChunkerSpansEample.java .

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream;  

import opennlp.tools.chunker.ChunkerME; 
import opennlp.tools.chunker.ChunkerModel; 
import opennlp.tools.cmdline.postag.POSModelLoader; 
import opennlp.tools.postag.POSModel; 
import opennlp.tools.postag.POSTaggerME; 
import opennlp.tools.tokenize.WhitespaceTokenizer; 
import opennlp.tools.util.Span;  

public class ChunkerSpansEample{ 
   
   public static void main(String args[]) throws IOException { 
      //Load the parts of speech model 
      File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");     
      POSModel model = new POSModelLoader().load(file); 
       
      //Constructing the tagger 
      POSTaggerME tagger = new POSTaggerME(model); 
  
      //Tokenizing the sentence 
      String sentence = "Hi welcome to Tutorialspoint";       
      WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
      String[] tokens = whitespaceTokenizer.tokenize(sentence); 
       
      //Generating tags from the tokens 
      String[] tags = tagger.tag(tokens);       
   
      //Loading the chunker model 
      InputStream inputStream = new 
         FileInputStream("C:/OpenNLP_models/en-chunker.bin"); 
      ChunkerModel chunkerModel = new ChunkerModel(inputStream);
      ChunkerME chunkerME = new ChunkerME(chunkerModel);       
           
      //Generating the tagged chunk spans 
      Span[] span = chunkerME.chunkAsSpans(tokens, tags); 
       
      for (Span s : span) 
         System.out.println(s.toString());  
   }    
}

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

javac ChunkerSpansEample.java 
java ChunkerSpansEample

При выполнении вышеупомянутая программа считывает данную строку и охватывает фрагменты в ней и отображает следующий вывод:

Loading POS Tagger model ... done (1.059s) 
[0..2) NP 
[2..4) VP 

Определение вероятности чункера

Метод probs () класса ChunkerME возвращает вероятности последней декодированной последовательности.

//Getting the probabilities of the last decoded sequence       
double[] probs = chunkerME.probs(); 

Ниже приведена программа для печати вероятностей последней декодированной последовательности блоком . Сохраните эту программу в файле с именем ChunkerProbsExample.java .

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import opennlp.tools.chunker.ChunkerME; 
import opennlp.tools.chunker.ChunkerModel; 
import opennlp.tools.cmdline.postag.POSModelLoader; 
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME; 
import opennlp.tools.tokenize.WhitespaceTokenizer;  

public class ChunkerProbsExample{ 
   
   public static void main(String args[]) throws IOException { 
      //Load the parts of speech model 
      File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");     
      POSModel model = new POSModelLoader().load(file); 
       
      //Constructing the tagger 
      POSTaggerME tagger = new POSTaggerME(model); 
  
      //Tokenizing the sentence 
      String sentence = "Hi welcome to Tutorialspoint";       
      WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
      String[] tokens = whitespaceTokenizer.tokenize(sentence); 
       
      //Generating tags from the tokens 
      String[] tags = tagger.tag(tokens);       
   
      //Loading the chunker model 
      InputStream inputStream = new 
         FileInputStream("C:/OpenNLP_models/en-chunker.bin"); 
      ChunkerModel cModel = new ChunkerModel(inputStream); 
      ChunkerME chunkerME = new ChunkerME(cModel); 
       
      //Generating the chunk tags 
      chunkerME.chunk(tokens, tags); 
       
      //Getting the probabilities of the last decoded sequence       
      double[] probs = chunkerME.probs(); 
      for(int i = 0; i<probs.length; i++) 
         System.out.println(probs[i]);       
   }    
}   

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

javac ChunkerProbsExample.java 
java ChunkerProbsExample 

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