OpenNLP-クイックガイド

NLPは、Webページやテキストドキュメントなどの自然言語ソースから意味のある有用な情報を引き出すために使用されるツールのセットです。

Open NLPとは何ですか?

Apache OpenNLP自然言語テキストの処理に使用されるオープンソースのJavaライブラリです。このライブラリを使用して、効率的なテキスト処理サービスを構築できます。

OpenNLPは、トークン化、文のセグメンテーション、品詞のタグ付け、名前付きエンティティの抽出、チャンク化、解析、共参照の解決などのサービスを提供します。

OpenNLPの機能

以下はOpenNLPの注目すべき機能です-

  • Named Entity Recognition (NER) − Open NLPはNERをサポートしており、クエリの処理中でも場所、人、物の名前を抽出できます。

  • Summarize −を使用して summarize 機能を使用すると、段落、記事、ドキュメント、またはそれらのコレクションをNLPで要約できます。

  • Searching − OpenNLPでは、特定の単語が変更されたりスペルが間違っていたりしても、特定の検索文字列またはその同義語を特定のテキストで識別できます。

  • Tagging (POS) − NLPのタグ付けは、テキストをさまざまな文法要素に分割してさらに分析するために使用されます。

  • Translation − NLPでは、翻訳はある言語を別の言語に翻訳するのに役立ちます。

  • Information grouping − NLPのこのオプションは、品詞と同様に、ドキュメントのコンテンツ内のテキスト情報をグループ化します。

  • Natural Language Generation −データベースから情報を生成し、気象分析や医療レポートなどの情報レポートを自動化するために使用されます。

  • Feedback Analysis −名前が示すように、NLPは製品に関して人々からさまざまな種類のフィードバックを収集し、製品がどれだけ彼らの心をつかむことに成功しているかを分析します。

  • Speech recognition −人間の発話を分析することは困難ですが、NLPにはこの要件に対応するいくつかの機能が組み込まれています。

NLPAPIを開く

Apache OpenNLPライブラリは、文の検出、トークン化、名前の検索、品詞のタグ付け、文のチャンク化、解析、相互参照の解決、ドキュメントの分類など、自然言語処理のさまざまなタスクを実行するためのクラスとインターフェイスを提供します。

これらのタスクに加えて、これらのタスクのいずれかについて独自のモデルをトレーニングおよび評価することもできます。

OpenNLP CLI

ライブラリに加えて、OpenNLPは、モデルをトレーニングおよび評価できるコマンドラインインターフェイス(CLI)も提供します。このトピックについては、このチュートリアルの最後の章で詳しく説明します。

NLPモデルを開く

さまざまなNLPタスクを実行するために、OpenNLPは事前定義されたモデルのセットを提供します。このセットには、さまざまな言語のモデルが含まれています。

モデルのダウンロード

以下の手順に従って、OpenNLPが提供する定義済みモデルをダウンロードできます。

Step 1 −次のリンクをクリックして、OpenNLPモデルのインデックスページを開きます。 http://opennlp.sourceforge.net/models-1.5/。

Step 2−所定のリンクにアクセスすると、さまざまな言語のコンポーネントのリストとそれらをダウンロードするためのリンクが表示されます。ここでは、OpenNLPによって提供されるすべての定義済みモデルのリストを取得できます。

これらすべてのモデルをフォルダーにダウンロードします C:/OpenNLP_models/>、それぞれのリンクをクリックします。これらのモデルはすべて言語に依存しており、これらを使用するときは、モデルの言語が入力テキストの言語と一致していることを確認する必要があります。

OpenNLPの歴史

  • 2010年、OpenNLPはApacheのインキュベーションに入りました。

  • 2011年にApacheOpenNLP 1.5.2 Incubatingがリリースされ、同じ年にトップレベルのApacheプロジェクトとして卒業しました。

  • 2015年、OpenNLPは1.6.0でリリースされました。

この章では、システムにOpenNLP環境をセットアップする方法について説明します。インストールプロセスから始めましょう。

OpenNLPのインストール

ダウンロードする手順は次のとおりです Apache OpenNLP library あなたのシステムで。

Step 1 −のホームページを開く Apache OpenNLP 次のリンクをクリックして- https://opennlp.apache.org/。

Step 2 −次に、をクリックします。 Downloadsリンク。クリックすると、Apache Software FoundationDistributionディレクトリにリダイレクトされるさまざまなミラーを見つけることができるページに移動します。

Step 3−このページには、さまざまなApacheディストリビューションをダウンロードするためのリンクがあります。それらを参照し、OpenNLPディストリビューションを見つけてクリックします。

Step 4 −クリックすると、以下に示すように、OpenNLPディストリビューションのインデックスを表示できるディレクトリにリダイレクトされます。

利用可能なディストリビューションから最新バージョンをクリックします。

Step 5−各ディストリビューションは、OpenNLPライブラリのソースファイルとバイナリファイルをさまざまな形式で提供します。ソースファイルとバイナリファイルをダウンロードし、apache-opennlp-1.6.0-bin.zip そして apache-opennlp1.6.0-src.zip (Windowsの場合)。

クラスパスの設定

OpenNLPライブラリをダウンロードした後、そのパスをに設定する必要があります。 binディレクトリ。OpenNLPライブラリをシステムのEドライブにダウンロードしたと仮定します。

次に、以下の手順に従います。

Step 1 −「マイコンピュータ」を右クリックして「プロパティ」を選択します。

Step 2 − [詳細設定]タブの下の[環境変数]ボタンをクリックします。

Step 3 −を選択します path 変数をクリックして、 Edit 次のスクリーンショットに示すように、ボタン。

Step 4 − [環境変数の編集]ウィンドウで、[ New ボタンをクリックして、OpenNLPディレクトリのパスを追加します E:\apache-opennlp-1.6.0\bin をクリックします OK 次のスクリーンショットに示すように、ボタン。

Eclipseのインストール

OpenNLPライブラリのEclipse環境を設定するには、 Build path JARファイルに、またはを使用して pom.xml

JARファイルへのビルドパスの設定

以下の手順に従って、EclipseにOpenNLPをインストールします-

Step 1 −システムにEclipse環境がインストールされていることを確認してください。

Step 2−Eclipseを開きます。以下に示すように、「ファイル」→「新規」→「新規プロジェクトを開く」をクリックします。

Step 3 −あなたは New Projectウィザード。このウィザードで、Javaプロジェクトを選択し、[Next ボタン。

Step 4 −次に、 New Java Project wizard。ここで、新しいプロジェクトを作成し、をクリックする必要がありますNext 以下に示すように、ボタン。

Step 5 −新しいプロジェクトを作成したら、それを右クリックして、 Build Path をクリックします Configure Build Path

Step 6 −次に、 Java Build Pathウィザード。ここで、をクリックしますAdd External JARs 以下に示すように、ボタン。

Step 7 −jarファイルを選択します opennlp-tools-1.6.0.jar そして opennlp-uima-1.6.0.jar にあります lib のフォルダ apache-opennlp-1.6.0 folder

クリックすると Open 上の画面のボタンをクリックすると、選択したファイルがライブラリに追加されます。

クリックすると OK、必要なJARファイルを現在のプロジェクトに正常に追加し、以下に示すように、参照ライブラリを展開することで、これらの追加されたライブラリを確認できます。

pom.xmlの使用

プロジェクトをMavenプロジェクトに変換し、次のコードをそのプロジェクトに追加します pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
   <modelVersion>4.0.0</modelVersion> 
   <groupId>myproject</groupId> 
   <artifactId>myproject</artifactId> 
   <version>0.0.1-SNAPSHOT</version> 
   <build> 
      <sourceDirectory>src</sourceDirectory> 
      <plugins> 
         <plugin> 
            <artifactId>maven-compiler-plugin</artifactId> 
            <version>3.5.1</version> 
            <configuration> 
               <source>1.8</source> 
               <target>1.8</target> 
            </configuration> 
         </plugin> 
      </plugins> 
   </build> 
   <dependencies>  
      <dependency> 
         <groupId>org.apache.opennlp</groupId> 
         <artifactId>opennlp-tools</artifactId> 
         <version>1.6.0</version> 
     </dependency> 
     <dependency> 
         <groupId>org.apache.opennlp</groupId> 
         <artifactId>opennlp-uima</artifactId> 
         <version>1.6.0</version> 
      </dependency>      
  </dependencies>  
</project>

この章では、このチュートリアルの後続の章で使用するクラスとメソッドについて説明します。

文の検出

SentenceModelクラス

このクラスは、指定された生のテキスト内の文を検出するために使用される事前定義されたモデルを表します。このクラスはパッケージに属していますopennlp.tools.sentdetect

このクラスのコンストラクターは、 InputStream 文検出器モデルファイル(en-sent.bin)の目的語。

SentenceDetectorMEクラス

このクラスはパッケージに属しています opennlp.tools.sentdetect生のテキストを文に分割するメソッドが含まれています。このクラスは、最大エントロピーモデルを使用して、文字列内の文末文字を評価し、それらが文の終わりを示しているかどうかを判断します。

このクラスの重要なメソッドは次のとおりです。

S.No メソッドと説明
1

sentDetect()

このメソッドは、渡された生のテキスト内の文を検出するために使用されます。String変数をパラメーターとして受け取り、指定された生のテキストからの文を保持するString配列を返します。

2

sentPosDetect()

このメソッドは、指定されたテキスト内の文の位置を検出するために使用されます。このメソッドは、文を表す文字列変数を受け入れ、タイプのオブジェクトの配列を返しますSpan

名前の付いたクラス Spanopennlp.tools.util パッケージは、セットの開始整数と終了整数を格納するために使用されます。

3

getSentenceProbabilities()

このメソッドは、への最新の呼び出しに関連付けられた確率を返します sentDetect() 方法。

トークン化

TokenizerModelクラス

このクラスは、指定された文をトークン化するために使用される事前定義されたモデルを表します。このクラスはパッケージに属していますopennlp.tools.tokenizer

このクラスのコンストラクターは、 InputStream トークナイザーモデルファイル(entoken.bin)のオブジェクト。

クラス

トークン化を実行するために、OpenNLPライブラリは3つの主要なクラスを提供します。3つのクラスはすべて、と呼ばれるインターフェイスを実装しますTokenizer

S.No クラスと説明
1

SimpleTokenizer

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

2

WhitespaceTokenizer

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

3

TokenizerME

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

これらのクラスには、次のメソッドが含まれています。

S.No メソッドと説明
1

tokenize()

このメソッドは、生のテキストをトークン化するために使用されます。このメソッドは、パラメーターとしてString変数を受け取り、String(トークン)の配列を返します。

2

sentPosDetect()

このメソッドは、トークンの位置またはスパンを取得するために使用されます。文字列の形式で文(または)生のテキストを受け入れ、タイプのオブジェクトの配列を返しますSpan

上記の2つの方法に加えて、 TokenizerME クラスには getTokenProbabilities() 方法。

S.No メソッドと説明
1

getTokenProbabilities()

このメソッドは、への最新の呼び出しに関連付けられた確率を取得するために使用されます tokenizePos() 方法。

NameEntityRecognition

TokenNameFinderModelクラス

このクラスは、指定された文で名前付きエンティティを検索するために使用される事前定義されたモデルを表します。このクラスはパッケージに属していますopennlp.tools.namefind

このクラスのコンストラクターは、 InputStream ネームファインダーモデルファイル(enner-person.bin)のオブジェクト。

NameFinderMEクラス

クラスはパッケージに属しています opennlp.tools.namefindまた、NERタスクを実行するためのメソッドが含まれています。このクラスは、最大エントロピーモデルを使用して、指定された生のテキスト内の名前付きエンティティを検索します。

S.No メソッドと説明
1

find()

このメソッドは、生のテキスト内の名前を検出するために使用されます。生のテキストを表すString変数をパラメーターとして受け取り、Span型のオブジェクトの配列を返します。

2

probs()

このメソッドは、最後にデコードされたシーケンスの確率を取得するために使用されます。

品詞を見つける

POSModelクラス

このクラスは、特定の文の品詞にタグを付けるために使用される事前定義されたモデルを表します。このクラスはパッケージに属していますopennlp.tools.postag

このクラスのコンストラクターは、 InputStream pos-taggerモデルファイル(enpos-maxent.bin)のオブジェクト。

POSTaggerMEクラス

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

S.No メソッドと説明
1

tag()

このメソッドは、トークンPOSタグの文を割り当てるために使用されます。このメソッドは、トークンの配列(String)をパラメーターとして受け取り、タグ(array)を返します。

2

getSentenceProbabilities()

このメソッドは、最近タグ付けされた文の各タグの確率を取得するために使用されます。

文の解析

ParserModelクラス

このクラスは、指定された文を解析するために使用される事前定義されたモデルを表します。このクラスはパッケージに属していますopennlp.tools.parser

このクラスのコンストラクターは、 InputStream パーサーモデルファイル(en-parserchunking.bin)のオブジェクト。

パーサーファクトリクラス

このクラスはパッケージに属しています opennlp.tools.parser パーサーを作成するために使用されます。

S.No メソッドと説明
1

create()

これは静的メソッドであり、パーサーオブジェクトを作成するために使用されます。このメソッドは、パーサーモデルファイルのFilestreamオブジェクトを受け入れます。

ParserToolクラス

このクラスはに属します opennlp.tools.cmdline.parser パッケージと、コンテンツを解析するために使用されます。

S.No メソッドと説明
1

parseLine()

この方法の ParserToolクラスは、OpenNLPの生のテキストを解析するために使用されます。このメソッドは次を受け入れます-

  • 解析するテキストを表す文字列変数。
  • パーサーオブジェクト。
  • 実行される解析の数を表す整数。

チャンキング

ChunkerModelクラス

このクラスは、文を小さなチャンクに分割するために使用される事前定義されたモデルを表します。このクラスはパッケージに属していますopennlp.tools.chunker

このクラスのコンストラクターは、 InputStream のオブジェクト chunker モデルファイル(enchunker.bin)。

ChunkerMEクラス

このクラスは、という名前のパッケージに属しています opennlp.tools.chunker そしてそれは与えられた文をより小さなチャンクに分割するために使用されます。

S.No メソッドと説明
1

chunk()

このメソッドは、指定された文を小さなチャンクに分割するために使用されます。文のトークンを受け入れ、P芸術 Of Sパラメータとしてのピーチタグ。

2

probs()

このメソッドは、最後にデコードされたシーケンスの確率を返します。

自然言語を処理する際に、文の最初と最後を決定することは、対処すべき問題の1つです。このプロセスは、Sentence B境界 Disambiguation(SBD)または単に文を壊す。

特定のテキスト内の文を検出するために使用する手法は、テキストの言語によって異なります。

Javaを使用した文の検出

正規表現と一連の単純なルールを使用して、Javaで特定のテキスト内の文を検出できます。

たとえば、ピリオド、疑問符、または感嘆符が指定されたテキストの文を終了すると仮定すると、を使用して文を分割できます。 split() の方法 Stringクラス。ここでは、文字列形式で正規表現を渡す必要があります。

以下は、Java正規表現を使用して特定のテキストの文を決定するプログラムです。 (split method)。このプログラムを名前のファイルに保存しますSentenceDetection_RE.java

public class SentenceDetection_RE {  
   public static void main(String args[]){ 
     
      String sentence = " Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
     
      String simple = "[.?!]";      
      String[] splitString = (sentence.split(simple));     
      for (String string : splitString)   
         System.out.println(string);      
   } 
}

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

javac SentenceDetection_RE.java 
java SentenceDetection_RE

上記のプログラムを実行すると、次のメッセージを表示するPDFドキュメントが作成されます。

Hi 
How are you 
Welcome to Tutorialspoint 
We provide free tutorials on various technologies

OpenNLPを使用した文の検出

文を検出するために、OpenNLPは事前定義されたモデルを使用します。 en-sent.bin。この事前定義されたモデルは、特定の生のテキスト内の文を検出するようにトレーニングされています。

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

OpenNLPライブラリを使用して文を検出するには、次のことを行う必要があります。

  • をロードします en-sent.bin を使用したモデル SentenceModel クラス

  • インスタンス化する SentenceDetectorME クラス。

  • を使用して文を検出します sentDetect() このクラスのメソッド。

以下は、与えられた生のテキストから文を検出するプログラムを書くために従うべきステップです。

ステップ1:モデルをロードする

文検出のモデルは、という名前のクラスで表されます。 SentenceModel、パッケージに属します opennlp.tools.sentdetect

文検出モデルをロードするには-

  • 作成する InputStream モデルのオブジェクト(FileInputStreamをインスタンス化し、モデルのパスを文字列形式でコンストラクターに渡します)。

  • インスタンス化する SentenceModel クラスと合格 InputStream 次のコードブロックに示すように、コンストラクターへのパラメーターとしてのモデルの(オブジェクト)-

//Loading sentence detector model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/ensent.bin"); 
SentenceModel model = new SentenceModel(inputStream);

ステップ2:SentenceDetectorMEクラスをインスタンス化する

ザ・ SentenceDetectorME パッケージのクラス opennlp.tools.sentdetect生のテキストを文に分割するメソッドが含まれています。このクラスは、最大エントロピーモデルを使用して、文字列内の文末文字を評価し、それらが文の終わりを示しているかどうかを判断します。

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

//Instantiating the SentenceDetectorME class 
SentenceDetectorME detector = new SentenceDetectorME(model);

ステップ3:文を検出する

ザ・ sentDetect() の方法 SentenceDetectorMEクラスは、渡された生のテキスト内の文を検出するために使用されます。このメソッドは、String変数をパラメーターとして受け入れます。

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

//Detecting the sentence 
String sentences[] = detector.sentDetect(sentence);

Example

以下は、与えられた生のテキストの文を検出するプログラムです。このプログラムをという名前のファイルに保存しますSentenceDetectionME.java

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

import opennlp.tools.sentdetect.SentenceDetectorME; 
import opennlp.tools.sentdetect.SentenceModel;  

public class SentenceDetectionME { 
  
   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 sentence detector model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin"); 
      SentenceModel model = new SentenceModel(inputStream); 
       
      //Instantiating the SentenceDetectorME class 
      SentenceDetectorME detector = new SentenceDetectorME(model);  
    
      //Detecting the sentence
      String sentences[] = detector.sentDetect(sentence); 
    
      //Printing the sentences 
      for(String sent : sentences)        
         System.out.println(sent);  
   } 
}

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

javac SentenceDetectorME.java 
java SentenceDetectorME

実行時に、上記のプログラムは指定された文字列を読み取り、その中の文を検出して、次の出力を表示します。

Hi. How are you? 
Welcome to Tutorialspoint. 
We provide free tutorials on various technologies

文の位置を検出する

また、sentPosDetect()メソッドを使用して文の位置を検出することもできます。 SentenceDetectorME class

以下は、与えられた生のテキストから文の位置を検出するプログラムを書くために従うべきステップです。

ステップ1:モデルをロードする

文検出のモデルは、という名前のクラスで表されます。 SentenceModel、パッケージに属します opennlp.tools.sentdetect

文検出モデルをロードするには-

  • 作成する InputStream モデルのオブジェクト(FileInputStreamをインスタンス化し、モデルのパスを文字列形式でコンストラクターに渡します)。

  • インスタンス化する SentenceModel クラスと合格 InputStream 次のコードブロックに示すように、コンストラクターへのパラメーターとしてのモデルの(オブジェクト)。

//Loading sentence detector model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin"); 
SentenceModel model = new SentenceModel(inputStream);

ステップ2:SentenceDetectorMEクラスをインスタンス化する

ザ・ SentenceDetectorME パッケージのクラス opennlp.tools.sentdetect生のテキストを文に分割するメソッドが含まれています。このクラスは、最大エントロピーモデルを使用して、文字列内の文末文字を評価し、それらが文の終わりを示しているかどうかを判断します。

このクラスをインスタンス化し、前の手順で作成したモデルオブジェクトを渡します。

//Instantiating the SentenceDetectorME class 
SentenceDetectorME detector = new SentenceDetectorME(model);

ステップ3:文の位置を検出する

ザ・ sentPosDetect() の方法 SentenceDetectorMEクラスは、渡された生のテキスト内の文の位置を検出するために使用されます。このメソッドは、String変数をパラメーターとして受け入れます。

文の文字列形式をパラメータとしてこのメ​​ソッドに渡すことにより、このメソッドを呼び出します。

//Detecting the position of the sentences in the paragraph  
Span[] spans = detector.sentPosDetect(sentence);

ステップ4:文のスパンを印刷する

ザ・ sentPosDetect() の方法 SentenceDetectorME クラスは、次のタイプのオブジェクトの配列を返します Span。Span oftheという名前のクラスopennlp.tools.util パッケージは、セットの開始整数と終了整数を格納するために使用されます。

によって返されたスパンを保存できます sentPosDetect() 次のコードブロックに示すように、Span配列のメソッドを取得して出力します。

//Printing the sentences and their spans of a sentence 
for (Span span : spans)         
System.out.println(paragraph.substring(span);

Example

以下は、与えられた生のテキストの文を検出するプログラムです。このプログラムをという名前のファイルに保存しますSentenceDetectionME.java

import java.io.FileInputStream; 
import java.io.InputStream; 
  
import opennlp.tools.sentdetect.SentenceDetectorME; 
import opennlp.tools.sentdetect.SentenceModel; 
import opennlp.tools.util.Span;

public class SentencePosDetection { 
  
   public static void main(String args[]) throws Exception { 
   
      String paragraph = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
       
      //Loading sentence detector model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin"); 
      SentenceModel model = new SentenceModel(inputStream); 
       
      //Instantiating the SentenceDetectorME class 
      SentenceDetectorME detector = new SentenceDetectorME(model);  
       
      //Detecting the position of the sentences in the raw text 
      Span spans[] = detector.sentPosDetect(paragraph); 
       
      //Printing the spans of the sentences in the paragraph 
      for (Span span : spans)         
         System.out.println(span);  
   } 
}

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

javac SentencePosDetection.java 
java SentencePosDetection

実行時に、上記のプログラムは指定された文字列を読み取り、その中の文を検出して、次の出力を表示します。

[0..16) 
[17..43) 
[44..93)

文とその位置

ザ・ substring() Stringクラスのメソッドは begin そしてその end offsetsそれぞれの文字列を返します。次のコードブロックに示すように、このメソッドを使用して、文とそのスパン(位置)を一緒に印刷できます。

for (Span span : spans)         
   System.out.println(sen.substring(span.getStart(), span.getEnd())+" "+ span);

以下は、与えられた生のテキストから文を検出し、それらをそれらの位置とともに表示するプログラムです。このプログラムを名前の付いたファイルに保存しますSentencesAndPosDetection.java

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

import opennlp.tools.sentdetect.SentenceDetectorME; 
import opennlp.tools.sentdetect.SentenceModel; 
import opennlp.tools.util.Span; 
   
public class SentencesAndPosDetection { 
  
   public static void main(String args[]) throws Exception { 
     
      String sen = "Hi. How are you? Welcome to Tutorialspoint." 
         + " We provide free tutorials on various technologies"; 
      //Loading a sentence model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin"); 
      SentenceModel model = new SentenceModel(inputStream); 
       
      //Instantiating the SentenceDetectorME class 
      SentenceDetectorME detector = new SentenceDetectorME(model);  
       
      //Detecting the position of the sentences in the paragraph  
      Span[] spans = detector.sentPosDetect(sen);  
      
      //Printing the sentences and their spans of a paragraph 
      for (Span span : spans)         
         System.out.println(sen.substring(span.getStart(), span.getEnd())+" "+ span);  
   } 
}

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

javac SentencesAndPosDetection.java 
java SentencesAndPosDetection

実行時に、上記のプログラムは指定された文字列を読み取り、文とその位置を検出して、次の出力を表示します。

Hi. How are you? [0..16) 
Welcome to Tutorialspoint. [17..43)  
We provide free tutorials on various technologies [44..93)

文の確率の検出

ザ・ getSentenceProbabilities() の方法 SentenceDetectorME クラスは、sentDetect()メソッドへの最新の呼び出しに関連付けられた確率を返します。

//Getting the probabilities of the last decoded sequence       
double[] probs = detector.getSentenceProbabilities();

以下は、sentDetect()メソッドの呼び出しに関連する確率を出力するプログラムです。このプログラムを名前のファイルに保存しますSentenceDetectionMEProbs.java

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

import opennlp.tools.sentdetect.SentenceDetectorME; 
import opennlp.tools.sentdetect.SentenceModel;  

public class SentenceDetectionMEProbs { 
  
   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 sentence detector model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
      SentenceModel model = new SentenceModel(inputStream); 
       
      //Instantiating the SentenceDetectorME class
      SentenceDetectorME detector = new SentenceDetectorME(model);  
      
      //Detecting the sentence 
      String sentences[] = detector.sentDetect(sentence); 
    
      //Printing the sentences 
      for(String sent : sentences)        
         System.out.println(sent);   
         
      //Getting the probabilities of the last decoded sequence       
      double[] probs = detector.getSentenceProbabilities(); 
       
      System.out.println("  "); 
       
      for(int i = 0; i<probs.length; i++) 
         System.out.println(probs[i]); 
   } 
}

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

javac SentenceDetectionMEProbs.java 
java SentenceDetectionMEProbs

実行時に、上記のプログラムは指定された文字列を読み取り、文を検出して出力します。さらに、以下に示すように、sentDetect()メソッドへの最新の呼び出しに関連付けられた確率も返します。

Hi. How are you? 
Welcome to Tutorialspoint. 
We provide free tutorials on various technologies 
   
0.9240246995179983 
0.9957680129995953 
1.0

与えられた文をより小さな部分(トークン)に切り刻むプロセスは、 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

特定のテキストから名前、人、場所、その他のエンティティを見つけるプロセスは、次のように知られています。 Named Entity Rエコグニション(NER)。この章では、OpenNLPライブラリを使用してJavaプログラムを介してNERを実行する方法について説明します。

オープンNLPを使用した名前付きエンティティの認識

さまざまなNERタスクを実行するために、OpenNLPはさまざまな定義済みモデル、つまりen-nerdate.bn、en-ner-location.bin、en-ner-organization.bin、en-ner-person.bin、およびen-ner-timeを使用します。置き場。これらのファイルはすべて事前定義されたモデルであり、特定の生テキスト内のそれぞれのエンティティを検出するようにトレーニングされています。

ザ・ opennlp.tools.namefindパッケージには、NERタスクの実行に使用されるクラスとインターフェイスが含まれています。OpenNLPライブラリを使用してNERタスクを実行するには、次のことを行う必要があります。

  • を使用してそれぞれのモデルをロードします TokenNameFinderModel クラス。

  • インスタンス化する NameFinder クラス。

  • 名前を見つけて印刷します。

以下は、指定された生のテキストから名前エンティティを検出するプログラムを作成するために従うべき手順です。

ステップ1:モデルをロードする

文検出のモデルは、という名前のクラスで表されます。 TokenNameFinderModel、パッケージに属します opennlp.tools.namefind

NERモデルをロードするには-

  • 作成する InputStream モデルのオブジェクト(FileInputStreamをインスタンス化し、適切なNERモデルのパスを文字列形式でコンストラクターに渡します)。

  • インスタンス化する TokenNameFinderModel クラスと合格 InputStream 次のコードブロックに示すように、コンストラクターへのパラメーターとしてのモデルの(オブジェクト)。

//Loading the NER-person model 
InputStream inputStreamNameFinder = new FileInputStream(".../en-nerperson.bin");       
TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder);

ステップ2:NameFinderMEクラスをインスタンス化する

ザ・ NameFinderME パッケージのクラス opennlp.tools.namefindNERタスクを実行するためのメソッドが含まれています。このクラスは、最大エントロピーモデルを使用して、指定された生のテキスト内の名前付きエンティティを検索します。

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

//Instantiating the NameFinderME class 
NameFinderME nameFinder = new NameFinderME(model);

ステップ3:文の中の名前を見つける

ザ・ find() の方法 NameFinderMEクラスは、渡された生のテキスト内の名前を検出するために使用されます。このメソッドは、String変数をパラメーターとして受け入れます。

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

//Finding the names in the sentence 
Span nameSpans[] = nameFinder.find(sentence);

ステップ4:文中の名前のスパンを印刷する

ザ・ find() の方法 NameFinderMEclassは、Span型のオブジェクトの配列を返します。Span oftheという名前のクラスopennlp.tools.util パッケージは、 start そして end セットの整数。

によって返されたスパンを保存できます find() 次のコードブロックに示すように、Span配列のメソッドを取得して出力します。

//Printing the sentences and their spans of a sentence 
for (Span span : spans)         
System.out.println(paragraph.substring(span);

NER Example

以下は、与えられた文を読み、その中の人の名前のスパンを認識するプログラムです。このプログラムを名前のファイルに保存しますNameFinderME_Example.java

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

import opennlp.tools.namefind.NameFinderME; 
import opennlp.tools.namefind.TokenNameFinderModel; 
import opennlp.tools.util.Span;  

public class NameFinderME_Example { 
   public static void main(String args[]) throws Exception{ 
      /Loading the NER - Person model       InputStream inputStream = new 
         FileInputStream("C:/OpenNLP_models/en-ner-person.bin"); 
      TokenNameFinderModel model = new TokenNameFinderModel(inputStream);
      
      //Instantiating the NameFinder class 
      NameFinderME nameFinder = new NameFinderME(model); 
    
      //Getting the sentence in the form of String array  
      String [] sentence = new String[]{ 
         "Mike", 
         "and", 
         "Smith", 
         "are", 
         "good", 
         "friends" 
      }; 
       
      //Finding the names in the sentence 
      Span nameSpans[] = nameFinder.find(sentence); 
       
      //Printing the spans of the names in the sentence 
      for(Span s: nameSpans) 
         System.out.println(s.toString());    
   }    
}

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

javac NameFinderME_Example.java 
java NameFinderME_Example

上記のプログラムは、実行時に、指定された文字列(生のテキスト)を読み取り、その中の人物の名前を検出し、以下に示すようにその位置(スパン)を表示します。

[0..1) person 
[2..3) person

名前とその位置

ザ・ substring() Stringクラスのメソッドは begin そしてその end offsetsそれぞれの文字列を返します。次のコードブロックに示すように、このメソッドを使用して、名前とそのスパン(位置)を一緒に出力できます。

for(Span s: nameSpans)        
   System.out.println(s.toString()+"  "+tokens[s.getStart()]);

以下は、指定された生のテキストから名前を検出し、それらの位置とともに表示するプログラムです。このプログラムを名前のファイルに保存しますNameFinderSentences.java

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

import opennlp.tools.namefind.NameFinderME; 
import opennlp.tools.namefind.TokenNameFinderModel; 
import opennlp.tools.tokenize.TokenizerME; 
import opennlp.tools.tokenize.TokenizerModel; 
import opennlp.tools.util.Span;  

public class NameFinderSentences {  
   public static void main(String args[]) throws Exception{        
      
      //Loading the tokenizer model 
      InputStream inputStreamTokenizer = new 
         FileInputStream("C:/OpenNLP_models/entoken.bin");
      TokenizerModel tokenModel = new TokenizerModel(inputStreamTokenizer); 
       
      //Instantiating the TokenizerME class 
      TokenizerME tokenizer = new TokenizerME(tokenModel); 
       
      //Tokenizing the sentence in to a string array 
      String sentence = "Mike is senior programming 
      manager and Rama is a clerk both are working at 
      Tutorialspoint"; 
      String tokens[] = tokenizer.tokenize(sentence); 
       
      //Loading the NER-person model 
      InputStream inputStreamNameFinder = new 
         FileInputStream("C:/OpenNLP_models/enner-person.bin");       
      TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder);
      
      //Instantiating the NameFinderME class 
      NameFinderME nameFinder = new NameFinderME(model);       
      
      //Finding the names in the sentence 
      Span nameSpans[] = nameFinder.find(tokens);        
      
      //Printing the names and their spans in a sentence 
      for(Span s: nameSpans)        
         System.out.println(s.toString()+"  "+tokens[s.getStart()]);      
   }    
}

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

javac NameFinderSentences.java 
java NameFinderSentences

実行時に、上記のプログラムは指定された文字列(生のテキスト)を読み取り、その中の人物の名前を検出し、以下に示すようにその位置(スパン)を表示します。

[0..1) person  Mike

場所の名前を見つける

さまざまなモデルをロードすることで、さまざまな名前付きエンティティを検出できます。以下は、をロードするJavaプログラムです。en-ner-location.bin指定された文の場所の名前をモデル化して検出します。このプログラムを名前のファイルに保存しますLocationFinder.java

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

import opennlp.tools.namefind.NameFinderME; 
import opennlp.tools.namefind.TokenNameFinderModel; 
import opennlp.tools.tokenize.TokenizerME; 
import opennlp.tools.tokenize.TokenizerModel; 
import opennlp.tools.util.Span;  

public class LocationFinder { 
   public static void main(String args[]) throws Exception{
 
      InputStream inputStreamTokenizer = new 
         FileInputStream("C:/OpenNLP_models/entoken.bin"); 
      TokenizerModel tokenModel = new TokenizerModel(inputStreamTokenizer); 
       
      //String paragraph = "Mike and Smith are classmates"; 
      String paragraph = "Tutorialspoint is located in Hyderabad"; 
        
      //Instantiating the TokenizerME class 
      TokenizerME tokenizer = new TokenizerME(tokenModel); 
      String tokens[] = tokenizer.tokenize(paragraph); 
       
      //Loading the NER-location moodel 
      InputStream inputStreamNameFinder = new 
         FileInputStream("C:/OpenNLP_models/en- ner-location.bin");       
      TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder); 
        
      //Instantiating the NameFinderME class 
      NameFinderME nameFinder = new NameFinderME(model);      
        
      //Finding the names of a location 
      Span nameSpans[] = nameFinder.find(tokens);        
      //Printing the spans of the locations in the sentence 
      for(Span s: nameSpans)        
         System.out.println(s.toString()+"  "+tokens[s.getStart()]); 
   }    
}

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

javac LocationFinder.java 
java LocationFinder

上記のプログラムは、実行時に、指定された文字列(生のテキスト)を読み取り、その中の人物の名前を検出し、以下に示すようにその位置(スパン)を表示します。

[4..5) location  Hyderabad

NameFinderの確率

ザ・ probs()の方法 NameFinderME クラスは、最後にデコードされたシーケンスの確率を取得するために使用されます。

double[] probs = nameFinder.probs();

以下は、確率を出力するプログラムです。このプログラムを名前のファイルに保存します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

実行時に、上記のプログラムは指定された文字列を読み取り、文をトークン化し、それらを出力します。さらに、以下に示すように、最後にデコードされたシーケンスの確率も返します。

[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

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

品詞 品詞の意味
NN 名詞、単数または質量
DT 限定詞
VB 動詞、基本形
VBD 動詞、過去形
VBZ 動詞、三人称単数現在形
前置詞または従属接続詞
NNP 固有名詞、単数
JJ 形容詞

品詞のタグ付け

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

ザ・ POSTaggerME のクラス opennlp.tools.postagパッケージは、このモデルをロードし、OpenNLPライブラリを使用して指定された生のテキストの品詞にタグを付けるために使用されます。そうするために、あなたはする必要があります-

  • をロードします en-pos-maxent.bin を使用したモデル POSModel クラス。

  • インスタンス化する POSTaggerME クラス。

  • 文をトークン化します。

  • を使用してタグを生成します tag() 方法。

  • を使用してトークンとタグを印刷します POSSample クラス。

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

ステップ1:モデルをロードする

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

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

  • 作成する InputStream モデルのオブジェクト(FileInputStreamをインスタンス化し、モデルのパスを文字列形式でコンストラクターに渡します)。

  • インスタンス化する 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クラスをインスタンス化する

ザ・ POSTaggerME パッケージのクラス opennlp.tools.postag与えられた生のテキストの品詞を予測するために使用されます。最大エントロピーを使用して決定を下します。

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

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

ステップ3:文をトークン化する

ザ・ tokenize() の方法 whitespaceTokenizerクラスは、渡された生のテキストをトークン化するために使用されます。このメソッドは、パラメーターとしてString変数を受け取り、String(トークン)の配列を返します。

インスタンス化する whitespaceTokenizer クラスと文の文字列形式をこのメソッドに渡すことにより、このメソッドを呼び出します。

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

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

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

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

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

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

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

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

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

Example

以下は、特定の生のテキストの品詞にタグを付けるプログラムです。このプログラムを名前のファイルに保存します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 Tutorialspoint"; 
       
      //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 Tutorialspoint_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 Tutorialspoint"; 
      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 Tutorialspoint_VB  
Average: 0.0 sent/s  
Total: 1 sent 
Runtime: 0.0s

POSタガー確率

ザ・ probs() の方法 POSTaggerME クラスは、最近タグ付けされた文の各タグの確率を見つけるために使用されます。

//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 Tutorialspoint"; 
      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 Tutorialspoint_VB    
0.6416834779738033 
0.42983612874819177 
0.8584513635863117 
0.4394784478206072

OpenNLP APIを使用すると、指定された文を解析できます。この章では、OpenNLPAPIを使用して生のテキストを解析する方法について説明します。

OpenNLPライブラリを使用した生のテキストの解析

文を検出するために、OpenNLPは事前定義されたモデル、という名前のファイルを使用します en-parserchunking.bin。これは、指定された生のテキストを解析するようにトレーニングされた事前定義されたモデルです。

ザ・ Parser のクラス opennlp.tools.Parser パッケージは、解析構成要素と ParserTool のクラス opennlp.tools.cmdline.parser パッケージはコンテンツの解析に使用されます。

以下は、を使用して指定された生のテキストを解析するプログラムを作成するために従うべき手順です。 ParserTool クラス。

ステップ1:モデルをロードする

テキストを解析するためのモデルは、という名前のクラスで表されます。 ParserModel、パッケージに属します opennlp.tools.parser

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

  • 作成する InputStream モデルのオブジェクト(FileInputStreamをインスタンス化し、モデルのパスを文字列形式でコンストラクターに渡します)。

  • インスタンス化する ParserModel クラスと合格 InputStream 次のコードブロックに示すように、コンストラクターへのパラメーターとしてのモデルの(オブジェクト)。

//Loading parser model 
InputStream inputStream = new FileInputStream(".../en-parserchunking.bin"); 
ParserModel model = new ParserModel(inputStream);

ステップ2:パーサークラスのオブジェクトを作成する

ザ・ Parser パッケージのクラス opennlp.tools.parser解析構成要素を保持するためのデータ構造を表します。静的を使用してこのクラスのオブジェクトを作成できますcreate() の方法 ParserFactory クラス。

を呼び出す create() の方法 ParserFactory 以下に示すように、前のステップで作成したモデルオブジェクトを渡すことによって-

//Creating a parser Parser parser = ParserFactory.create(model);

ステップ3:文を解析する

ザ・ parseLine() の方法 ParserToolクラスは、OpenNLPの生のテキストを解析するために使用されます。このメソッドは次を受け入れます-

  • 解析するテキストを表す文字列変数。

  • パーサーオブジェクト。

  • 実行される解析の数を表す整数。

次のパラメーターを文に渡して、このメソッドを呼び出します。前の手順で作成した解析オブジェクト、および実行する必要のある解析の数を表す整数。

//Parsing the sentence 
String sentence = "Tutorialspoint is the largest tutorial library.";       
Parse topParses[] = ParserTool.parseLine(sentence, parser, 1);

Example

以下は、指定された生のテキストを解析するプログラムです。このプログラムを名前のファイルに保存しますParserExample.java

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

import opennlp.tools.cmdline.parser.ParserTool; 
import opennlp.tools.parser.Parse; 
import opennlp.tools.parser.Parser; 
import opennlp.tools.parser.ParserFactory; 
import opennlp.tools.parser.ParserModel;  

public class ParserExample { 
   
   public static void main(String args[]) throws Exception{  
      //Loading parser model 
      InputStream inputStream = new FileInputStream(".../en-parserchunking.bin"); 
      ParserModel model = new ParserModel(inputStream); 
       
      //Creating a parser 
      Parser parser = ParserFactory.create(model); 
      
      //Parsing the sentence 
      String sentence = "Tutorialspoint is the largest tutorial library.";
      Parse topParses[] = ParserTool.parseLine(sentence, parser, 1); 
    
      for (Parse p : topParses) 
         p.show();          
   } 
}

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

javac ParserExample.java 
java ParserExample

実行時に、上記のプログラムは指定された生のテキストを読み取り、それを解析して、次の出力を表示します-

(TOP (S (NP (NN Tutorialspoint)) (VP (VBZ is) (NP (DT the) (JJS largest) (NN
   tutorial) (NN library.)))))

文のチャンクとは、文を単語グループや動詞グループなどの単語の一部に分割/分割することです。

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

OpenNLPは、コマンドラインを介してさまざまな操作を実行するためのコマンドラインインターフェイス(CLI)を提供します。この章では、OpenNLPコマンドラインインターフェイスの使用方法を示すいくつかの例を取り上げます。

トークン化

input.txt

Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies

構文

> opennlp TokenizerME path_for_models../en-token.bin <inputfile..> outputfile..

コマンド

C:\> opennlp TokenizerME C:\OpenNLP_models/en-token.bin <input.txt >output.txt

出力

Loading Tokenizer model ... done (0.207s)  
Average: 214.3 sent/s 
Total: 3 sent 
Runtime: 0.014s

output.txt

Hi . How are you ? Welcome to Tutorialspoint . We provide free tutorials on various technologies

文の検出

input.txt

Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies

構文

> opennlp SentenceDetector path_for_models../en-token.bin <inputfile..> outputfile..

コマンド

C:\> opennlp SentenceDetector C:\OpenNLP_models/en-sent.bin <input.txt > output_sendet.txt

出力

Loading Sentence Detector model ... done (0.067s)  

Average: 750.0 sent/s 
Total: 3 sent 
Runtime: 0.004s

Output_sendet.txt

Hi. How are you? 
Welcome to Tutorialspoint. 
We provide free tutorials on various technologies

固有表現抽出

input.txt

<START:person> <START:person> Mike <END> <END> is senior programming manager and 
<START:person> Rama <END> is a clerk both are working at Tutorialspoint

構文

> opennlp TokenNameFinder path_for_models../en-token.bin <inputfile..

コマンド

C:\>opennlp TokenNameFinder C:\OpenNLP_models\en-ner-person.bin <input_namefinder.txt

出力

Loading Token Name Finder model ... done (0.730s) 
<START:person> <START:person> Mike <END> <END> is senior programming manager and 
<START:person> Rama <END> is a clerk both are working at Tutorialspoint  
Average: 55.6 sent/s 
Total: 1 sent 
Runtime: 0.018s

品詞タグ付け

Input.txt

Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies

構文

> opennlp POSTagger path_for_models../en-token.bin <inputfile..

コマンド

C:\>opennlp POSTagger C:\OpenNLP_models/en-pos-maxent.bin < input.txt

出力

Loading POS Tagger model ... done (1.315s) 
Hi._NNP How_WRB are_VBP you?_JJ Welcome_NNP to_TO Tutorialspoint._NNP We_PRP 
provide_VBP free_JJ tutorials_NNS on_IN various_JJ technologies_NNS  

Average: 66.7 sent/s 
Total: 1 sent 
Runtime: 0.015s