Учебники

OpenNLP — обнаружение приговора

При обработке естественного языка решение о начале и конце предложений является одной из проблем, требующих решения. Этот процесс известен как S entence Boundary D isambiguation (SBD) или просто разрыв предложения.

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

Обнаружение предложения с использованием Java

Мы можем обнаружить предложения в данном тексте на языке Java, используя регулярные выражения и набор простых правил.

Например, давайте предположим, что точка, знак вопроса или восклицательный знак заканчивают предложение в данном тексте, а затем мы можем разделить предложение с помощью метода split () класса String . Здесь мы должны передать регулярное выражение в формате String.

Ниже приводится программа, которая определяет предложения в данном тексте с использованием регулярных выражений Java (метод split) . Сохраните эту программу в файле с именем SentenceDetection_RE.java .

public class SentenceDetection_RE {  
   public static void main(String args[]){ 
     
      String sentence = " Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
     
      String simple = "[.?!]";      
      String[] splitString = (sentence.split(simple));     
      for (String string : splitString)   
         System.out.println(string);      
   } 
}

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

javac SentenceDetection_RE.java 
java SentenceDetection_RE

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

Hi 
How are you 
Welcome to Tutorialspoint 
We provide free tutorials on various technologies

Обнаружение предложения с использованием OpenNLP

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

Пакет opennlp.tools.sentdetect содержит классы и интерфейсы, которые используются для выполнения задачи обнаружения предложений.

Чтобы обнаружить предложение с использованием библиотеки OpenNLP, вам необходимо —

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

  • Создание экземпляра класса SentenceDetectorME .

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

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

Создание экземпляра класса SentenceDetectorME .

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

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

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

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

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

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

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

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

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

//Loading sentence detector model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/ensent.bin"); 
SentenceModel model = new SentenceModel(inputStream);

Шаг 2: создание класса SentenceDetectorME

Класс SentenceDetectorME пакета opennlp.tools.sentdetect содержит методы для разделения необработанного текста на предложения. Этот класс использует модель максимальной энтропии для оценки символов конца предложения в строке, чтобы определить, означают ли они конец предложения.

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

//Instantiating the SentenceDetectorME class 
SentenceDetectorME detector = new SentenceDetectorME(model);

Шаг 3: Определение предложения

Метод sentDetect () класса SentenceDetectorME используется для обнаружения предложений в необработанном тексте, переданном ему. Этот метод принимает строковую переменную в качестве параметра.

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

//Detecting the sentence 
String sentences[] = detector.sentDetect(sentence);

пример

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

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

import opennlp.tools.sentdetect.SentenceDetectorME; 
import opennlp.tools.sentdetect.SentenceModel;  

public class SentenceDetectionME { 
  
   public static void main(String args[]) throws Exception { 
   
      String sentence = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
       
      //Loading sentence detector model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin"); 
      SentenceModel model = new SentenceModel(inputStream); 
       
      //Instantiating the SentenceDetectorME class 
      SentenceDetectorME detector = new SentenceDetectorME(model);  
    
      //Detecting the sentence
      String sentences[] = detector.sentDetect(sentence); 
    
      //Printing the sentences 
      for(String sent : sentences)        
         System.out.println(sent);  
   } 
}

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

javac SentenceDetectorME.java 
java SentenceDetectorME

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

Hi. How are you? 
Welcome to Tutorialspoint. 
We provide free tutorials on various technologies

Выявление положений приговоров

Мы также можем определить позиции предложений, используя метод sentPosDetect () класса SentenceDetectorME .

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

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

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

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

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

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

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

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

//Loading sentence detector model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin"); 
SentenceModel model = new SentenceModel(inputStream);

Шаг 2: создание класса SentenceDetectorME

Класс SentenceDetectorME пакета opennlp.tools.sentdetect содержит методы для разделения необработанного текста на предложения. Этот класс использует модель максимальной энтропии для оценки символов конца предложения в строке, чтобы определить, означают ли они конец предложения.

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

//Instantiating the SentenceDetectorME class 
SentenceDetectorME detector = new SentenceDetectorME(model); 

Шаг 3: Определение позиции предложения

Метод sentPosDetect () класса SentenceDetectorME используется для определения позиций предложений в необработанном тексте, переданном ему. Этот метод принимает строковую переменную в качестве параметра.

Вызовите этот метод, передав формат строки предложения в качестве параметра этому методу.

//Detecting the position of the sentences in the paragraph  
Span[] spans = detector.sentPosDetect(sentence); 

Шаг 4: Печать интервалов предложений

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

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

//Printing the sentences and their spans of a sentence 
for (Span span : spans)         
System.out.println(paragraph.substring(span); 

пример

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

import java.io.FileInputStream; 
import java.io.InputStream; 
  
import opennlp.tools.sentdetect.SentenceDetectorME; 
import opennlp.tools.sentdetect.SentenceModel; 
import opennlp.tools.util.Span;

public class SentencePosDetection { 
  
   public static void main(String args[]) throws Exception { 
   
      String paragraph = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
       
      //Loading sentence detector model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin"); 
      SentenceModel model = new SentenceModel(inputStream); 
       
      //Instantiating the SentenceDetectorME class 
      SentenceDetectorME detector = new SentenceDetectorME(model);  
       
      //Detecting the position of the sentences in the raw text 
      Span spans[] = detector.sentPosDetect(paragraph); 
       
      //Printing the spans of the sentences in the paragraph 
      for (Span span : spans)         
         System.out.println(span);  
   } 
}

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

javac SentencePosDetection.java 
java SentencePosDetection

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

[0..16) 
[17..43) 
[44..93)

Предложения вместе с их позициями

Метод substring () класса String принимает смещения начала и конца и возвращает соответствующую строку. Мы можем использовать этот метод для печати предложений и их интервалов (позиций), как показано в следующем блоке кода.

for (Span span : spans)         
   System.out.println(sen.substring(span.getStart(), span.getEnd())+" "+ span); 

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

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

import opennlp.tools.sentdetect.SentenceDetectorME; 
import opennlp.tools.sentdetect.SentenceModel; 
import opennlp.tools.util.Span; 
   
public class SentencesAndPosDetection { 
  
   public static void main(String args[]) throws Exception { 
     
      String sen = "Hi. How are you? Welcome to Tutorialspoint." 
         + " We provide free tutorials on various technologies"; 
      //Loading a sentence model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin"); 
      SentenceModel model = new SentenceModel(inputStream); 
       
      //Instantiating the SentenceDetectorME class 
      SentenceDetectorME detector = new SentenceDetectorME(model);  
       
      //Detecting the position of the sentences in the paragraph  
      Span[] spans = detector.sentPosDetect(sen);  
      
      //Printing the sentences and their spans of a paragraph 
      for (Span span : spans)         
         System.out.println(sen.substring(span.getStart(), span.getEnd())+" "+ span);  
   } 
}  

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

javac SentencesAndPosDetection.java 
java SentencesAndPosDetection

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

Hi. How are you? [0..16) 
Welcome to Tutorialspoint. [17..43)  
We provide free tutorials on various technologies [44..93)

Определение вероятности приговора

Метод getSentenceProbabilities () класса SentenceDetectorME возвращает вероятности, связанные с самыми последними вызовами метода sentDetect ().

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

Ниже приведена программа для печати вероятностей, связанных с вызовами метода sentDetect (). Сохраните эту программу в файле с именем SentenceDetectionMEProbs.java .

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

import opennlp.tools.sentdetect.SentenceDetectorME; 
import opennlp.tools.sentdetect.SentenceModel;  

public class SentenceDetectionMEProbs { 
  
   public static void main(String args[]) throws Exception { 
   
      String sentence = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
       
      //Loading sentence detector model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
      SentenceModel model = new SentenceModel(inputStream); 
       
      //Instantiating the SentenceDetectorME class
      SentenceDetectorME detector = new SentenceDetectorME(model);  
      
      //Detecting the sentence 
      String sentences[] = detector.sentDetect(sentence); 
    
      //Printing the sentences 
      for(String sent : sentences)        
         System.out.println(sent);   
         
      //Getting the probabilities of the last decoded sequence       
      double[] probs = detector.getSentenceProbabilities(); 
       
      System.out.println("  "); 
       
      for(int i = 0; i<probs.length; i++) 
         System.out.println(probs[i]); 
   } 
}       

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

javac SentenceDetectionMEProbs.java 
java SentenceDetectionMEProbs

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