Opennlp-quick-guide
OpenNLP-概要
NLPは、Webページやテキストドキュメントなどの自然言語ソースから意味のある有用な情報を引き出すために使用されるツールのセットです。
Open NLPとは何ですか?
Apache OpenNLP は、自然言語テキストの処理に使用されるオープンソースのJavaライブラリです。 このライブラリを使用して、効率的なテキスト処理サービスを構築できます。
OpenNLPは、トークン化、文のセグメンテーション、品詞タグ付け、名前付きエンティティ抽出、チャンク化、解析、相互参照解決などのサービスを提供します。
OpenNLPの機能
OpenNLPの注目すべき機能は次のとおりです-
- 名前付きエンティティ認識(NER)-Open NLPはNERをサポートします。これを使用して、クエリの処理中でも場所、人、物の名前を抽出できます。
- Summarize - summarize 機能を使用すると、段落、記事、ドキュメント、またはそれらのコレクションをNLPで要約できます。
- 検索-OpenNLPでは、指定された単語が変更されたりスペルミスがあったとしても、指定されたテキストで特定の検索文字列またはその同義語を識別することができます。
- タグ付け(POS)-NLPのタグ付けは、さらなる分析のためにテキストをさまざまな文法要素に分割するために使用されます。
- 翻訳-NLPでは、翻訳はある言語を別の言語に翻訳するのに役立ちます。
- 情報のグループ化-NLPのこのオプションは、品詞と同様に、ドキュメントのコンテンツ内のテキスト情報をグループ化します。
- 自然言語の生成-データベースから情報を生成し、気象分析や医療レポートなどの情報レポートを自動化するために使用されます。
- フィードバック分析-名前が示すように、製品に関する人々からのさまざまなタイプのフィードバックがNLPによって収集され、製品が彼らの心をつかむのにどれだけ成功しているかを分析します。
- 音声認識-人間の音声を分析することは困難ですが、NLPにはこの要件のための組み込み機能がいくつかあります。
NLP APIを開く
Apache OpenNLPライブラリは、文の検出、トークン化、名前の検索、品詞のタグ付け、文のチャンク化、解析、相互参照の解決、ドキュメントの分類など、自然言語処理のさまざまなタスクを実行するクラスとインターフェイスを提供します。
これらのタスクに加えて、これらのタスクのいずれかの独自のモデルをトレーニングおよび評価することもできます。
OpenNLP CLI
ライブラリに加えて、OpenNLPはコマンドラインインターフェイス(CLI)も提供しており、モデルのトレーニングと評価を行うことができます。 このトピックの詳細については、このチュートリアルの最後の章で説明します。
NLPモデルを開く
さまざまなNLPタスクを実行するために、OpenNLPは事前定義されたモデルのセットを提供します。 このセットには、さまざまな言語のモデルが含まれています。
モデルのダウンロード
以下に示す手順に従って、OpenNLPが提供する事前定義モデルをダウンロードできます。
- ステップ1 *-次のリンクをクリックして、OpenNLPモデルのインデックスページを開きます-http://opennlp.sourceforge.net/models-1.5/。
- ステップ2 *-指定されたリンクにアクセスすると、さまざまな言語のコンポーネントのリストとそれらをダウンロードするためのリンクが表示されます。 ここでは、OpenNLPが提供するすべての定義済みモデルのリストを取得できます。
それぞれのリンクをクリックして、これらすべてのモデルをフォルダー C:/OpenNLP_models/> にダウンロードします。 これらのモデルはすべて言語に依存しているため、これらを使用する際には、モデルの言語が入力テキストの言語と一致することを確認する必要があります。
OpenNLPの歴史
- 2010年、OpenNLPはApacheインキュベーションに参加しました。
- 2011年にApache OpenNLP 1.5.2 Incubatingがリリースされ、同じ年にトップレベルのApacheプロジェクトとして卒業しました。
- 2015年、OpenNLPは1.6.0をリリースしました。
OpenNLP-環境
この章では、システムでOpenNLP環境をセットアップする方法について説明します。 インストールプロセスから始めましょう。
OpenNLPのインストール
以下は、システムに* Apache OpenNLPライブラリ*をダウンロードする手順です。
ステップ1 *-次のリンクをクリックして、 *Apache OpenNLP のホームページを開きます-https://opennlp.apache.org/。
- ステップ2 *-次に、*ダウンロード*リンクをクリックします。 クリックすると、Apache Software Foundation Distributionディレクトリにリダイレクトされるさまざまなミラーを見つけることができるページに移動します。
- ステップ3 *-このページには、さまざまなApacheディストリビューションをダウンロードするためのリンクがあります。 それらを参照し、OpenNLPディストリビューションを見つけてクリックします。
- ステップ4 *-クリックすると、以下に示すように、OpenNLPディストリビューションのインデックスを確認できるディレクトリにリダイレクトされます。
利用可能なディストリビューションから最新バージョンをクリックします。
ステップ5 *-各ディストリビューションは、OpenNLPライブラリのソースファイルとバイナリファイルをさまざまな形式で提供します。 ソースおよびバイナリファイル *apache-opennlp-1.6.0-bin.zip および apache-opennlp1.6.0-src.zip (Windows用)をダウンロードします。
クラスパスの設定
OpenNLPライブラリをダウンロードした後、 bin ディレクトリへのパスを設定する必要があります。 OpenNLPライブラリをシステムのEドライブにダウンロードしたと仮定します。
さて、以下に記載されている手順に従ってください-
- ステップ1 *-[マイコンピュータ]を右クリックして、[プロパティ]を選択します。
- ステップ2 *-[詳細設定]タブの下の[環境変数]ボタンをクリックします。
ステップ3 *-次のスクリーンショットに示すように、 *path 変数を選択し、 Edit ボタンをクリックします。
ステップ4 *-環境変数の編集ウィンドウで、*新規*ボタンをクリックし、OpenNLPディレクトリ *E:\ apache-opennlp-1.6.0 \ bin のパスを追加し、 OK ボタンをクリックします。次のスクリーンショット。
Eclipseのインストール
ビルドパス*をJARファイルに設定するか、 *pom.xml を使用して、OpenNLPライブラリのEclipse環境を設定できます。
JARファイルへのビルドパスの設定
EclipseにOpenNLPをインストールするには、以下の手順に従います-
- ステップ1 *-システムにEclipse環境がインストールされていることを確認します。
- ステップ2 *-Eclipseを開きます。 以下に示すように、[ファイル]→[新規]→[新しいプロジェクトを開く]の順にクリックします。
- ステップ3 *-*新しいプロジェクト*ウィザードが表示されます。 このウィザードで、Javaプロジェクトを選択し、[次へ]ボタンをクリックして続行します。
- ステップ4 *-次に、*新規Javaプロジェクトウィザード*が表示されます。 ここでは、以下に示すように、新しいプロジェクトを作成し、[次へ]ボタンをクリックする必要があります。
- ステップ5 *-新しいプロジェクトを作成した後、それを右クリックし、*ビルドパス*を選択して、*ビルドパスの構成*をクリックします。
ステップ6 *-次に、 *Java Build Path ウィザードが表示されます。 ここで、以下に示すように、 Add External JARs ボタンをクリックします。
ステップ7 *- apache-opennlp-1.6.0フォルダー*の lib フォルダーにあるjarファイル opennlp-tools-1.6.0.jar および opennlp-uima-1.6.0.jar を選択します。 。
上記の画面で[開く]ボタンをクリックすると、選択したファイルがライブラリに追加されます。
[OK]をクリックすると、必要なJARファイルが現在のプロジェクトに正常に追加され、以下に示すように、参照ライブラリを展開してこれらの追加ライブラリを確認できます。
pom.xmlを使用する
プロジェクトをMavenプロジェクトに変換し、次のコードをその pom.xml に追加します。
OpenNLP-参照API
この章では、このチュートリアルの後続の章で使用するクラスとメソッドについて説明します。
文検出
SentenceModelクラス
このクラスは、指定された生テキストの文を検出するために使用される事前定義モデルを表します。 このクラスは、 opennlp.tools.sentdetect パッケージに属します。
このクラスのコンストラクターは、文検出器モデルファイル(en-sent.bin)の InputStream オブジェクトを受け入れます。
SentenceDetectorMEクラス
このクラスはパッケージ opennlp.tools.sentdetect に属し、生のテキストを文に分割するメソッドが含まれています。 このクラスは、最大エントロピーモデルを使用して文字列内の文末文字を評価し、文末を意味するかどうかを判断します。
このクラスの重要なメソッドは次のとおりです。
S.No | Methods and Description |
---|---|
1 |
sentDetect() このメソッドは、渡された生のテキスト内の文を検出するために使用されます。 パラメータとして文字列変数を受け取り、指定された生のテキストの文を保持する文字列配列を返します。 |
2 |
sentPosDetect() このメソッドは、指定されたテキスト内の文の位置を検出するために使用されます。 このメソッドは、文を表す文字列変数を受け入れ、 Span 型のオブジェクトの配列を返します。
|
3 |
getSentenceProbabilities() このメソッドは、* sentDetect()*メソッドの最新の呼び出しに関連付けられた確率を返します。 |
トークン化
TokenizerModelクラス
このクラスは、指定された文のトークン化に使用される事前定義モデルを表します。 このクラスは、パッケージ opennlp.tools.tokenizer に属します。
このクラスのコンストラクターは、トークナイザーモデルファイル(entoken.bin)の InputStream オブジェクトを受け入れます。
クラス
トークン化を実行するために、OpenNLPライブラリには3つの主要なクラスが用意されています。 3つのクラスはすべて、 Tokenizer というインターフェイスを実装しています。
S.No | Classes and Description |
---|---|
1 |
SimpleTokenizer このクラスは、文字クラスを使用して、指定された生テキストをトークン化します。 |
2 |
WhitespaceTokenizer このクラスは、空白を使用して、指定されたテキストをトークン化します。 |
3 |
TokenizerME このクラスは、生のテキストを個別のトークンに変換します。 最大エントロピーを使用して決定を行います。 |
これらのクラスには、次のメソッドが含まれています。
S.No | Methods and Description |
---|---|
1 |
tokenize() このメソッドは、生のテキストをトークン化するために使用されます。 このメソッドは、パラメーターとしてストリング変数を受け入れ、ストリング(トークン)の配列を返します。 |
2 |
sentPosDetect() このメソッドは、トークンの位置またはスパンを取得するために使用されます。 文字列形式の文(または)生テキストを受け入れ、 Span 型のオブジェクトの配列を返します。 |
上記の2つのメソッドに加えて、 TokenizerME クラスには* getTokenProbabilities()*メソッドがあります。
S.No | Methods and Description |
---|---|
1 |
getTokenProbabilities() このメソッドは、* tokenizePos()*メソッドの最新の呼び出しに関連付けられた確率を取得するために使用されます。 |
NameEntityRecognition
TokenNameFinderModelクラス
このクラスは、指定された文の名前付きエンティティを検索するために使用される事前定義モデルを表します。 このクラスは opennlp.tools.namefind パッケージに属します。
このクラスのコンストラクターは、ネームファインダーモデルファイル(enner-person.bin)の InputStream オブジェクトを受け入れます。
NameFinderMEクラス
このクラスは opennlp.tools.namefind パッケージに属し、NERタスクを実行するメソッドが含まれています。 このクラスは、最大エントロピーモデルを使用して、指定された生テキスト内の名前付きエンティティを検索します。
S.No | Methods and Description |
---|---|
1 |
find() このメソッドは、生のテキスト内の名前を検出するために使用されます。 生のテキストを表すString変数をパラメーターとして受け取り、Span型のオブジェクトの配列を返します。 |
2 |
probs() このメソッドは、最後にデコードされたシーケンスの確率を取得するために使用されます。 |
品詞を見つける
POSModelクラス
このクラスは、指定された文の品詞にタグを付けるために使用される事前定義モデルを表します。 このクラスは、パッケージ opennlp.tools.postag に属します。
このクラスのコンストラクターは、pos-taggerモデルファイル(enpos-maxent.bin)の InputStream オブジェクトを受け入れます。
POSTaggerMEクラス
このクラスはパッケージ opennlp.tools.postag に属し、指定された生テキストの品詞を予測するために使用されます。 最大エントロピーを使用して決定を行います。
S.No | Methods and Description |
---|---|
1 |
tag() このメソッドは、トークンPOSタグの文を割り当てるために使用されます。 このメソッドは、トークンの配列(String)をパラメーターとして受け入れ、タグ(配列)を返します。 |
2 |
getSentenceProbabilities() このメソッドは、最近タグ付けされた文の各タグの確率を取得するために使用されます。 |
文の解析
ParserModelクラス
このクラスは、指定された文の解析に使用される事前定義モデルを表します。 このクラスは opennlp.tools.parser パッケージに属します。
このクラスのコンストラクターは、パーサーモデルファイル(en-parserchunking.bin)の InputStream オブジェクトを受け入れます。
パーサーファクトリクラス
このクラスはパッケージ opennlp.tools.parser に属し、パーサーの作成に使用されます。
S.No | Methods and Description |
---|---|
1 |
create() これは静的メソッドであり、パーサーオブジェクトの作成に使用されます。 このメソッドは、パーサーモデルファイルのFilestreamオブジェクトを受け入れます。 |
ParserToolクラス
このクラスは opennlp.tools.cmdline.parser パッケージに属し、コンテンツの解析に使用されます。
S.No | Methods and Description |
---|---|
1 |
parseLine()
|
チャンキング
ChunkerModelクラス
このクラスは、文を小さなチャンクに分割するために使用される事前定義モデルを表します。 このクラスは opennlp.tools.chunker パッケージに属します。
このクラスのコンストラクターは、 chunker モデルファイル(enchunker.bin)の InputStream オブジェクトを受け入れます。
ChunkerMEクラス
このクラスは opennlp.tools.chunker という名前のパッケージに属し、指定された文を小さなチャンクに分割するために使用されます。
S.No | Methods and Description |
---|---|
1 |
chunk() このメソッドは、指定された文を小さなチャンクに分割するために使用されます。 文のトークンと* P arts O f S *peechタグをパラメーターとして受け入れます。 |
2 |
このメソッドは、最後にデコードされたシーケンスの確率を返します。 |
OpenNLP-文検出
自然言語の処理中に、文の開始と終了を決定することは、対処すべき問題の1つです。 このプロセスは、* S' 文章 B *音響'曖昧さ回避(SBD)または単に文の区切りとして知られています。
特定のテキスト内の文を検出するために使用する手法は、テキストの言語によって異なります。
Javaを使用した文検出
正規表現と一連の単純なルールを使用して、Javaで指定されたテキスト内の文を検出できます。
たとえば、ピリオド、疑問符、または感嘆符が指定されたテキストの文を終了すると仮定し、 String クラスの* split()*メソッドを使用して文を分割できます。 ここでは、文字列形式の正規表現を渡す必要があります。
以下は、Java正規表現*(split method)を使用して、指定されたテキスト内の文を決定するプログラムです。 このプログラムを *SentenceDetection_RE.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します。
実行すると、上記のプログラムは、次のメッセージを表示するPDFドキュメントを作成します。
OpenNLPを使用した文検出
文を検出するために、OpenNLPは事前定義モデル、 en-sent.bin という名前のファイルを使用します。 この事前定義モデルは、指定された生テキストの文を検出するようにトレーニングされています。
OpenNLPライブラリを使用して文を検出するには、する必要があります-
- SentenceModel クラスを使用して en-sent.bin モデルを読み込みます
- SentenceDetectorME クラスをインスタンス化します。
- このクラスの* sentDetect()*メソッドを使用して文を検出します。
以下は、与えられた生のテキストから文を検出するプログラムを書くために従うべきステップです。
ステップ1:モデルの読み込み
文検出のモデルは、パッケージ opennlp.tools.sentdetect に属する SentenceModel というクラスで表されます。
文検出モデルをロードするには-
- モデルの InputStream オブジェクトを作成します(FileInputStreamをインスタンス化し、モデルのパスをString形式でコンストラクターに渡します)。
- SentenceModel クラスをインスタンス化し、次のコードブロックに示すように、コンストラクターへのパラメーターとしてモデルの InputStream (オブジェクト)を渡します-
ステップ2:SentenceDetectorMEクラスのインスタンス化
パッケージ opennlp.tools.sentdetect の SentenceDetectorME クラスには、生のテキストを文に分割するメソッドが含まれています。 このクラスは、最大エントロピーモデルを使用して、文字列内の文末文字を評価し、文末を示すかどうかを判断します。
以下に示すように、このクラスをインスタンス化し、前の手順で作成したモデルオブジェクトを渡します。
ステップ3:文を検出する
文の文字列形式をこのメソッドに渡すことにより、このメソッドを呼び出します。
例
以下は、指定された生のテキスト内の文を検出するプログラムです。 このプログラムを SentenceDetectionME.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行時に、上記のプログラムは指定された文字列を読み取り、その中の文を検出し、次の出力を表示します。
文の位置を検出する
- SentenceDetectorMEクラス*のsentPosDetect()メソッドを使用して、文の位置を検出することもできます。
以下は、与えられた生のテキストから文の位置を検出するプログラムを書くために従うべきステップです。
ステップ1:モデルの読み込み
文検出のモデルは、パッケージ opennlp.tools.sentdetect に属する SentenceModel というクラスで表されます。
文検出モデルをロードするには-
- モデルの InputStream オブジェクトを作成します(FileInputStreamをインスタンス化し、モデルのパスをString形式でコンストラクターに渡します)。
- 次のコードブロックに示すように、 SentenceModel クラスをインスタンス化し、モデルの InputStream (オブジェクト)をコンストラクターにパラメーターとして渡します。
ステップ2:SentenceDetectorMEクラスのインスタンス化
パッケージ opennlp.tools.sentdetect の SentenceDetectorME クラスには、生のテキストを文に分割するメソッドが含まれています。 このクラスは、最大エントロピーモデルを使用して、文字列内の文末文字を評価し、文末を示すかどうかを判断します。
このクラスをインスタンス化し、前の手順で作成したモデルオブジェクトを渡します。
ステップ3:文の位置を検出する
文の文字列形式をパラメータとしてこのメソッドに渡すことにより、このメソッドを呼び出します。
ステップ4:文の範囲を印刷する
次のコードブロックに示すように、* sentPosDetect()*メソッドによって返されたスパンをSpan配列に格納して印刷できます。
例
以下は、指定された生テキスト内の文を検出するプログラムです。 このプログラムを SentenceDetectionME.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行時に、上記のプログラムは指定された文字列を読み取り、その中の文を検出し、次の出力を表示します。
文章とその位置
Stringクラスの* substring()メソッドは、 *begin および end offsets を受け入れ、それぞれの文字列を返します。 次のコードブロックに示すように、このメソッドを使用して、文とそのスパン(位置)を一緒に印刷できます。
以下は、与えられた生のテキストから文を検出し、それらの位置とともにそれらを表示するプログラムです。 このプログラムを SentencesAndPosDetection.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行時に、上記のプログラムは指定された文字列を読み取り、文をその位置とともに検出し、次の出力を表示します。
文の確率の検出
以下は、sentDetect()メソッドの呼び出しに関連する確率を出力するプログラムです。 このプログラムを SentenceDetectionMEProbs.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行すると、上記のプログラムは指定された文字列を読み取り、文を検出して出力します。 さらに、以下に示すように、sentDetect()メソッドの最新の呼び出しに関連付けられた確率も返します。
OpenNLP-トークン化
与えられた文を小さな部分(トークン)に切り刻むプロセスは、*トークン化*として知られています。 一般に、指定された生のテキストは、区切り文字(ほとんどが空白)のセットに基づいてトークン化されます。
トークン化は、スペルチェック、検索処理、品詞の識別、文の検出、ドキュメントのドキュメント分類などのタスクで使用されます。
OpenNLPを使用したトークン化
与えられた文をより単純なフラグメントにトークン化するために、OpenNLPライブラリは3つの異なるクラスを提供します-
- SimpleTokenizer -このクラスは、文字クラスを使用して、指定された生テキストをトークン化します。
- WhitespaceTokenizer -このクラスは、指定されたテキストをトークン化するために空白を使用します。
- TokenizerME -このクラスは、生のテキストを個別のトークンに変換します。 最大エントロピーを使用して決定を行います。
SimpleTokenizer
- それぞれのクラスのオブジェクトを作成します。
- * tokenize()*メソッドを使用して文をトークン化します。
- トークンを印刷します。
以下は、与えられた生のテキストをトークン化するプログラムを書くために従うべきステップです。
- ステップ1 *-それぞれのクラスをインスタンス化する
両方のクラスに、それらをインスタンス化するために利用できるコンストラクタはありません。 したがって、静的変数 INSTANCE を使用してこれらのクラスのオブジェクトを作成する必要があります。
- ステップ2 *-文をトークン化する
これらの両方のクラスには、* tokenize()*というメソッドが含まれています。 このメソッドは、文字列形式の生テキストを受け入れます。 呼び出し時に、指定された文字列をトークン化し、文字列(トークン)の配列を返します。
以下に示すように、* tokenizer()*メソッドを使用して文をトークン化します。
- ステップ3 *-トークンを印刷する
文をトークン化した後、以下に示すように、 for loop を使用してトークンを印刷できます。
例
以下は、SimpleTokenizerクラスを使用して特定の文をトークン化するプログラムです。 このプログラムを SimpleTokenizerExample.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行すると、上記のプログラムは、指定された文字列(生テキスト)を読み取り、それをトークン化し、次の出力を表示します-
WhitespaceTokenizer
- それぞれのクラスのオブジェクトを作成します。
- * tokenize()*メソッドを使用して文をトークン化します。
- トークンを印刷します。
以下は、与えられた生のテキストをトークン化するプログラムを書くために従うべきステップです。
- ステップ1 *-それぞれのクラスをインスタンス化する
両方のクラスに、それらをインスタンス化するために利用できるコンストラクタはありません。 したがって、静的変数 INSTANCE を使用してこれらのクラスのオブジェクトを作成する必要があります。
- ステップ2 *-文をトークン化する
これらの両方のクラスには、* tokenize()*というメソッドが含まれています。 このメソッドは、文字列形式の生テキストを受け入れます。 呼び出し時に、指定された文字列をトークン化し、文字列(トークン)の配列を返します。
以下に示すように、* tokenizer()*メソッドを使用して文をトークン化します。
- ステップ3 *-トークンを印刷する
文をトークン化した後、以下に示すように、 for loop を使用してトークンを印刷できます。
例
以下は、 WhitespaceTokenizer クラスを使用して特定の文をトークン化するプログラムです。 このプログラムを WhitespaceTokenizerExample.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行時に、上記のプログラムは指定された文字列(生テキスト)を読み取り、トークン化して、次の出力を表示します。
TokenizerMEクラス
OpenNLPは、定義済みのモデルであるde-token.binというファイルを使用して、文をトークン化します。 与えられた生のテキストの文をトークン化するように訓練されています。
- TokenizerModel クラスを使用して en-token.bin モデルをロードします。
- TokenizerME クラスをインスタンス化します。
- このクラスの* tokenize()*メソッドを使用して文をトークン化します。
以下は、 TokenizerME クラスを使用して、指定された生テキストから文をトークン化するプログラムを作成するために従うべき手順です。
- ステップ1 *-モデルの読み込み
トークン化のモデルは、 opennlp.tools.tokenize パッケージに属する TokenizerModel というクラスで表されます。
トークナイザーモデルをロードするには-
- モデルの InputStream オブジェクトを作成します(FileInputStreamをインスタンス化し、モデルのパスをString形式でコンストラクターに渡します)。
- 次のコードブロックに示すように、 TokenizerModel クラスをインスタンス化し、モデルの InputStream (オブジェクト)をコンストラクターにパラメーターとして渡します。
- ステップ2 *-TokenizerMEクラスのインスタンス化
パッケージ opennlp.tools.tokenize の TokenizerME クラスには、生のテキストを小さな部分(トークン)に切り分けるメソッドが含まれています。 最大エントロピーを使用して決定を行います。
以下に示すように、このクラスをインスタンス化し、前の手順で作成したモデルオブジェクトを渡します。
- ステップ3 *-文のトークン化
次のように、文の文字列形式をこのメソッドに渡すことにより、このメソッドを呼び出します。
例
以下は、指定された生テキストをトークン化するプログラムです。 このプログラムを TokenizerMEExample.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行すると、上記のプログラムは、指定された文字列を読み取り、その中の文を検出し、次の出力を表示します-
トークンの位置を取得する
- tokenizePos()メソッドを使用して、トークンの位置または*スパン*を取得することもできます。 これは、パッケージ *opennlp.tools.tokenize のTokenizerインターフェイスのメソッドです。 すべての(3つの)トークナイザークラスがこのインターフェイスを実装しているため、すべてのクラスでこのメソッドを見つけることができます。
このメソッドは、文字列の形式の文または生のテキストを受け入れ、 Span 型のオブジェクトの配列を返します。
次のように、* tokenizePos()*メソッドを使用して、トークンの位置を取得できます-
位置の印刷(スパン)
次のコードブロックに示すように、* tokenizePos()*メソッドによって返されたスパンをSpan配列に格納して印刷できます。
トークンとその位置を一緒に印刷する
Stringクラスの* substring()メソッドは、 *begin および end オフセットを受け入れ、それぞれの文字列を返します。 次のコードブロックに示すように、このメソッドを使用して、トークンとそのスパン(位置)を一緒に印刷できます。
例(SimpleTokenizer)
以下は、 SimpleTokenizer クラスを使用して生テキストのトークンスパンを取得するプログラムです。 また、トークンをその位置とともに出力します。 このプログラムを、 SimpleTokenizerSpans.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行すると、上記のプログラムは、指定された文字列(生テキスト)を読み取り、それをトークン化し、次の出力を表示します-
例(WhitespaceTokenizer)
以下は、 WhitespaceTokenizer クラスを使用して生テキストのトークンスパンを取得するプログラムです。 また、トークンをその位置とともに出力します。 このプログラムを WhitespaceTokenizerSpans.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します。
実行時に、上記のプログラムは指定された文字列(生テキスト)を読み取り、トークン化して、次の出力を表示します。
例(TokenizerME)
以下は、 TokenizerME クラスを使用して生テキストのトークンスパンを取得するプログラムです。 また、トークンをその位置とともに出力します。 このプログラムを TokenizerMESpans.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行すると、上記のプログラムは、指定された文字列(生テキスト)を読み取り、それをトークン化し、次の出力を表示します-
トークナイザーの確率
TokenizerMEクラスのgetTokenProbabilities()メソッドは、tokenizePos()メソッドの最新の呼び出しに関連付けられた確率を取得するために使用されます。
次は、tokenizePos()メソッドの呼び出しに関連付けられた確率を出力するプログラムです。 このプログラムを TokenizerMEProbs.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行時に、上記のプログラムは指定された文字列を読み取り、文をトークン化して出力します。 さらに、tokenizerPos()メソッドの最新の呼び出しに関連付けられた確率も返します。
OpenNLP-名前付きエンティティの認識
特定のテキストから名前、人、場所、およびその他のエンティティを見つけるプロセスは、* N amed E ntity R * ecognition(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を使用します。ビン。 これらのファイルはすべて、所定の生テキスト内の各エンティティを検出するようにトレーニングされた事前定義モデルです。
- TokenNameFinderModel クラスを使用して、それぞれのモデルをロードします。
- NameFinder クラスをインスタンス化します。
- 名前を見つけて印刷します。
以下は、特定の生テキストから名前エンティティを検出するプログラムを作成するために従うべき手順です。
ステップ1:モデルの読み込み
文検出のモデルは、パッケージ opennlp.tools.namefind に属する TokenNameFinderModel という名前のクラスで表されます。
NERモデルを読み込むには-
- モデルの InputStream オブジェクトを作成します(FileInputStreamをインスタンス化し、適切なNERモデルのパスをString形式でコンストラクターに渡します)。
- 次のコードブロックに示すように、 TokenNameFinderModel クラスをインスタンス化し、モデルの InputStream (オブジェクト)をコンストラクターにパラメーターとして渡します。
ステップ2:NameFinderMEクラスのインスタンス化
パッケージ opennlp.tools.namefind の NameFinderME クラスには、NERタスクを実行するためのメソッドが含まれています。 このクラスは、最大エントロピーモデルを使用して、指定された生テキスト内の名前付きエンティティを検索します。
このクラスをインスタンス化し、以下に示すように前のステップで作成されたモデルオブジェクトを渡します-
ステップ3:文中の名前を見つける
文の文字列形式をこのメソッドに渡すことにより、このメソッドを呼び出します。
ステップ4:文中の名前のスパンを印刷する
次のコードブロックに示すように、* find()*メソッドによって返されたスパンをSpan配列に格納して印刷できます。
- NERの例*
以下は、与えられた文を読み、その中の人の名前の範囲を認識するプログラムです。 このプログラムを NameFinderME_Example.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
上記のプログラムは、実行時に、指定された文字列(生テキスト)を読み取り、その中の人物の名前を検出し、以下に示すようにその位置(スパン)を表示します。
名前とその位置
Stringクラスの* substring()メソッドは、 *begin および end offsets を受け入れ、それぞれの文字列を返します。 次のコードブロックに示すように、このメソッドを使用して、名前とそのスパン(位置)を一緒に印刷できます。
以下は、指定された生のテキストから名前を検出し、それらをその位置とともに表示するプログラムです。 このプログラムを NameFinderSentences.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行時に、上記のプログラムは指定された文字列(生テキスト)を読み取り、その中の人物の名前を検出し、以下に示すようにその位置(スパン)を表示します。
場所の名前を見つける
さまざまなモデルをロードすることにより、さまざまな名前のエンティティを検出できます。 以下は、 en-ner-location.bin モデルをロードし、指定された文の場所名を検出するJavaプログラムです。 このプログラムを LocationFinder.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
上記のプログラムは、実行時に、指定された文字列(生テキスト)を読み取り、その中の人物の名前を検出し、以下に示すようにその位置(スパン)を表示します。
NameFinderの確率
以下は、確率を出力するプログラムです。 このプログラムを TokenizerMEProbs.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行時に、上記のプログラムは指定された文字列を読み取り、文をトークン化し、それらを出力します。 さらに、以下に示すように、最後にデコードされたシーケンスの確率も返します。
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 という名前のファイルであるモデルを使用します。 これは、所定の生テキストの品詞にタグを付けるように訓練された事前定義モデルです。
- POSModel クラスを使用して en-pos-maxent.bin モデルを読み込みます。
- POSTaggerME クラスをインスタンス化します。
- 文をトークン化します。
- * tag()*メソッドを使用してタグを生成します。
- POSSample クラスを使用してトークンとタグを印刷します。
以下は、 POSTaggerME クラスを使用して、指定された生テキストのスピーチの部分にタグを付けるプログラムを作成するために従うべき手順です。
ステップ1:モデルを読み込む
POSタグ付けのモデルは、パッケージ opennlp.tools.postag に属する POSModel という名前のクラスで表されます。
トークナイザーモデルをロードするには-
- モデルの InputStream オブジェクトを作成します(FileInputStreamをインスタンス化し、モデルのパスをString形式でコンストラクターに渡します)。
- 次のコードブロックに示すように、 POSModel クラスをインスタンス化し、モデルの InputStream (オブジェクト)をそのコンストラクタへのパラメータとして渡します-
ステップ2:POSTaggerMEクラスのインスタンス化
パッケージ opennlp.tools.postag の POSTaggerME クラスは、指定された生テキストの品詞を予測するために使用されます。 最大エントロピーを使用して決定を行います。
以下に示すように、このクラスをインスタンス化し、前の手順で作成されたモデルオブジェクトを渡します-
ステップ3:文のトークン化
ステップ4:タグを生成する
前のステップで生成されたトークンを渡すことにより、* tag()*メソッドを呼び出します。
ステップ5:トークンとタグを印刷する
このクラスの* toString()メソッドは、タグ付きの文を返します。 次のコードブロックに示すように、前の手順で作成したトークンとタグ配列を渡してこのクラスをインスタンス化し、その toString()*メソッドを呼び出します。
例
以下は、与えられた生のテキストの品詞にタグを付けるプログラムです。 このプログラムを* PosTaggerExample.java。*という名前のファイルに保存します
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行時に、上記のプログラムは指定されたテキストを読み取り、これらの文の品詞を検出して、以下に示すように表示します。
POSタガーパフォーマンス
以下は、生のテキストの品詞にタグを付けるプログラムです。 また、パフォーマンスを監視し、タガーのパフォーマンスを表示します。 このプログラムを PosTagger_Performance.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行時に、上記のプログラムは指定されたテキストを読み取り、これらの文の品詞にタグを付けて表示します。 さらに、POSタガーのパフォーマンスも監視して表示します。
POSタガー確率
以下は、最後のタグ付き文の各タグの確率を表示するプログラムです。 このプログラムを PosTaggerProbs.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行時に、上記のプログラムは指定された生のテキストを読み取り、トークン内の各トークンの品詞にタグを付けて表示します。 さらに、以下に示すように、特定の文の品詞ごとの確率も表示します。
OpenNLP-文の解析
OpenNLP APIを使用して、指定された文を解析できます。 この章では、OpenNLP APIを使用して生テキストを解析する方法について説明します。
OpenNLPライブラリを使用した生テキストの解析
文を検出するために、OpenNLPは事前定義モデル、 en-parserchunking.bin という名前のファイルを使用します。 これは、指定された生テキストを解析するように訓練された事前定義モデルです。
以下は、 ParserTool クラスを使用して、指定された生テキストを解析するプログラムを作成するために従うべき手順です。
ステップ1:モデルの読み込み
テキストを解析するためのモデルは、パッケージ opennlp.tools.parser に属する ParserModel という名前のクラスで表されます。
トークナイザーモデルをロードするには-
- モデルの InputStream オブジェクトを作成します(FileInputStreamをインスタンス化し、モデルのパスをString形式でコンストラクターに渡します)。
- 次のコードブロックに示すように、 ParserModel クラスをインスタンス化し、モデルの InputStream (オブジェクト)をコンストラクターにパラメーターとして渡します。
ステップ2:Parserクラスのオブジェクトを作成する
パッケージ opennlp.tools.parser の Parser クラスは、解析構成要素を保持するためのデータ構造を表します。 ParserFactory クラスのstatic * create()*メソッドを使用して、このクラスのオブジェクトを作成できます。
以下に示すように、前の手順で作成したモデルオブジェクトを渡すことにより、 ParserFactory の* create()*メソッドを呼び出します-
ステップ3:文を解析する
- 解析するテキストを表す文字列変数。
- パーサーオブジェクト。
- 実行される解析の数を表す整数。
文に次のパラメーターを渡すことにより、このメソッドを呼び出します。前のステップで作成された解析オブジェクト、および実行される解析の必要数を表す整数。
例
以下は、指定された生のテキストを解析するプログラムです。 このプログラムを ParserExample.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行時に、上記のプログラムは、指定された生のテキストを読み取り、それを解析し、次の出力を表示します-
OpenNLP-チャンキング文
文のチャンク化とは、文を単語グループや動詞グループなどの単語の一部に分割/分割することを指します。
OpenNLPを使用した文のチャンク化
文を検出するために、OpenNLPは en-chunker.bin という名前のファイルというモデルを使用します。 これは、指定された生テキストの文をチャンクするように訓練された事前定義モデルです。
OpenNLPライブラリを使用して文をチャンクするには、する必要があります-
- 文をトークン化します。
- そのためのPOSタグを生成します。
- ChunkerModel クラスを使用して en-chunker.bin モデルを読み込みます
- ChunkerME クラスをインスタンス化します。
- このクラスの* chunk()*メソッドを使用して文をチャンクします。
以下は、与えられた生のテキストから文をチャンクするプログラムを書くために従うべきステップです。
ステップ1:文のトークン化
次のコードブロックに示すように、 whitespaceTokenizer クラスの* tokenize()*メソッドを使用して文をトークン化します。
ステップ2:POSタグを生成する
次のコードブロックに示すように、 POSTaggerME クラスの* tag()*メソッドを使用して、文のPOSタグを生成します。
ステップ3:モデルの読み込み
文をチャンク化するモデルは、 ChunkerModel という名前のクラスで表されます。このクラスは、パッケージ opennlp.tools.chunker に属します。
文検出モデルをロードするには-
- モデルの InputStream オブジェクトを作成します(FileInputStreamをインスタンス化し、モデルのパスをString形式でコンストラクターに渡します)。
- 次のコードブロックに示すように、 ChunkerModel クラスをインスタンス化し、モデルの InputStream (オブジェクト)をコンストラクターにパラメーターとして渡します-
ステップ4:chunkerMEクラスのインスタンス化
パッケージ opennlp.tools.chunker の chunkerME クラスには、文をチャンクするメソッドが含まれています。 これは、最大エントロピーベースのチャンカーです。
このクラスをインスタンス化し、前の手順で作成したモデルオブジェクトを渡します。
ステップ5:文のチャンク化
前の手順で作成したトークン配列とタグ配列をパラメーターとして渡すことにより、このメソッドを呼び出します。
例
以下は、指定された生テキストの文をチャンクするプログラムです。 このプログラムを ChunkerExample.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存されたJavaファイルをコンパイルして実行します-
実行時に、上記のプログラムは指定された文字列を読み取り、その中の文をチャンクし、以下に示すように表示します。
トークンの位置の検出
次のコードブロックに示すように、* chunkAsSpans()*メソッドによって返されたスパンをSpan配列に格納して印刷できます。
例
以下は、指定された生テキスト内の文を検出するプログラムです。 このプログラムを ChunkerSpansEample.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行すると、上記のプログラムは、指定された文字列とその中のチャンクのスパンを読み取り、次の出力を表示します-
チャンカー確率検出
以下は、 chunker によって最後にデコードされたシーケンスの確率を出力するプログラムです。 このプログラムを ChunkerProbsExample.java という名前のファイルに保存します。
次のコマンドを使用して、コマンドプロンプトから保存したJavaファイルをコンパイルして実行します-
実行時に、上記のプログラムは指定された文字列を読み取り、チャンクし、最後にデコードされたシーケンスの確率を出力します。
OpenNLP-コマンドラインインターフェース
OpenNLPは、コマンドラインからさまざまな操作を実行するためのコマンドラインインターフェイス(CLI)を提供します。 この章では、OpenNLPコマンドラインインターフェイスの使用方法を示すためにいくつかの例を取り上げます。