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