Учебники

OpenNLP — токенизация

Процесс разбиения данного предложения на более мелкие части (токены) известен как токенизация . В общем, данный необработанный текст маркируется на основе набора разделителей (в основном, пробелов).

Токенизация используется в таких задачах, как проверка орфографии, обработка запросов, определение частей речи, обнаружение предложений, классификация документов и т. Д.

Токенизация с использованием OpenNLP

Пакет opennlp.tools.tokenize содержит классы и интерфейсы, которые используются для выполнения токенизации.

Чтобы разбить данные предложения на более простые фрагменты, библиотека OpenNLP предоставляет три разных класса:

  • SimpleTokenizer — этот класс маркирует заданный необработанный текст с использованием классов символов.

  • WhitespaceTokenizer — этот класс использует пробелы для токенизации заданного текста.

  • TokenizerME — этот класс преобразует необработанный текст в отдельные токены. Он использует максимальную энтропию для принятия своих решений.

SimpleTokenizer — этот класс маркирует заданный необработанный текст с использованием классов символов.

WhitespaceTokenizer — этот класс использует пробелы для токенизации заданного текста.

TokenizerME — этот класс преобразует необработанный текст в отдельные токены. Он использует максимальную энтропию для принятия своих решений.

SimpleTokenizer

Чтобы токенизировать предложение с помощью класса SimpleTokenizer , вам необходимо:

  • Создайте объект соответствующего класса.

  • Токенизируйте предложение, используя метод tokenize () .

  • Распечатайте жетоны.

Создайте объект соответствующего класса.

Токенизируйте предложение, используя метод tokenize () .

Распечатайте жетоны.

Ниже приведены шаги, которые необходимо выполнить, чтобы написать программу, которая использует токен для данного необработанного текста.

Шаг 1 — Создание соответствующего класса

В обоих классах нет доступных конструкторов для их создания. Поэтому нам нужно создавать объекты этих классов, используя статическую переменную INSTANCE .

SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;   

Шаг 2 — Токенизация предложений

Оба этих класса содержат метод tokenize () . Этот метод принимает необработанный текст в формате String. При вызове он маркирует данную строку и возвращает массив строк (токенов).

Токенизируйте предложение, используя метод tokenizer (), как показано ниже.

//Tokenizing the given sentence 
 String tokens[] = tokenizer.tokenize(sentence); 

Шаг 3 — Распечатать токены

После токенизации предложения вы можете распечатать токены, используя цикл for , как показано ниже.

//Printing the tokens 
for(String token : tokens)       
   System.out.println(token);

пример

Ниже приведена программа, которая токенизирует данное предложение с использованием класса 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 () .

  • Распечатайте жетоны.

Создайте объект соответствующего класса.

Токенизируйте предложение, используя метод tokenize () .

Распечатайте жетоны.

Ниже приведены шаги, которые необходимо выполнить, чтобы написать программу, которая использует токен для данного необработанного текста.

Шаг 1 — Создание соответствующего класса

В обоих классах нет доступных конструкторов для их создания. Поэтому нам нужно создавать объекты этих классов, используя статическую переменную INSTANCE .

WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE; 

Шаг 2 — Токенизация предложений

Оба этих класса содержат метод tokenize () . Этот метод принимает необработанный текст в формате String. При вызове он маркирует данную строку и возвращает массив строк (токенов).

Токенизируйте предложение, используя метод tokenizer (), как показано ниже.

//Tokenizing the given sentence 
 String tokens[] = tokenizer.tokenize(sentence); 

Шаг 3 — Распечатать токены

После токенизации предложения вы можете распечатать токены, используя цикл for , как показано ниже.

//Printing the tokens 
for(String token : tokens)       
   System.out.println(token);

пример

Ниже приведена программа, которая токенизирует данное предложение с использованием класса 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.tokenizer используется для загрузки этой модели и токенизации заданного необработанного текста с использованием библиотеки OpenNLP. Для этого вам нужно —

  • Загрузите модель en-token.bin, используя класс TokenizerModel .

  • Создайте класс TokenizerME .

  • Токенизируйте предложения, используя метод tokenize () этого класса.

Загрузите модель en-token.bin, используя класс TokenizerModel .

Создайте класс TokenizerME .

Токенизируйте предложения, используя метод tokenize () этого класса.

Ниже приведены шаги, которые необходимо выполнить для написания программы, которая токенизирует предложения из заданного необработанного текста с использованием класса TokenizerME .

Шаг 1 — Загрузка модели

Модель для токенизации представлена ​​классом с именем TokenizerModel , который принадлежит пакету opennlp.tools.tokenize .

Чтобы загрузить модель токенизатора —

  • Создайте объект InputStream модели (создайте экземпляр FileInputStream и передайте путь модели в формате String ее конструктору).

  • Создайте экземпляр класса TokenizerModel и передайте InputStream (объект) модели в качестве параметра ее конструктору, как показано в следующем блоке кода.

Создайте объект InputStream модели (создайте экземпляр FileInputStream и передайте путь модели в формате String ее конструктору).

Создайте экземпляр класса TokenizerModel и передайте InputStream (объект) модели в качестве параметра ее конструктору, как показано в следующем блоке кода.

//Loading the Tokenizer model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin"); 
TokenizerModel tokenModel = new TokenizerModel(inputStream);

Шаг 2 — Создание класса TokenizerME

Класс TokenizerME пакета opennlp.tools.tokenize содержит методы для разбиения необработанного текста на более мелкие части (токены). Он использует максимальную энтропию для принятия своих решений.

Создайте экземпляр этого класса и передайте объект модели, созданный на предыдущем шаге, как показано ниже.

//Instantiating the TokenizerME class 
TokenizerME tokenizer = new TokenizerME(tokenModel);

Шаг 3 — Токенизация предложения

Метод tokenize () класса TokenizerME используется для токенизации необработанного текста, передаваемого ему. Этот метод принимает переменную String в качестве параметра и возвращает массив строк (токенов).

Вызовите этот метод, передав формат строки предложения этому методу следующим образом.

//Tokenizing the given raw text 
String tokens[] = tokenizer.tokenize(paragraph);

пример

Ниже приведена программа, которая токенизирует данный необработанный текст. Сохраните эту программу в файле с именем 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

Получение позиций токенов

Мы также можем получить позиции или диапазоны токенов, используя метод tokenizePos () . Это метод интерфейса Tokenizer пакета opennlp.tools.tokenize . Поскольку все (три) класса Tokenizer реализуют этот интерфейс, вы можете найти этот метод во всех них.

Этот метод принимает предложение или необработанный текст в виде строки и возвращает массив объектов типа Span .

Вы можете получить позиции токенов, используя метод tokenizePos () , как показано ниже:

//Retrieving the tokens 
tokenizer.tokenizePos(sentence); 

Печать позиций (пролетов)

Класс с именем Span пакета opennlp.tools.util используется для хранения начального и конечного целого числа наборов.

Вы можете сохранить диапазоны, возвращаемые методом 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 принимает смещения начала и конца и возвращает соответствующую строку. Мы можем использовать этот метод для печати токенов и их диапазонов (позиций) вместе, как показано в следующем блоке кода.

//Printing the spans of tokens 
for(Span token : tokens)  
   System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));

Пример (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 

Пример (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

Пример (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 ().