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