Используя OpenNLP, вы также можете обнаружить части речи данного предложения и распечатать их. Вместо полного названия частей речи OpenNLP использует краткие формы каждой части речи. В следующей таблице указаны различные части речей, обнаруженных OpenNLP, и их значения.
Части речи | Значение частей речи |
---|---|
Н.Н. | Существительное, единственное или массовое |
DT | детерминанта |
VB | Глагол, базовая форма |
ВБД | Глагол прошедшего времени |
VBZ | Глагол, от третьего лица единственное настоящее |
В | Предлог или подчиняющее соединение |
ННП | Имя собственное, единственное число |
К | в |
JJ | Имя прилагательное |
Пометка частей речи
Чтобы пометить части речи предложения, OpenNLP использует модель, файл с именем en-posmaxent.bin . Это предопределенная модель, которая обучается маркировать части речи данного необработанного текста.
Класс POSTaggerME пакета opennlp.tools.postag используется для загрузки этой модели и маркировки частей речи данного необработанного текста с использованием библиотеки OpenNLP. Для этого вам нужно —
-
Загрузите модель en-pos-maxent.bin, используя класс POSModel .
-
Создайте класс POSTaggerME .
-
Токенизируйте предложение.
-
Сгенерируйте теги, используя метод tag () .
-
Распечатайте токены и теги, используя класс POSSample .
Загрузите модель en-pos-maxent.bin, используя класс POSModel .
Создайте класс POSTaggerME .
Токенизируйте предложение.
Сгенерируйте теги, используя метод tag () .
Распечатайте токены и теги, используя класс POSSample .
Ниже приведены шаги, которые необходимо выполнить для написания программы, которая помечает части речи в заданном необработанном тексте с использованием класса POSTaggerME .
Шаг 1: Загрузите модель
Модель для маркировки POS представлена классом с именем POSModel , который принадлежит пакету opennlp.tools.postag .
Чтобы загрузить модель токенизатора —
-
Создайте объект InputStream модели (создайте экземпляр FileInputStream и передайте путь модели в формате String ее конструктору).
-
Создайте экземпляр класса POSModel и передайте InputStream (объект) модели в качестве параметра ее конструктору, как показано в следующем блоке кода:
Создайте объект InputStream модели (создайте экземпляр FileInputStream и передайте путь модели в формате String ее конструктору).
Создайте экземпляр класса 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 используется для токенизации необработанного текста, переданного ему. Этот метод принимает переменную String в качестве параметра и возвращает массив строк (токенов).
Создайте экземпляр класса whitespaceTokenizer и вызовите этот метод, передав формат String предложения этому методу.
//Tokenizing the sentence using WhitespaceTokenizer class WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; String[] tokens = whitespaceTokenizer.tokenize(sentence);
Шаг 4: Генерация тегов
Метод tag () класса whitespaceTokenizer назначает POS-теги предложению токенов. Этот метод принимает массив токенов (String) в качестве параметра и возвращает тег (массив).
Вызвать метод tag () , передав ему токены, сгенерированные в предыдущем шаге.
//Generating tags String[] tags = tagger.tag(tokens);
Шаг 5: Печать токенов и тегов
Класс POSSample представляет предложение с тегом POS. Для создания экземпляра этого класса нам потребуется массив токенов (текста) и массив тегов.
Метод toString () этого класса возвращает теговое предложение. Создайте экземпляр этого класса, передав токены и массивы тегов, созданные на предыдущих шагах, и вызовите его метод toString () , как показано в следующем блоке кода.
//Instantiating the POSSample class POSSample sample = new POSSample(tokens, tags); System.out.println(sample.toString());
пример
Ниже приводится программа, которая помечает части речи в заданном необработанном тексте. Сохраните эту программу в файле с именем 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 Performance
Ниже приводится программа, которая помечает части речи данного необработанного текста. Он также контролирует производительность и отображает производительность тегера. Сохраните эту программу в файле с именем 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 используется для определения вероятностей каждого тега недавно помеченного предложения.
//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
При выполнении вышеупомянутая программа читает заданный необработанный текст, отмечает части речи каждого токена в нем и отображает их. Кроме того, он также отображает вероятности для каждой части речи в данном предложении, как показано ниже.