OpenNLP - Токенизация
Процесс разделения данного предложения на более мелкие части (токены) известен как 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