OpenNLP-チャンキングセンテンス
文のチャンクとは、文を単語グループや動詞グループなどの単語の一部に分割/分割することです。
OpenNLPを使用したセンテンスのチャンク
文を検出するために、OpenNLPはモデル、という名前のファイルを使用します en-chunker.bin。これは、指定された生のテキストの文をチャンク化するようにトレーニングされた事前定義されたモデルです。
ザ・ opennlp.tools.chunker パッケージには、名詞句チャンクなどの非再帰的な構文注釈を検索するために使用されるクラスとインターフェースが含まれています。
メソッドを使用して文をチャンクできます chunk() の ChunkerMEクラス。このメソッドは、文のトークンとPOSタグをパラメーターとして受け入れます。したがって、チャンク化のプロセスを開始する前に、まず文をトークン化し、その品詞POSタグを生成する必要があります。
OpenNLPライブラリを使用して文をチャンクするには、次のことを行う必要があります。
文をトークン化します。
そのためのPOSタグを生成します。
をロードします en-chunker.bin を使用したモデル ChunkerModel クラス
インスタンス化する ChunkerME クラス。
を使用して文をチャンクします chunk() このクラスのメソッド。
以下は、与えられた生のテキストから文をチャンクするプログラムを書くために従うべきステップです。
ステップ1:文をトークン化する
を使用して文をトークン化します tokenize() の方法 whitespaceTokenizer 次のコードブロックに示すように、クラス。
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
ステップ2:POSタグを生成する
を使用して文のPOSタグを生成します tag() の方法 POSTaggerME 次のコードブロックに示すように、クラス。
//Generating the POS tags
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
ステップ3:モデルをロードする
文をチャンク化するためのモデルは、という名前のクラスで表されます。 ChunkerModel、パッケージに属します opennlp.tools.chunker。
文検出モデルをロードするには-
作成する InputStream モデルのオブジェクト(FileInputStreamをインスタンス化し、モデルのパスを文字列形式でコンストラクターに渡します)。
インスタンス化する ChunkerModel クラスと合格 InputStream 次のコードブロックに示すように、コンストラクターへのパラメーターとしてのモデルの(オブジェクト)-
//Loading the chunker model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel chunkerModel = new ChunkerModel(inputStream);
ステップ4:chunkerMEクラスをインスタンス化する
ザ・ chunkerME パッケージのクラス opennlp.tools.chunker文をチャンクするメソッドが含まれています。これは、最大エントロピーベースのチャンカーです。
このクラスをインスタンス化し、前の手順で作成したモデルオブジェクトを渡します。
//Instantiate the ChunkerME class
ChunkerME chunkerME = new ChunkerME(chunkerModel);
ステップ5:文をチャンクする
ザ・ chunk() の方法 ChunkerMEクラスは、渡された生のテキストの文をチャンク化するために使用されます。このメソッドは、トークンとタグを表す2つの文字列配列をパラメーターとして受け入れます。
前の手順で作成したトークン配列とタグ配列をパラメーターとして渡して、このメソッドを呼び出します。
//Generating the chunks
String result[] = chunkerME.chunk(tokens, tags);
Example
以下は、与えられた生のテキストの文をチャンクするプログラムです。このプログラムを名前のファイルに保存しますChunkerExample.java。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import opennlp.tools.chunker.ChunkerME;
import opennlp.tools.chunker.ChunkerModel;
import opennlp.tools.cmdline.postag.POSModelLoader;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class ChunkerExample{
public static void main(String args[]) throws IOException {
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating the POS tags
//Load the parts of speech model
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
//Loading the chunker model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel chunkerModel = new ChunkerModel(inputStream);
//Instantiate the ChunkerME class
ChunkerME chunkerME = new ChunkerME(chunkerModel);
//Generating the chunks
String result[] = chunkerME.chunk(tokens, tags);
for (String s : result)
System.out.println(s);
}
}
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
javac ChunkerExample.java
java ChunkerExample
実行時に、上記のプログラムは指定された文字列を読み取り、その中の文をチャンクして、以下に示すように表示します。
Loading POS Tagger model ... done (1.040s)
B-NP
I-NP
B-VP
I-VP
トークンの位置の検出
チャンクの位置またはスパンを使用して検出することもできます chunkAsSpans() の方法 ChunkerMEクラス。このメソッドは、Span型のオブジェクトの配列を返します。Span oftheという名前のクラスopennlp.tools.util パッケージは、 start そして end セットの整数。
によって返されたスパンを保存できます chunkAsSpans() 次のコードブロックに示すように、Span配列のメソッドを取得して出力します。
//Generating the tagged chunk spans
Span[] span = chunkerME.chunkAsSpans(tokens, tags);
for (Span s : span)
System.out.println(s.toString());
Example
以下は、与えられた生のテキストの文を検出するプログラムです。このプログラムを名前のファイルに保存しますChunkerSpansEample.java。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import opennlp.tools.chunker.ChunkerME;
import opennlp.tools.chunker.ChunkerModel;
import opennlp.tools.cmdline.postag.POSModelLoader;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
import opennlp.tools.util.Span;
public class ChunkerSpansEample{
public static void main(String args[]) throws IOException {
//Load the parts of speech model
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
//Loading the chunker model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel chunkerModel = new ChunkerModel(inputStream);
ChunkerME chunkerME = new ChunkerME(chunkerModel);
//Generating the tagged chunk spans
Span[] span = chunkerME.chunkAsSpans(tokens, tags);
for (Span s : span)
System.out.println(s.toString());
}
}
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
javac ChunkerSpansEample.java
java ChunkerSpansEample
実行時に、上記のプログラムは指定された文字列とその中のチャンクのスパンを読み取り、次の出力を表示します-
Loading POS Tagger model ... done (1.059s)
[0..2) NP
[2..4) VP
チャンカー確率の検出
ザ・ probs() の方法 ChunkerME classは、最後にデコードされたシーケンスの確率を返します。
//Getting the probabilities of the last decoded sequence
double[] probs = chunkerME.probs();
以下は、最後にデコードされたシーケンスの確率を印刷するプログラムです。 chunker。このプログラムを名前のファイルに保存しますChunkerProbsExample.java。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import opennlp.tools.chunker.ChunkerME;
import opennlp.tools.chunker.ChunkerModel;
import opennlp.tools.cmdline.postag.POSModelLoader;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class ChunkerProbsExample{
public static void main(String args[]) throws IOException {
//Load the parts of speech model
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
//Loading the chunker model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel cModel = new ChunkerModel(inputStream);
ChunkerME chunkerME = new ChunkerME(cModel);
//Generating the chunk tags
chunkerME.chunk(tokens, tags);
//Getting the probabilities of the last decoded sequence
double[] probs = chunkerME.probs();
for(int i = 0; i<probs.length; i++)
System.out.println(probs[i]);
}
}
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
javac ChunkerProbsExample.java
java ChunkerProbsExample
実行時に、上記のプログラムは指定された文字列を読み取り、チャンク化し、最後にデコードされたシーケンスの確率を出力します。
0.9592746040797778
0.6883933131241501
0.8830563473996004
0.8951150529746051