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 패키지는 저장하는 데 사용됩니다 startend 세트의 정수.

반환 된 스팬을 저장할 수 있습니다. 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