Opennlp-sentence-detection
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()メソッドの最新の呼び出しに関連付けられた確率も返します。