OpenNLP - Краткое руководство

НЛП - это набор инструментов, используемых для получения значимой и полезной информации из источников на естественном языке, таких как веб-страницы и текстовые документы.

Что такое открытое НЛП?

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

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

Особенности OpenNLP

Ниже приведены примечательные особенности OpenNLP:

  • Named Entity Recognition (NER) - Open NLP поддерживает NER, с помощью которого вы можете извлекать названия мест, людей и вещей даже во время обработки запросов.

  • Summarize - Использование summarize функция, вы можете резюмировать абзацы, статьи, документы или их собрание в НЛП.

  • Searching - В OpenNLP заданная строка поиска или ее синонимы могут быть идентифицированы в данном тексте, даже если данное слово изменено или написано с ошибкой.

  • Tagging (POS) - Тегирование в NLP используется для разделения текста на различные грамматические элементы для дальнейшего анализа.

  • Translation - В НЛП перевод помогает переводить один язык на другой.

  • Information grouping - Эта опция в НЛП группирует текстовую информацию в содержимом документа, как и Части речи.

  • Natural Language Generation - Он используется для создания информации из базы данных и автоматизации информационных отчетов, таких как анализ погоды или медицинские отчеты.

  • Feedback Analysis - Как следует из названия, НЛП собирает различные типы отзывов от людей относительно продуктов, чтобы проанализировать, насколько хорошо продукт завоевывает их сердца.

  • Speech recognition - Хотя анализировать человеческую речь сложно, в НЛП есть некоторые встроенные функции для выполнения этого требования.

Открыть NLP API

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

В дополнение к этим задачам мы также можем обучать и оценивать наши собственные модели для любой из этих задач.

OpenNLP CLI

В дополнение к библиотеке OpenNLP также предоставляет интерфейс командной строки (CLI), где мы можем обучать и оценивать модели. Мы обсудим эту тему подробно в последней главе этого руководства.

Открытые модели НЛП

Для выполнения различных задач НЛП OpenNLP предоставляет набор предопределенных моделей. В этот набор входят модели для разных языков.

Скачивание моделей

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

Step 1 - Откройте индексную страницу моделей OpenNLP, щелкнув следующую ссылку - http://opennlp.sourceforge.net/models-1.5/.

Step 2- Перейдя по данной ссылке, вы увидите список компонентов на разных языках и ссылки для их загрузки. Здесь вы можете получить список всех предопределенных моделей, предоставляемых OpenNLP.

Загрузите все эти модели в папку C:/OpenNLP_models/>, щелкнув соответствующие ссылки. Все эти модели зависят от языка, и при их использовании вы должны убедиться, что язык модели совпадает с языком входного текста.

История OpenNLP

  • В 2010 году OpenNLP вошел в инкубационный период Apache.

  • В 2011 году был выпущен Apache OpenNLP 1.5.2 Incubating, и в том же году он стал проектом Apache верхнего уровня.

  • В 2015 году был выпущен OpenNLP 1.6.0.

В этой главе мы обсудим, как вы можете настроить среду OpenNLP в своей системе. Начнем с процесса установки.

Установка OpenNLP

Ниже приведены шаги для загрузки Apache OpenNLP library в вашей системе.

Step 1 - Откройте домашнюю страницу Apache OpenNLP нажав на следующую ссылку - https://opennlp.apache.org/.

Step 2 - Теперь нажмите на Downloadsссылка. При нажатии вы будете перенаправлены на страницу, где вы можете найти различные зеркала, которые перенаправят вас в каталог распространения Apache Software Foundation.

Step 3- На этой странице вы можете найти ссылки для загрузки различных дистрибутивов Apache. Просмотрите их, найдите дистрибутив OpenNLP и щелкните его.

Step 4 - При нажатии вы будете перенаправлены в каталог, где вы можете увидеть индекс дистрибутива OpenNLP, как показано ниже.

Щелкните последнюю версию из доступных дистрибутивов.

Step 5- Каждый дистрибутив предоставляет исходные и двоичные файлы библиотеки OpenNLP в различных форматах. Загрузите исходные и двоичные файлы,apache-opennlp-1.6.0-bin.zip и apache-opennlp1.6.0-src.zip (для Windows).

Установка пути к классам

После загрузки библиотеки OpenNLP необходимо указать ее путь к binкаталог. Предположим, вы загрузили библиотеку OpenNLP на диск E вашей системы.

Теперь следуйте инструкциям, приведенным ниже -

Step 1 - Щелкните правой кнопкой мыши «Мой компьютер» и выберите «Свойства».

Step 2 - Нажмите кнопку «Переменные среды» на вкладке «Дополнительно».

Step 3 - Выберите path переменную и щелкните Edit кнопку, как показано на следующем снимке экрана.

Step 4 - В окне «Редактировать переменную среды» щелкните значок New кнопку и добавьте путь к каталогу OpenNLP E:\apache-opennlp-1.6.0\bin и щелкните OK кнопку, как показано на следующем снимке экрана.

Установка Eclipse

Вы можете установить среду Eclipse для библиотеки OpenNLP, установив параметр Build path в файлы JAR или с помощью pom.xml.

Установка пути сборки к файлам JAR

Следуйте инструкциям ниже, чтобы установить OpenNLP в Eclipse -

Step 1 - Убедитесь, что в вашей системе установлена ​​среда Eclipse.

Step 2- Откройте Eclipse. Щелкните Файл → Создать → Открыть новый проект, как показано ниже.

Step 3 - Вы получите New Projectволшебник. В этом мастере выберите проект Java и продолжите, нажав кнопкуNext кнопка.

Step 4 - Далее вы получите New Java Project wizard. Здесь вам нужно создать новый проект и нажать кнопкуNext кнопку, как показано ниже.

Step 5 - После создания нового проекта щелкните по нему правой кнопкой мыши, выберите Build Path и нажмите Configure Build Path.

Step 6 - Далее вы получите Java Build Pathволшебник. Здесь нажмитеAdd External JARs кнопку, как показано ниже.

Step 7 - Выберите файлы jar opennlp-tools-1.6.0.jar и opennlp-uima-1.6.0.jar расположен в lib папка apache-opennlp-1.6.0 folder.

При нажатии на Open кнопку на приведенном выше экране, выбранные файлы будут добавлены в вашу библиотеку.

При нажатии OK, вы успешно добавите необходимые файлы JAR в текущий проект и сможете проверить эти добавленные библиотеки, развернув библиотеки, на которые имеются ссылки, как показано ниже.

Использование pom.xml

Преобразуйте проект в проект Maven и добавьте в него следующий код. pom.xml.

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
   <modelVersion>4.0.0</modelVersion> 
   <groupId>myproject</groupId> 
   <artifactId>myproject</artifactId> 
   <version>0.0.1-SNAPSHOT</version> 
   <build> 
      <sourceDirectory>src</sourceDirectory> 
      <plugins> 
         <plugin> 
            <artifactId>maven-compiler-plugin</artifactId> 
            <version>3.5.1</version> 
            <configuration> 
               <source>1.8</source> 
               <target>1.8</target> 
            </configuration> 
         </plugin> 
      </plugins> 
   </build> 
   <dependencies>  
      <dependency> 
         <groupId>org.apache.opennlp</groupId> 
         <artifactId>opennlp-tools</artifactId> 
         <version>1.6.0</version> 
     </dependency> 
     <dependency> 
         <groupId>org.apache.opennlp</groupId> 
         <artifactId>opennlp-uima</artifactId> 
         <version>1.6.0</version> 
      </dependency>      
  </dependencies>  
</project>

В этой главе мы обсудим классы и методы, которые мы будем использовать в последующих главах этого руководства.

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

SentenceModel класс

Этот класс представляет предопределенную модель, которая используется для обнаружения предложений в данном исходном тексте. Этот класс принадлежит пакетуopennlp.tools.sentdetect.

Конструктор этого класса принимает InputStream объект файла модели детектора предложений (en-sent.bin).

SentenceDetectorME класс

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

Ниже приведены важные методы этого класса.

S.No Методы и описание
1

sentDetect()

Этот метод используется для обнаружения предложений в переданном ему необработанном тексте. Он принимает переменную String в качестве параметра и возвращает массив String, содержащий предложения из заданного необработанного текста.

2

sentPosDetect()

Этот метод используется для определения позиций предложений в данном тексте. Этот метод принимает строковую переменную, представляющую предложение, и возвращает массив объектов типаSpan.

Класс с именем Span из opennlp.tools.util package используется для хранения начального и конечного целых чисел наборов.

3

getSentenceProbabilities()

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

Токенизация

TokenizerModel класс

Этот класс представляет предопределенную модель, которая используется для разметки данного предложения. Этот класс принадлежит пакетуopennlp.tools.tokenizer.

Конструктор этого класса принимает InputStream объект файла модели токенизатора (entoken.bin).

Классы

Для выполнения токенизации библиотека OpenNLP предоставляет три основных класса. Все три класса реализуют интерфейс под названиемTokenizer.

S.No Классы и описание
1

SimpleTokenizer

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

2

WhitespaceTokenizer

Этот класс использует пробелы для токенизации данного текста.

3

TokenizerME

Этот класс преобразует необработанный текст в отдельные токены. Он использует максимальную энтропию для принятия решений.

Эти классы содержат следующие методы.

S.No Методы и описание
1

tokenize()

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

2

sentPosDetect()

Этот метод используется для получения позиций или промежутков токенов. Он принимает предложение (или) необработанный текст в виде строки и возвращает массив объектов типаSpan.

В дополнение к двум вышеупомянутым методам, TokenizerME класс имеет getTokenProbabilities() метод.

S.No Методы и описание
1

getTokenProbabilities()

Этот метод используется для получения вероятностей, связанных с самыми последними вызовами tokenizePos() метод.

ИмяEntityRecognition

TokenNameFinderModel класс

Этот класс представляет предопределенную модель, которая используется для поиска названных сущностей в данном предложении. Этот класс принадлежит пакетуopennlp.tools.namefind.

Конструктор этого класса принимает InputStream объект файла модели поиска имен (enner-person.bin).

NameFinderME класс

Класс принадлежит пакету opennlp.tools.namefindи он содержит методы для выполнения задач NER. Этот класс использует модель максимальной энтропии для поиска названных сущностей в заданном исходном тексте.

S.No Методы и описание
1

find()

Этот метод используется для обнаружения имен в необработанном тексте. Он принимает в качестве параметра строковую переменную, представляющую необработанный текст, и возвращает массив объектов типа Span.

2

probs()

Этот метод используется для получения вероятностей последней декодированной последовательности.

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

POSModel класс

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

Конструктор этого класса принимает InputStream объект файла модели pos-tagger (enpos-maxent.bin).

POSTaggerME класс

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

S.No Методы и описание
1

tag()

Этот метод используется для присвоения предложения токенов POS-тегам. Этот метод принимает в качестве параметра массив токенов (String) и возвращает теги (массив).

2

getSentenceProbabilities()

Этот метод используется для получения вероятностей для каждого тега недавно помеченного предложения.

Разбор предложения

ParserModel класс

Этот класс представляет собой предопределенную модель, которая используется для анализа данного предложения. Этот класс принадлежит пакетуopennlp.tools.parser.

Конструктор этого класса принимает InputStream объект файла модели парсера (en-parserchunking.bin).

Класс Parser Factory

Этот класс принадлежит пакету opennlp.tools.parser и используется для создания парсеров.

S.No Методы и описание
1

create()

Это статический метод, который используется для создания объекта парсера. Этот метод принимает объект Filestream файла модели анализатора.

ParserTool класс

Этот класс принадлежит к opennlp.tools.cmdline.parser package и он используется для анализа содержимого.

S.No Методы и описание
1

parseLine()

Этот метод ParserToolКласс используется для анализа необработанного текста в OpenNLP. Этот метод принимает -

  • Строковая переменная, представляющая анализируемый текст.
  • Объект парсера.
  • Целое число, представляющее количество выполняемых анализов.

Разбивка

ChunkerModel класс

Этот класс представляет собой предопределенную модель, которая используется для разделения предложения на более мелкие части. Этот класс принадлежит пакетуopennlp.tools.chunker.

Конструктор этого класса принимает InputStream объект chunker файл модели (enchunker.bin).

ChunkerME класс

Этот класс принадлежит пакету с именем opennlp.tools.chunker и используется для разделения данного предложения на более мелкие части.

S.No Методы и описание
1

chunk()

Этот метод используется для разделения данного предложения на более мелкие части. Он принимает символы предложения иPискусство Oж Speech теги как параметры.

2

probs()

Этот метод возвращает вероятности последней декодированной последовательности.

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

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

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

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

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

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

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

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

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

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

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

  • Создайте экземпляр 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);

Example

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

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

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

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

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

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

  • Создайте экземпляр 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 class возвращает массив объектов типа Span. Класс с именем Span of theopennlp.tools.util package используется для хранения начального и конечного целых чисел наборов.

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

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

Example

Ниже приводится программа, которая обнаруживает предложения в данном исходном тексте. Сохраните эту программу в файле с именем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 принимает begin и end offsetsи возвращает соответствующую строку. Мы можем использовать этот метод для печати предложений и их промежутков (позиций) вместе, как показано в следующем блоке кода.

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 class возвращает вероятности, связанные с самыми последними вызовами метода 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 (), как показано ниже.

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

Процесс разделения данного предложения на более мелкие части (токены) известен как tokenization. В общем, данный необработанный текст токенизируется на основе набора разделителей (в основном пробелов).

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

Токенизация с использованием OpenNLP

В opennlp.tools.tokenize package содержит классы и интерфейсы, которые используются для выполнения токенизации.

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

  • SimpleTokenizer - Этот класс токенизирует данный необработанный текст, используя классы символов.

  • WhitespaceTokenizer - Этот класс использует пробелы для разметки данного текста.

  • TokenizerME- Этот класс преобразует необработанный текст в отдельные токены. Он использует максимальную энтропию для принятия решений.

SimpleTokenizer

Чтобы токенизировать предложение с помощью SimpleTokenizer класс, вам нужно -

  • Создайте объект соответствующего класса.

  • Обозначьте предложение, используя tokenize() метод.

  • Распечатайте жетоны.

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

Step 1 - Создание соответствующего класса

В обоих классах нет доступных конструкторов для их создания. Следовательно, нам нужно создавать объекты этих классов с помощью статической переменнойINSTANCE.

SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;

Step 2 - Обозначить предложения

Оба эти класса содержат метод под названием tokenize(). Этот метод принимает необработанный текст в формате String. При вызове он токенизирует данную строку и возвращает массив строк (токенов).

Обозначьте предложение, используя tokenizer() метод, как показано ниже.

//Tokenizing the given sentence 
 String tokens[] = tokenizer.tokenize(sentence);

Step 3 - Распечатать жетоны

После токенизации предложения вы можете распечатать токены, используя for loop, как показано ниже.

//Printing the tokens 
for(String token : tokens)       
   System.out.println(token);

Example

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

import opennlp.tools.tokenize.SimpleTokenizer;  
public class SimpleTokenizerExample { 
   public static void main(String args[]){ 
     
      String sentence = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
    
      //Instantiating SimpleTokenizer class 
      SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE;  
       
      //Tokenizing the given sentence 
      String tokens[] = simpleTokenizer.tokenize(sentence);  
       
      //Printing the tokens 
      for(String token : tokens) {         
         System.out.println(token);  
      }       
   }  
}

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

javac SimpleTokenizerExample.java 
java SimpleTokenizerExample

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

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

WhitespaceTokenizer

Чтобы токенизировать предложение с помощью WhitespaceTokenizer класс, вам нужно -

  • Создайте объект соответствующего класса.

  • Обозначьте предложение, используя tokenize() метод.

  • Распечатайте жетоны.

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

Step 1 - Создание соответствующего класса

В обоих классах нет доступных конструкторов для их создания. Следовательно, нам нужно создавать объекты этих классов с помощью статической переменнойINSTANCE.

WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE;

Step 2 - Обозначить предложения

Оба эти класса содержат метод под названием tokenize(). Этот метод принимает необработанный текст в формате String. При вызове он токенизирует данную строку и возвращает массив строк (токенов).

Обозначьте предложение, используя tokenizer() метод, как показано ниже.

//Tokenizing the given sentence 
 String tokens[] = tokenizer.tokenize(sentence);

Step 3 - Распечатать жетоны

После токенизации предложения вы можете распечатать токены, используя for loop, как показано ниже.

//Printing the tokens 
for(String token : tokens)       
   System.out.println(token);

Example

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

import opennlp.tools.tokenize.WhitespaceTokenizer;  

public class WhitespaceTokenizerExample {  
   
   public static void main(String args[]){ 
     
      String sentence = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
    
      //Instantiating whitespaceTokenizer class 
       WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE;  
       
      //Tokenizing the given paragraph 
      String tokens[] = whitespaceTokenizer.tokenize(sentence);  
       
      //Printing the tokens 
      for(String token : tokens)     
         System.out.println(token);        
   } 
}

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

javac WhitespaceTokenizerExample.java 
java WhitespaceTokenizerExample

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

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

TokenizerME класс

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

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

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

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

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

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

Step 1 - Загрузка модели

Модель токенизации представлена ​​классом с именем TokenizerModel, который принадлежит пакету opennlp.tools.tokenize.

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

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

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

//Loading the Tokenizer model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin"); 
TokenizerModel tokenModel = new TokenizerModel(inputStream);

Step 2 - Создание экземпляра класса TokenizerME

В TokenizerME класс пакета opennlp.tools.tokenizeсодержит методы для разделения необработанного текста на более мелкие части (токены). Он использует максимальную энтропию для принятия решений.

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

//Instantiating the TokenizerME class 
TokenizerME tokenizer = new TokenizerME(tokenModel);

Step 3 - Обозначение предложения

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

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

//Tokenizing the given raw text 
String tokens[] = tokenizer.tokenize(paragraph);

Example

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

import java.io.FileInputStream; 
import java.io.InputStream; 
import opennlp.tools.tokenize.TokenizerME; 
import opennlp.tools.tokenize.TokenizerModel;  

public class TokenizerMEExample { 
  
   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 the Tokenizer model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin"); 
      TokenizerModel tokenModel = new TokenizerModel(inputStream); 
       
      //Instantiating the TokenizerME class 
      TokenizerME tokenizer = new TokenizerME(tokenModel); 
       
      //Tokenizing the given raw text 
      String tokens[] = tokenizer.tokenize(sentence);       
          
      //Printing the tokens  
      for (String a : tokens) 
         System.out.println(a); 
   } 
}

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

javac TokenizerMEExample.java 
java TokenizerMEExample

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

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

Получение позиций токенов

Мы также можем получить позиции или spans токенов с использованием tokenizePos()метод. Это метод интерфейса Tokenizer пакетаopennlp.tools.tokenize. Поскольку все (три) класса Tokenizer реализуют этот интерфейс, вы можете найти этот метод во всех из них.

Этот метод принимает предложение или необработанный текст в виде строки и возвращает массив объектов типа Span.

Вы можете узнать позиции токенов, используя tokenizePos() метод следующим образом -

//Retrieving the tokens 
tokenizer.tokenizePos(sentence);

Печать позиций (промежутков)

Класс с именем Span из opennlp.tools.util package используется для хранения начального и конечного целых чисел наборов.

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

//Retrieving the tokens 
Span[] tokens = tokenizer.tokenizePos(sentence);
//Printing the spans of tokens 
for( Span token : tokens)        
   System.out.println(token);

Совместная печать токенов и их позиций

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

//Printing the spans of tokens 
for(Span token : tokens)  
   System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));

Example(SimpleTokenizer)

Ниже приводится программа, которая извлекает промежутки токенов необработанного текста с помощью SimpleTokenizerкласс. Он также печатает токены вместе с их позициями. Сохраните эту программу в файле с именемSimpleTokenizerSpans.java.

import opennlp.tools.tokenize.SimpleTokenizer; 
import opennlp.tools.util.Span;  

public class SimpleTokenizerSpans {  
   public static void main(String args[]){ 
     
      String sent = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
    
      //Instantiating SimpleTokenizer class 
      SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE;  
       
      //Retrieving the boundaries of the tokens 
      Span[] tokens = simpleTokenizer.tokenizePos(sent);  
       
      //Printing the spans of tokens 
      for( Span token : tokens)
         System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));          
   } 
}

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

javac SimpleTokenizerSpans.java 
java SimpleTokenizerSpans

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

[0..2) Hi 
[2..3) . 
[4..7) How 
[8..11) are 
[12..15) you 
[15..16) ? 
[17..24) Welcome 
[25..27) to 
[28..42) Tutorialspoint 
[42..43) . 
[44..46) We 
[47..54) provide 
[55..59) free 
[60..69) tutorials 
[70..72) on 
[73..80) various 
[81..93) technologies

Example (WhitespaceTokenizer)

Ниже приводится программа, которая извлекает промежутки токенов необработанного текста с помощью WhitespaceTokenizerкласс. Он также печатает токены вместе с их позициями. Сохраните эту программу в файл с названиемWhitespaceTokenizerSpans.java.

import opennlp.tools.tokenize.WhitespaceTokenizer;
import opennlp.tools.util.Span; 
public class WhitespaceTokenizerSpans {  
   public static void main(String args[]){ 
     
      String sent = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
    
      //Instantiating SimpleTokenizer class 
      WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE;  
       
      //Retrieving the tokens 
      Span[] tokens = whitespaceTokenizer.tokenizePos(sent);  
       
      //Printing the spans of tokens 
      for( Span token : tokens) 
         System.out.println(token +" 
            "+sent.substring(token.getStart(), token.getEnd()));        
   } 
}

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

javac WhitespaceTokenizerSpans.java 
java WhitespaceTokenizerSpans

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

[0..3) Hi. 
[4..7) How 
[8..11) are 
[12..16) you? 
[17..24) Welcome 
[25..27) to 
[28..43) Tutorialspoint. 
[44..46) We 
[47..54) provide 
[55..59) free
[60..69) tutorials 
[70..72) on 
[73..80) various 
[81..93) technologies

Example (TokenizerME)

Ниже приводится программа, которая извлекает промежутки токенов необработанного текста с помощью TokenizerMEкласс. Он также печатает токены вместе с их позициями. Сохраните эту программу в файл с названиемTokenizerMESpans.java.

import java.io.FileInputStream; 
import java.io.InputStream; 
import opennlp.tools.tokenize.TokenizerME; 
import opennlp.tools.tokenize.TokenizerModel; 
import opennlp.tools.util.Span;  

public class TokenizerMESpans { 
   public static void main(String args[]) throws Exception{     
      String sent = "Hello John how are you welcome to Tutorialspoint"; 
       
      //Loading the Tokenizer model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin"); 
      TokenizerModel tokenModel = new TokenizerModel(inputStream); 
       
      //Instantiating the TokenizerME class 
      TokenizerME tokenizer = new TokenizerME(tokenModel); 
       
      //Retrieving the positions of the tokens 
      Span tokens[] = tokenizer.tokenizePos(sent); 
       
      //Printing the spans of tokens 
      for(Span token : tokens) 
         System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));      
   } 
}

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

javac TokenizerMESpans.java 
java TokenizerMESpans

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

[0..5) Hello 
[6..10) John 
[11..14) how 
[15..18) are 
[19..22) you 
[23..30) welcome 
[31..33) to 
[34..48) Tutorialspoint

Вероятность токенизатора

Метод getTokenProbabilities () класса TokenizerME используется для получения вероятностей, связанных с самыми последними вызовами метода tokenizePos ().

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

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

import java.io.FileInputStream; 
import java.io.InputStream; 
import opennlp.tools.tokenize.TokenizerME; 
import opennlp.tools.tokenize.TokenizerModel; 
import opennlp.tools.util.Span;  

public class TokenizerMEProbs { 
   
   public static void main(String args[]) throws Exception{     
      String sent = "Hello John how are you welcome to Tutorialspoint"; 
      
      //Loading the Tokenizer model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin"); 
      TokenizerModel tokenModel = new TokenizerModel(inputStream); 
      
      //Instantiating the TokenizerME class 
      TokenizerME tokenizer = new TokenizerME(tokenModel);
      
      //Retrieving the positions of the tokens 
      Span tokens[] = tokenizer.tokenizePos(sent); 
       
      //Getting the probabilities of the recent calls to tokenizePos() method 
      double[] probs = tokenizer.getTokenProbabilities(); 
       
      //Printing the spans of tokens 
      for(Span token : tokens) 
         System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));      
         System.out.println("  "); 
         for(int i = 0; i<probs.length; i++) 
            System.out.println(probs[i]);          
   } 
}

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

javac TokenizerMEProbs.java 
java TokenizerMEProbs

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

[0..5) Hello 
[6..10) John 
[11..14) how 
[15..18) are 
[19..22) you 
[23..30) welcome 
[31..33) to 
[34..48) Tutorialspoint 
   
1.0 
1.0 
1.0 
1.0 
1.0 
1.0 
1.0 
1.0

Процесс поиска имен, людей, мест и других сущностей в заданном тексте известен как NАмед Eсущность Rпознание (NER). В этой главе мы обсудим, как выполнить NER через программу Java с использованием библиотеки OpenNLP.

Распознавание именованных сущностей с использованием открытого NLP

Для выполнения различных задач NER OpenNLP использует различные предопределенные модели, а именно en-nerdate.bn, en-location.bin, en-ner-organization.bin, en-ner-person.bin и en-time. bin. Все эти файлы являются предопределенными моделями, которые обучены обнаруживать соответствующие объекты в заданном необработанном тексте.

В opennlp.tools.namefindПакет содержит классы и интерфейсы, которые используются для выполнения задачи NER. Чтобы выполнить задачу NER с использованием библиотеки OpenNLP, вам необходимо:

  • Загрузите соответствующую модель, используя TokenNameFinderModel класс.

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

  • Найдите имена и распечатайте их.

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

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

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

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

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

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

//Loading the NER-person model 
InputStream inputStreamNameFinder = new FileInputStream(".../en-nerperson.bin");       
TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder);

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

В NameFinderME класс пакета opennlp.tools.namefindсодержит методы для выполнения задач NER. Этот класс использует модель максимальной энтропии для поиска названных сущностей в заданном исходном тексте.

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

//Instantiating the NameFinderME class 
NameFinderME nameFinder = new NameFinderME(model);

Шаг 3. Найдите имена в предложении

В find() метод NameFinderMEКласс используется для обнаружения имен в переданном ему необработанном тексте. Этот метод принимает в качестве параметра строковую переменную.

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

//Finding the names in the sentence 
Span nameSpans[] = nameFinder.find(sentence);

Шаг 4. Распечатайте интервалы имен в предложении

В find() метод NameFinderMEclass возвращает массив объектов типа Span. Класс с именем Span of theopennlp.tools.util пакет используется для хранения start и end целое число множеств.

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

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

NER Example

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

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

import opennlp.tools.namefind.NameFinderME; 
import opennlp.tools.namefind.TokenNameFinderModel; 
import opennlp.tools.util.Span;  

public class NameFinderME_Example { 
   public static void main(String args[]) throws Exception{ 
      /Loading the NER - Person model       InputStream inputStream = new 
         FileInputStream("C:/OpenNLP_models/en-ner-person.bin"); 
      TokenNameFinderModel model = new TokenNameFinderModel(inputStream);
      
      //Instantiating the NameFinder class 
      NameFinderME nameFinder = new NameFinderME(model); 
    
      //Getting the sentence in the form of String array  
      String [] sentence = new String[]{ 
         "Mike", 
         "and", 
         "Smith", 
         "are", 
         "good", 
         "friends" 
      }; 
       
      //Finding the names in the sentence 
      Span nameSpans[] = nameFinder.find(sentence); 
       
      //Printing the spans of the names in the sentence 
      for(Span s: nameSpans) 
         System.out.println(s.toString());    
   }    
}

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

javac NameFinderME_Example.java 
java NameFinderME_Example

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

[0..1) person 
[2..3) person

Имена вместе с их должностями

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

for(Span s: nameSpans)        
   System.out.println(s.toString()+"  "+tokens[s.getStart()]);

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

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

import opennlp.tools.namefind.NameFinderME; 
import opennlp.tools.namefind.TokenNameFinderModel; 
import opennlp.tools.tokenize.TokenizerME; 
import opennlp.tools.tokenize.TokenizerModel; 
import opennlp.tools.util.Span;  

public class NameFinderSentences {  
   public static void main(String args[]) throws Exception{        
      
      //Loading the tokenizer model 
      InputStream inputStreamTokenizer = new 
         FileInputStream("C:/OpenNLP_models/entoken.bin");
      TokenizerModel tokenModel = new TokenizerModel(inputStreamTokenizer); 
       
      //Instantiating the TokenizerME class 
      TokenizerME tokenizer = new TokenizerME(tokenModel); 
       
      //Tokenizing the sentence in to a string array 
      String sentence = "Mike is senior programming 
      manager and Rama is a clerk both are working at 
      Tutorialspoint"; 
      String tokens[] = tokenizer.tokenize(sentence); 
       
      //Loading the NER-person model 
      InputStream inputStreamNameFinder = new 
         FileInputStream("C:/OpenNLP_models/enner-person.bin");       
      TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder);
      
      //Instantiating the NameFinderME class 
      NameFinderME nameFinder = new NameFinderME(model);       
      
      //Finding the names in the sentence 
      Span nameSpans[] = nameFinder.find(tokens);        
      
      //Printing the names and their spans in a sentence 
      for(Span s: nameSpans)        
         System.out.println(s.toString()+"  "+tokens[s.getStart()]);      
   }    
}

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

javac NameFinderSentences.java 
java NameFinderSentences

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

[0..1) person  Mike

Поиск названий местоположения

Загружая различные модели, вы можете обнаруживать различные именованные объекты. Ниже приводится программа на Java, которая загружаетen-ner-location.binмодель и определяет названия мест в данном предложении. Сохраните эту программу в файл с названиемLocationFinder.java.

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

import opennlp.tools.namefind.NameFinderME; 
import opennlp.tools.namefind.TokenNameFinderModel; 
import opennlp.tools.tokenize.TokenizerME; 
import opennlp.tools.tokenize.TokenizerModel; 
import opennlp.tools.util.Span;  

public class LocationFinder { 
   public static void main(String args[]) throws Exception{
 
      InputStream inputStreamTokenizer = new 
         FileInputStream("C:/OpenNLP_models/entoken.bin"); 
      TokenizerModel tokenModel = new TokenizerModel(inputStreamTokenizer); 
       
      //String paragraph = "Mike and Smith are classmates"; 
      String paragraph = "Tutorialspoint is located in Hyderabad"; 
        
      //Instantiating the TokenizerME class 
      TokenizerME tokenizer = new TokenizerME(tokenModel); 
      String tokens[] = tokenizer.tokenize(paragraph); 
       
      //Loading the NER-location moodel 
      InputStream inputStreamNameFinder = new 
         FileInputStream("C:/OpenNLP_models/en- ner-location.bin");       
      TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder); 
        
      //Instantiating the NameFinderME class 
      NameFinderME nameFinder = new NameFinderME(model);      
        
      //Finding the names of a location 
      Span nameSpans[] = nameFinder.find(tokens);        
      //Printing the spans of the locations in the sentence 
      for(Span s: nameSpans)        
         System.out.println(s.toString()+"  "+tokens[s.getStart()]); 
   }    
}

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

javac LocationFinder.java 
java LocationFinder

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

[4..5) location  Hyderabad

NameFinder Вероятность

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

double[] probs = nameFinder.probs();

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

import java.io.FileInputStream; 
import java.io.InputStream; 
import opennlp.tools.tokenize.TokenizerME; 
import opennlp.tools.tokenize.TokenizerModel; 
import opennlp.tools.util.Span; 
public class TokenizerMEProbs { 
   public static void main(String args[]) throws Exception{     
      String sent = "Hello John how are you welcome to Tutorialspoint"; 
       
      //Loading the Tokenizer model 
      InputStream inputStream = new 
         FileInputStream("C:/OpenNLP_models/en-token.bin"); 
      TokenizerModel tokenModel = new TokenizerModel(inputStream); 
       
      //Instantiating the TokenizerME class 
      TokenizerME tokenizer = new TokenizerME(tokenModel); 
       
      //Retrieving the positions of the tokens 
      Span tokens[] = tokenizer.tokenizePos(sent); 
       
      //Getting the probabilities of the recent calls to tokenizePos() method 
      double[] probs = tokenizer.getTokenProbabilities(); 
       
      //Printing the spans of tokens 
      for( Span token : tokens) 
         System.out.println(token +" 
            "+sent.substring(token.getStart(), token.getEnd()));      
         System.out.println("  "); 
      for(int i = 0; i<probs.length; i++) 
         System.out.println(probs[i]);          
   } 
}

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

javac TokenizerMEProbs.java 
java TokenizerMEProbs

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

[0..5) Hello 
[6..10) John 
[11..14) how 
[15..18) are 
[19..22) you 
[23..30) welcome 
[31..33) to 
[34..48) Tutorialspoint 
   
1.0 
1.0 
1.0 
1.0 
1.0 
1.0 
1.0 
1.0

Используя 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

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

Анализ исходного текста с использованием библиотеки OpenNLP

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

В Parser класс opennlp.tools.Parser пакет используется для хранения компонентов синтаксического анализа и ParserTool класс opennlp.tools.cmdline.parser package используется для анализа содержимого.

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

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

Модель для синтаксического анализа текста представлена ​​классом с именем ParserModel, который принадлежит пакету opennlp.tools.parser.

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

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

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

//Loading parser model 
InputStream inputStream = new FileInputStream(".../en-parserchunking.bin"); 
ParserModel model = new ParserModel(inputStream);

Шаг 2: Создание объекта класса Parser

В Parser класс пакета opennlp.tools.parserпредставляет структуру данных для хранения компонентов синтаксического анализа. Вы можете создать объект этого класса, используя статическийcreate() метод ParserFactory класс.

Вызвать create() метод ParserFactory передавая объект модели, созданный на предыдущем шаге, как показано ниже -

//Creating a parser Parser parser = ParserFactory.create(model);

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

В parseLine() метод ParserToolКласс используется для анализа необработанного текста в OpenNLP. Этот метод принимает -

  • переменная типа String, представляющая анализируемый текст.

  • объект парсера.

  • целое число, представляющее количество выполняемых синтаксических анализов.

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

//Parsing the sentence 
String sentence = "Tutorialspoint is the largest tutorial library.";       
Parse topParses[] = ParserTool.parseLine(sentence, parser, 1);

Example

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

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

import opennlp.tools.cmdline.parser.ParserTool; 
import opennlp.tools.parser.Parse; 
import opennlp.tools.parser.Parser; 
import opennlp.tools.parser.ParserFactory; 
import opennlp.tools.parser.ParserModel;  

public class ParserExample { 
   
   public static void main(String args[]) throws Exception{  
      //Loading parser model 
      InputStream inputStream = new FileInputStream(".../en-parserchunking.bin"); 
      ParserModel model = new ParserModel(inputStream); 
       
      //Creating a parser 
      Parser parser = ParserFactory.create(model); 
      
      //Parsing the sentence 
      String sentence = "Tutorialspoint is the largest tutorial library.";
      Parse topParses[] = ParserTool.parseLine(sentence, parser, 1); 
    
      for (Parse p : topParses) 
         p.show();          
   } 
}

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

javac ParserExample.java 
java ParserExample

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

(TOP (S (NP (NN Tutorialspoint)) (VP (VBZ is) (NP (DT the) (JJS largest) (NN
   tutorial) (NN library.)))))

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

//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 и передайте путь к модели в строковом формате ее конструктору).

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

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

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

Example

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

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

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

Example

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

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

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

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

0.9592746040797778 
0.6883933131241501 
0.8830563473996004 
0.8951150529746051

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

Токенизация

input.txt

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

Синтаксис

> opennlp TokenizerME path_for_models../en-token.bin <inputfile..> outputfile..

команда

C:\> opennlp TokenizerME C:\OpenNLP_models/en-token.bin <input.txt >output.txt

вывод

Loading Tokenizer model ... done (0.207s)  
Average: 214.3 sent/s 
Total: 3 sent 
Runtime: 0.014s

output.txt

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

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

input.txt

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

Синтаксис

> opennlp SentenceDetector path_for_models../en-token.bin <inputfile..> outputfile..

команда

C:\> opennlp SentenceDetector C:\OpenNLP_models/en-sent.bin <input.txt > output_sendet.txt

Вывод

Loading Sentence Detector model ... done (0.067s)  

Average: 750.0 sent/s 
Total: 3 sent 
Runtime: 0.004s

Output_sendet.txt

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

Признание именованных сущностей

input.txt

<START:person> <START:person> Mike <END> <END> is senior programming manager and 
<START:person> Rama <END> is a clerk both are working at Tutorialspoint

Синтаксис

> opennlp TokenNameFinder path_for_models../en-token.bin <inputfile..

Команда

C:\>opennlp TokenNameFinder C:\OpenNLP_models\en-ner-person.bin <input_namefinder.txt

Вывод

Loading Token Name Finder model ... done (0.730s) 
<START:person> <START:person> Mike <END> <END> is senior programming manager and 
<START:person> Rama <END> is a clerk both are working at Tutorialspoint  
Average: 55.6 sent/s 
Total: 1 sent 
Runtime: 0.018s

Части речевых тегов

Input.txt

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

Синтаксис

> opennlp POSTagger path_for_models../en-token.bin <inputfile..

Команда

C:\>opennlp POSTagger C:\OpenNLP_models/en-pos-maxent.bin < input.txt

Вывод

Loading POS Tagger model ... done (1.315s) 
Hi._NNP How_WRB are_VBP you?_JJ Welcome_NNP to_TO Tutorialspoint._NNP We_PRP 
provide_VBP free_JJ tutorials_NNS on_IN various_JJ technologies_NNS  

Average: 66.7 sent/s 
Total: 1 sent 
Runtime: 0.015s