OpenNLP - поиск частей речи
Используя 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