OpenNLP-トークン化

与えられた文をより小さな部分(トークン)に切り刻むプロセスは、 tokenization。一般に、指定された生のテキストは、区切り文字のセット(主に空白)に基づいてトークン化されます。

トークン化は、スペルチェック、検索の処理、品詞の識別、文の検出、ドキュメントのドキュメント分類などのタスクで使用されます。

OpenNLPを使用したトークン化

ザ・ opennlp.tools.tokenize パッケージには、トークン化を実行するために使用されるクラスとインターフェースが含まれています。

与えられた文をより単純なフラグメントにトークン化するために、OpenNLPライブラリは3つの異なるクラスを提供します-

  • SimpleTokenizer −このクラスは、文字クラスを使用して、指定された生のテキストをトークン化します。

  • WhitespaceTokenizer −このクラスは、空白を使用して、指定されたテキストをトークン化します。

  • TokenizerME−このクラスは、生のテキストを個別のトークンに変換します。最大エントロピーを使用して決定を下します。

SimpleTokenizer

を使用して文をトークン化するには SimpleTokenizer クラス、あなたはする必要があります-

  • それぞれのクラスのオブジェクトを作成します。

  • を使用して文をトークン化します tokenize() 方法。

  • トークンを印刷します。

以下は、指定された生のテキストをトークン化するプログラムを作成するために従うべき手順です。

Step 1 −それぞれのクラスのインスタンス化

どちらのクラスにも、それらをインスタンス化するために使用できるコンストラクターはありません。したがって、静的変数を使用してこれらのクラスのオブジェクトを作成する必要がありますINSTANCE

SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;

Step 2 −文をトークン化する

これらのクラスには両方とも、というメソッドが含まれています tokenize()。このメソッドは、文字列形式の生のテキストを受け入れます。呼び出すと、指定された文字列をトークン化し、文字列(トークン)の配列を返します。

を使用して文をトークン化します 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()。このメソッドは、文字列形式の生のテキストを受け入れます。呼び出すと、指定された文字列をトークン化し、文字列(トークン)の配列を返します。

を使用して文をトークン化します 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.tokenizerパッケージは、このモデルをロードし、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クラスは、渡された生のテキストをトークン化するために使用されます。このメソッドは、パラメーターとしてString変数を受け入れ、String(トークン)の配列を返します。

次のように、文の文字列形式をこのメソッドに渡して、このメソッドを呼び出します。

//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。すべての(3つの)Tokenizerクラスがこのインターフェイスを実装しているため、これらすべてにこのメソッドがあります。

このメソッドは、文字列の形式で文または生のテキストを受け入れ、タイプのオブジェクトの配列を返します Span

を使用してトークンの位置を取得できます tokenizePos() 次のような方法-

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

位置(スパン)の印刷

名前の付いたクラス Spanopennlp.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クラスのメソッドは 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

トークナイザーの確率

TokenizerMEクラスのgetTokenProbabilities()メソッドは、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