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