OpenNLP-청킹 문장
문장 청크는 문장을 단어 그룹 및 동사 그룹과 같은 단어의 일부로 나누거나 나누는 것을 의미합니다.
OpenNLP를 사용하여 문장 청크
문장을 감지하기 위해 OpenNLP는 en-chunker.bin. 이것은 주어진 원시 텍스트에서 문장을 청크하도록 훈련 된 미리 정의 된 모델입니다.
그만큼 opennlp.tools.chunker 패키지에는 명사구 청크와 같은 비재 귀적 구문 주석을 찾는 데 사용되는 클래스와 인터페이스가 포함되어 있습니다.
방법을 사용하여 문장을 청크 할 수 있습니다 chunk() 의 ChunkerME수업. 이 방법은 문장의 토큰과 POS 태그를 매개 변수로 받아들입니다. 따라서 청킹 프로세스를 시작하기 전에 먼저 문장을 토큰 화하고 그 부분의 POS 태그를 생성해야합니다.
OpenNLP 라이브러리를 사용하여 문장을 청크하려면 다음을 수행해야합니다.
문장을 토큰 화하십시오.
그것에 대한 POS 태그를 생성하십시오.
로드 en-chunker.bin 모델을 사용하여 ChunkerModel 수업
인스턴스화 ChunkerME 수업.
다음을 사용하여 문장을 청크하십시오. chunk() 이 클래스의 메서드.
다음은 주어진 원시 텍스트에서 문장을 청크하는 프로그램을 작성하기 위해 따라야 할 단계입니다.
1 단계 : 문장 토큰 화
다음을 사용하여 문장을 토큰 화하십시오. tokenize() 의 방법 whitespaceTokenizer 다음 코드 블록에 표시된대로 클래스.
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
2 단계 : POS 태그 생성
다음을 사용하여 문장의 POS 태그를 생성합니다. tag() 의 방법 POSTaggerME 다음 코드 블록에 표시된대로 클래스.
//Generating the POS tags
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
3 단계 : 모델로드
문장 청크 모델은 다음과 같은 클래스로 표현됩니다. ChunkerModel, 패키지에 속하는 opennlp.tools.chunker.
문장 감지 모델을로드하려면-
만들기 InputStream 모델의 객체 (FileInputStream을 인스턴스화하고 모델의 경로를 String 형식으로 생성자에 전달).
인스턴스화 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클래스는 전달 된 원시 텍스트의 문장을 청크하는 데 사용됩니다. 이 메소드는 토큰과 태그를 나타내는 두 개의 String 배열을 매개 변수로 허용합니다.
이전 단계에서 만든 토큰 배열과 태그 배열을 매개 변수로 전달하여이 메서드를 호출합니다.
//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이라는 클래스는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 클래스는 마지막으로 디코딩 된 시퀀스의 확률을 반환합니다.
//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