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);
位置(スパン)の印刷
名前の付いたクラス 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クラスのメソッドは 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