Opennlp-finding-parts-of-speech

提供:Dev Guides
移動先:案内検索

OpenNLP-品詞の検索

OpenNLPを使用すると、特定の文の品詞を検出して印刷することもできます。 品詞のフルネームの代わりに、OpenNLPは各品詞の短い形式を使用します。 次の表は、OpenNLPによって検出されたスピーチのさまざまな部分とその意味を示しています。

Parts of Speech Meaning of parts of speech
NN Noun, singular or mass
DT Determiner
VB Verb, base form
VBD Verb, past tense
VBZ Verb, third person singular present
IN Preposition or subordinating conjunction
NNP Proper noun, singular
TO to
JJ Adjective

品詞のタグ付け

文の品詞にタグを付けるために、OpenNLPは en-posmaxent.bin という名前のファイルであるモデルを使用します。 これは、所定の生テキストの品詞にタグを付けるように訓練された事前定義モデルです。

*opennlp.tools.postag* パッケージの *POSTaggerME* クラスは、このモデルをロードし、OpenNLPライブラリを使用して、指定された生テキストの品詞にタグを付けるために使用されます。 そうするために、あなたはする必要があります-
  • POSModel クラスを使用して en-pos-maxent.bin モデルを読み込みます。
  • POSTaggerME クラスをインスタンス化します。
  • 文をトークン化します。
  • * tag()*メソッドを使用してタグを生成します。
  • POSSample クラスを使用してトークンとタグを印刷します。

以下は、 POSTaggerME クラスを使用して、指定された生テキストのスピーチの部分にタグを付けるプログラムを作成するために従うべき手順です。

ステップ1:モデルを読み込む

POSタグ付けのモデルは、パッケージ opennlp.tools.postag に属する POSModel という名前のクラスで表されます。

トークナイザーモデルをロードするには-

  • モデルの InputStream オブジェクトを作成します(FileInputStreamをインスタンス化し、モデルのパスをString形式でコンストラクターに渡します)。
  • 次のコードブロックに示すように、 POSModel クラスをインスタンス化し、モデルの InputStream (オブジェクト)をそのコンストラクタへのパラメータとして渡します-
//Loading Parts of speech-maxent model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModel(inputStream);

ステップ2:POSTaggerMEクラスのインスタンス化

パッケージ opennlp.tools.postagPOSTaggerME クラスは、指定された生テキストの品詞を予測するために使用されます。 最大エントロピーを使用して決定を行います。

以下に示すように、このクラスをインスタンス化し、前の手順で作成されたモデルオブジェクトを渡します-

//Instantiating POSTaggerME class
POSTaggerME tagger = new POSTaggerME(model);

ステップ3:文のトークン化

*whitespaceTokenizer* クラスの* tokenize()*メソッドは、渡された生テキストをトークン化するために使用されます。 このメソッドは、パラメーターとしてストリング変数を受け入れ、ストリング(トークン)の配列を返します。
*whitespaceTokenizer* クラスをインスタンス化し、文の文字列形式をこのメソッドに渡すことでこのメソッドを呼び出します。
//Tokenizing the sentence using WhitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);

ステップ4:タグを生成する

*whitespaceTokenizer* クラスの* tag()*メソッドは、トークンの文にPOSタグを割り当てます。 このメソッドは、トークンの配列(String)をパラメーターとして受け入れ、タグ(配列)を返します。

前のステップで生成されたトークンを渡すことにより、* tag()*メソッドを呼び出します。

//Generating tags
String[] tags = tagger.tag(tokens);

ステップ5:トークンとタグを印刷する

*POSSample* クラスは、POSタグ付きの文を表します。 このクラスをインスタンス化するには、(テキストの)トークンの配列とタグの配列が必要です。

このクラスの* toString()メソッドは、タグ付きの文を返します。 次のコードブロックに示すように、前の手順で作成したトークンとタグ配列を渡してこのクラスをインスタンス化し、その toString()*メソッドを呼び出します。

//Instantiating the POSSample class
POSSample sample = new POSSample(tokens, tags);
System.out.println(sample.toString());

以下は、与えられた生のテキストの品詞にタグを付けるプログラムです。 このプログラムを* PosTaggerExample.java。*という名前のファイルに保存します

import java.io.FileInputStream;
import java.io.InputStream;

import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSSample;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;

public class PosTaggerExample {

   public static void main(String args[]) throws Exception{

     //Loading Parts of speech-maxent model
      InputStream inputStream = new
         FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin");
      POSModel model = new POSModel(inputStream);

     //Instantiating POSTaggerME class
      POSTaggerME tagger = new POSTaggerME(model);

      String sentence = "Hi welcome to finddevguides";

     //Tokenizing the sentence using WhitespaceTokenizer class
      WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
      String[] tokens = whitespaceTokenizer.tokenize(sentence);

     //Generating tags
      String[] tags = tagger.tag(tokens);

     //Instantiating the POSSample class
      POSSample sample = new POSSample(tokens, tags);
      System.out.println(sample.toString());

   }
}

次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-

javac PosTaggerExample.java
java PosTaggerExample

実行時に、上記のプログラムは指定されたテキストを読み取り、これらの文の品詞を検出して、以下に示すように表示します。

Hi_NNP welcome_JJ to_TO finddevguides_VB

POSタガーパフォーマンス

以下は、生のテキストの品詞にタグを付けるプログラムです。 また、パフォーマンスを監視し、タガーのパフォーマンスを表示します。 このプログラムを PosTagger_Performance.java という名前のファイルに保存します。

import java.io.FileInputStream;
import java.io.InputStream;

import opennlp.tools.cmdline.PerformanceMonitor;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSSample;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;

public class PosTagger_Performance {
   public static void main(String args[]) throws Exception{
     //Loading Parts of speech-maxent model
      InputStream inputStream = new
         FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin");
      POSModel model = new POSModel(inputStream);

     //Creating an object of WhitespaceTokenizer class
      WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;

     //Tokenizing the sentence
      String sentence = "Hi welcome to finddevguides";
      String[] tokens = whitespaceTokenizer.tokenize(sentence);

     //Instantiating POSTaggerME class
      POSTaggerME tagger = new POSTaggerME(model);

     //Generating tags
      String[] tags = tagger.tag(tokens);

     //Instantiating POSSample class
      POSSample sample = new POSSample(tokens, tags);
      System.out.println(sample.toString());

     //Monitoring the performance of POS tagger
      PerformanceMonitor perfMon = new PerformanceMonitor(System.err, "sent");
      perfMon.start();
      perfMon.incrementCounter();
      perfMon.stopAndPrintFinalResult();
   }
}

次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-

javac PosTaggerExample.java
java PosTaggerExample

実行時に、上記のプログラムは指定されたテキストを読み取り、これらの文の品詞にタグを付けて表示します。 さらに、POSタガーのパフォーマンスも監視して表示します。

Hi_NNP welcome_JJ to_TO finddevguides_VB
Average: 0.0 sent/s
Total: 1 sent
Runtime: 0.0s

POSタガー確率

*POSTaggerME* クラスの* probs()*メソッドは、最近タグ付けされた文の各タグの確率を見つけるために使用されます。
//Getting the probabilities of the recent calls to tokenizePos() method
double[] probs = detector.getSentenceProbabilities();

以下は、最後のタグ付き文の各タグの確率を表示するプログラムです。 このプログラムを PosTaggerProbs.java という名前のファイルに保存します。

import java.io.FileInputStream;
import java.io.InputStream;

import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSSample;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;

public class PosTaggerProbs {

   public static void main(String args[]) throws Exception{

     //Loading Parts of speech-maxent model
      InputStream inputStream = new FileInputStream("C:/OpenNLP_mdl/en-pos-maxent.bin");
      POSModel model = new POSModel(inputStream);

     //Creating an object of WhitespaceTokenizer class
      WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;

     //Tokenizing the sentence
      String sentence = "Hi welcome to finddevguides";
      String[] tokens = whitespaceTokenizer.tokenize(sentence);

     //Instantiating POSTaggerME class
      POSTaggerME tagger = new POSTaggerME(model);

     //Generating tags
      String[] tags = tagger.tag(tokens);

     //Instantiating the POSSample class
      POSSample sample = new POSSample(tokens, tags);
      System.out.println(sample.toString());

     //Probabilities for each tag of the last tagged sentence.
      double [] probs = tagger.probs();
      System.out.println("  ");

     //Printing the probabilities
      for(int i = 0; i<probs.length; i++)
         System.out.println(probs[i]);
   }
}

次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-

javac TokenizerMEProbs.java
java TokenizerMEProbs

実行時に、上記のプログラムは指定された生のテキストを読み取り、トークン内の各トークンの品詞にタグを付けて表示します。 さらに、以下に示すように、特定の文の品詞ごとの確率も表示します。

Hi_NNP welcome_JJ to_TO finddevguides_VB
0.6416834779738033
0.42983612874819177
0.8584513635863117
0.4394784478206072