ओपनएनएलपी - चुनिंदा वाक्य

वाक्यों को चैंकाने से तात्पर्य शब्दों के भागों जैसे शब्द समूहों और क्रिया समूहों में एक वाक्य को तोड़ना / विभाजित करना है।

ओपनएनएलपी का उपयोग करके एक वाक्य चुन लेना

वाक्यों का पता लगाने के लिए, ओपनएनएलपी एक मॉडल, एक फ़ाइल का उपयोग करता है जिसका नाम है en-chunker.bin। यह एक पूर्वनिर्धारित मॉडल है जिसे दिए गए कच्चे पाठ में वाक्यों को सुनाने के लिए प्रशिक्षित किया गया है।

opennlp.tools.chunker पैकेज में वे वर्ग और इंटरफ़ेस होते हैं जिनका उपयोग गैर-पुनरावर्ती वाक्य-विन्यास एनोटेशन जैसे संज्ञा वाक्यांश विखंडन को खोजने के लिए किया जाता है।

आप विधि का उपयोग करके एक वाक्य को काट सकते हैं chunk() का ChunkerMEकक्षा। यह विधि एक वाक्य और पीओएस टैग के टोकन को पैरामीटर के रूप में स्वीकार करती है। इसलिए, chunking की प्रक्रिया शुरू करने से पहले, सबसे पहले आपको वाक्य को टोकन करना होगा और इसके 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: पीओएस टैग उत्पन्न करना

का उपयोग करके वाक्य के पीओएस टैग उत्पन्न करें 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कक्षा का उपयोग उसमें दिए गए कच्चे पाठ में वाक्यों को सुनाने के लिए किया जाता है। यह विधि मापदंडों के रूप में टोकन और टैग का प्रतिनिधित्व करने वाले दो स्ट्रिंग सरणियों को स्वीकार करती है।

मापदंडों के रूप में पिछले चरणों में बनाए गए टोकन सरणी और टैग सरणी को पास करके इस विधि को लागू करें।

//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);         
   }    
}

निम्न कमांड का उपयोग करके कमांड प्रॉम्प्ट से सहेजी गई जावा फ़ाइल को संकलित करें और निष्पादित करें -

javac ChunkerExample.java 
java ChunkerExample

निष्पादित करने पर, उपरोक्त कार्यक्रम दिए गए स्ट्रिंग को पढ़ता है और इसमें दिए गए वाक्यों को चुनता है, और उन्हें नीचे दिखाए अनुसार प्रदर्शित करता है।

Loading POS Tagger model ... done (1.040s) 
B-NP 
I-NP 
B-VP 
I-VP

टोकन की स्थिति का पता लगाना

हम का उपयोग करके विखंडू की स्थिति या स्पैन का भी पता लगा सकते हैं chunkAsSpans() की विधि ChunkerMEकक्षा। यह विधि स्पान प्रकार की वस्तुओं की एक सरणी देती है। स्पान नाम की कक्षाopennlp.tools.util पैकेज का उपयोग स्टोर करने के लिए किया जाता है start तथा end सेट का पूर्णांक।

आप द्वारा दिए गए स्पैन को स्टोर कर सकते हैं chunkAsSpans() स्पैन ऐरे में विधि और उन्हें प्रिंट करें, जैसा कि निम्नलिखित कोड ब्लॉक में दिखाया गया है।

//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());  
   }    
}

निम्न आदेशों का उपयोग करके कमांड प्रॉम्प्ट से सहेजी गई जावा फ़ाइल को संकलित करें और निष्पादित करें -

javac ChunkerSpansEample.java 
java ChunkerSpansEample

निष्पादित करने पर, उपरोक्त कार्यक्रम दिए गए स्ट्रिंग को पढ़ता है और इसमें विखंडू का विस्तार करता है, और निम्नलिखित आउटपुट प्रदर्शित करता है -

Loading POS Tagger model ... done (1.059s) 
[0..2) NP 
[2..4) VP

Chunker प्रायिकता का पता लगाने

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]);       
   }    
}

निम्न आदेशों का उपयोग करके कमांड प्रॉम्प्ट से सहेजी गई जावा फ़ाइल को संकलित करें और निष्पादित करें -

javac ChunkerProbsExample.java 
java ChunkerProbsExample

निष्पादित करने पर, उपरोक्त कार्यक्रम दिए गए स्ट्रिंग को पढ़ता है, इसे चुनता है, और अंतिम डिकोड किए गए अनुक्रम की संभावनाओं को प्रिंट करता है।

0.9592746040797778 
0.6883933131241501 
0.8830563473996004 
0.8951150529746051