Разделение предложения на части означает разделение / разделение предложения на части слов, такие как группы слов и группы глаголов.
Разделение предложения с помощью OpenNLP
Чтобы обнаружить предложения, OpenNLP использует модель, файл с именем en-chunker.bin . Это предопределенная модель, которая обучается разбивать предложения в заданном необработанном тексте.
Пакет opennlp.tools.chunker содержит классы и интерфейсы, которые используются для поиска нерекурсивных синтаксических аннотаций, таких как фрагменты имен существительных.
Вы можете разделить предложение на части, используя метод chunk () класса ChunkerME . Этот метод принимает токены предложения и POS-теги в качестве параметров. Поэтому, прежде чем начинать процесс разбиения на фрагменты, прежде всего вам необходимо токенизировать предложение и генерировать POS-теги его частей.
Чтобы разделить предложение на части с помощью библиотеки OpenNLP, вам необходимо:
-
Токенизируйте предложение.
-
Создать POS-теги для него.
-
Загрузите модель en-chunker.bin, используя класс ChunkerModel
-
Создайте класс ChunkerME .
-
Разделите предложения, используя метод chunk () этого класса.
Токенизируйте предложение.
Создать POS-теги для него.
Загрузите модель en-chunker.bin, используя класс ChunkerModel
Создайте класс ChunkerME .
Разделите предложения, используя метод chunk () этого класса.
Ниже приведены шаги, которые необходимо выполнить, чтобы написать программу для фрагментов предложений из заданного необработанного текста.
Шаг 1: Маркировка предложения
Токенизируйте предложения, используя метод tokenize () класса whitespaceTokenizer , как показано в следующем блоке кода.
//Tokenizing the sentence String sentence = "Hi welcome to Tutorialspoint"; WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; String[] tokens = whitespaceTokenizer.tokenize(sentence);
Шаг 2: Генерация POS-тегов
Сгенерируйте POS-теги предложения, используя метод tag () класса POSTaggerME , как показано в следующем блоке кода.
//Generating the POS tags File file = new File("C:/OpenNLP_models/en-pos-maxent.bin"); POSModel model = new POSModelLoader().load(file); //Constructing the tagger POSTaggerME tagger = new POSTaggerME(model); //Generating tags from the tokens String[] tags = tagger.tag(tokens);
Шаг 3: Загрузка модели
Модель разбиения предложения представлена классом с именем ChunkerModel , который принадлежит пакету opennlp.tools.chunker .
Чтобы загрузить модель определения предложения —
-
Создайте объект InputStream модели (создайте экземпляр FileInputStream и передайте путь модели в формате String ее конструктору).
-
Создайте экземпляр класса ChunkerModel и передайте InputStream (объект) модели в качестве параметра ее конструктору, как показано в следующем блоке кода:
Создайте объект InputStream модели (создайте экземпляр FileInputStream и передайте путь модели в формате String ее конструктору).
Создайте экземпляр класса ChunkerModel и передайте InputStream (объект) модели в качестве параметра ее конструктору, как показано в следующем блоке кода:
//Loading the chunker model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin"); ChunkerModel chunkerModel = new ChunkerModel(inputStream);
Шаг 4: Создание класса chunkerME
Класс chunkerME пакета opennlp.tools.chunker содержит методы для разделения предложений. Это основанный на максимальной энтропии чанкер.
Создайте экземпляр этого класса и передайте объект модели, созданный на предыдущем шаге.
//Instantiate the ChunkerME class ChunkerME chunkerME = new ChunkerME(chunkerModel);
Шаг 5: Разделение предложения
Метод chunk () класса ChunkerME используется для разбиения предложений в необработанном тексте, переданном ему. Этот метод принимает два строковых массива, представляющих токены и теги, в качестве параметров.
Вызовите этот метод, передав в качестве параметров массив токенов и массив тегов, созданный на предыдущих шагах.
//Generating the chunks String result[] = chunkerME.chunk(tokens, tags);
пример
Ниже приведена программа для разбиения предложений в заданном необработанном тексте. Сохраните эту программу в файле с именем ChunkerExample.java .
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.cmdline.postag.POSModelLoader; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.tokenize.WhitespaceTokenizer; public class ChunkerExample{ public static void main(String args[]) throws IOException { //Tokenizing the sentence String sentence = "Hi welcome to Tutorialspoint"; WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; String[] tokens = whitespaceTokenizer.tokenize(sentence); //Generating the POS tags //Load the parts of speech model File file = new File("C:/OpenNLP_models/en-pos-maxent.bin"); POSModel model = new POSModelLoader().load(file); //Constructing the tagger POSTaggerME tagger = new POSTaggerME(model); //Generating tags from the tokens String[] tags = tagger.tag(tokens); //Loading the chunker model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin"); ChunkerModel chunkerModel = new ChunkerModel(inputStream); //Instantiate the ChunkerME class ChunkerME chunkerME = new ChunkerME(chunkerModel); //Generating the chunks String result[] = chunkerME.chunk(tokens, tags); for (String s : result) System.out.println(s); } }
Скомпилируйте и выполните сохраненный файл Java из командной строки, используя следующую команду —
javac ChunkerExample.java java ChunkerExample
При выполнении вышеупомянутая программа считывает данную строку и разбивает на нее предложения и отображает их, как показано ниже.
Loading POS Tagger model ... done (1.040s) B-NP I-NP B-VP I-VP
Обнаружение позиций токенов
Мы также можем определить позиции или промежутки блоков, используя метод chunkAsSpans () класса ChunkerME . Этот метод возвращает массив объектов типа Span. Класс с именем Span пакета opennlp.tools.util используется для хранения начального и конечного целого числа наборов.
Вы можете сохранить диапазоны, возвращенные методом chunkAsSpans (), в массиве Span и распечатать их, как показано в следующем блоке кода.
//Generating the tagged chunk spans Span[] span = chunkerME.chunkAsSpans(tokens, tags); for (Span s : span) System.out.println(s.toString());
пример
Ниже приводится программа, которая обнаруживает предложения в заданном необработанном тексте. Сохраните эту программу в файле с именем ChunkerSpansEample.java .
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.cmdline.postag.POSModelLoader; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.Span; public class ChunkerSpansEample{ public static void main(String args[]) throws IOException { //Load the parts of speech model File file = new File("C:/OpenNLP_models/en-pos-maxent.bin"); POSModel model = new POSModelLoader().load(file); //Constructing the tagger POSTaggerME tagger = new POSTaggerME(model); //Tokenizing the sentence String sentence = "Hi welcome to Tutorialspoint"; WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; String[] tokens = whitespaceTokenizer.tokenize(sentence); //Generating tags from the tokens String[] tags = tagger.tag(tokens); //Loading the chunker model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin"); ChunkerModel chunkerModel = new ChunkerModel(inputStream); ChunkerME chunkerME = new ChunkerME(chunkerModel); //Generating the tagged chunk spans Span[] span = chunkerME.chunkAsSpans(tokens, tags); for (Span s : span) System.out.println(s.toString()); } }
Скомпилируйте и выполните сохраненный файл Java из командной строки, используя следующие команды:
javac ChunkerSpansEample.java java ChunkerSpansEample
При выполнении вышеупомянутая программа считывает данную строку и охватывает фрагменты в ней и отображает следующий вывод:
Loading POS Tagger model ... done (1.059s) [0..2) NP [2..4) VP
Определение вероятности чункера
Метод probs () класса ChunkerME возвращает вероятности последней декодированной последовательности.
//Getting the probabilities of the last decoded sequence double[] probs = chunkerME.probs();
Ниже приведена программа для печати вероятностей последней декодированной последовательности блоком . Сохраните эту программу в файле с именем ChunkerProbsExample.java .
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.cmdline.postag.POSModelLoader; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.tokenize.WhitespaceTokenizer; public class ChunkerProbsExample{ public static void main(String args[]) throws IOException { //Load the parts of speech model File file = new File("C:/OpenNLP_models/en-pos-maxent.bin"); POSModel model = new POSModelLoader().load(file); //Constructing the tagger POSTaggerME tagger = new POSTaggerME(model); //Tokenizing the sentence String sentence = "Hi welcome to Tutorialspoint"; WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; String[] tokens = whitespaceTokenizer.tokenize(sentence); //Generating tags from the tokens String[] tags = tagger.tag(tokens); //Loading the chunker model InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin"); ChunkerModel cModel = new ChunkerModel(inputStream); ChunkerME chunkerME = new ChunkerME(cModel); //Generating the chunk tags chunkerME.chunk(tokens, tags); //Getting the probabilities of the last decoded sequence double[] probs = chunkerME.probs(); for(int i = 0; i<probs.length; i++) System.out.println(probs[i]); } }
Скомпилируйте и выполните сохраненный файл Java из командной строки, используя следующие команды:
javac ChunkerProbsExample.java java ChunkerProbsExample
При выполнении вышеупомянутая программа считывает данную строку, разбивает ее на части и печатает вероятности последней декодированной последовательности.