ओपनएनएलपी - वाक्य पहचान

एक प्राकृतिक भाषा को संसाधित करते समय, वाक्यों की शुरुआत और अंत तय करना समस्याओं को संबोधित करने में से एक है। इस प्रक्रिया के रूप में जाना जाता हैSentence Boundary Disambiguation (SBD) या बस वाक्य तोड़ने।

दी गई पाठ में वाक्यों का पता लगाने के लिए हम जिन तकनीकों का उपयोग करते हैं, वह पाठ की भाषा पर निर्भर करती है।

जावा का उपयोग करके वाक्य का पता लगाना

हम जावा में दिए गए पाठ में वाक्यों का पता लगा सकते हैं, रेगुलर एक्सप्रेशंस और सरल नियमों का एक सेट।

उदाहरण के लिए, हमें एक अवधि, एक प्रश्न चिह्न, या विस्मयादिबोधक चिह्न दिए गए पाठ में एक वाक्य समाप्त होता है, तो हम वाक्य का उपयोग करके विभाजन को समाप्त कर सकते हैं split() की विधि Stringकक्षा। यहां, हमें स्ट्रिंग प्रारूप में एक नियमित अभिव्यक्ति पास करनी होगी।

निम्नलिखित कार्यक्रम है जो जावा नियमित अभिव्यक्तियों का उपयोग करके दिए गए पाठ में वाक्यों को निर्धारित करता है (split method)। इस प्रोग्राम को नाम के साथ फाइल में सेव करेंSentenceDetection_RE.java

public class SentenceDetection_RE {  
   public static void main(String args[]){ 
     
      String sentence = " Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
     
      String simple = "[.?!]";      
      String[] splitString = (sentence.split(simple));     
      for (String string : splitString)   
         System.out.println(string);      
   } 
}

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

javac SentenceDetection_RE.java 
java SentenceDetection_RE

निष्पादित करने पर, उपरोक्त प्रोग्राम एक पीडीएफ दस्तावेज़ बनाता है जो निम्नलिखित संदेश प्रदर्शित करता है।

Hi 
How are you 
Welcome to Tutorialspoint 
We provide free tutorials on various technologies

ओपनएनएलपी का उपयोग करते हुए सजा का पता लगाना

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

opennlp.tools.sentdetect पैकेज में वर्ग और इंटरफेस होते हैं जिनका उपयोग वाक्य का पता लगाने के कार्य को करने के लिए किया जाता है।

OpenNLP लाइब्रेरी का उपयोग करते हुए एक वाक्य का पता लगाने के लिए, आपको निम्न की आवश्यकता है -

  • लोड करें en-sent.bin का उपयोग कर मॉडल SentenceModel कक्षा

  • झटपट SentenceDetectorME कक्षा।

  • का उपयोग कर वाक्यों का पता लगाएं sentDetect() इस वर्ग की विधि।

एक प्रोग्राम लिखने के लिए निम्नलिखित चरणों का पालन करना चाहिए जो दिए गए कच्चे पाठ से वाक्यों का पता लगाता है।

चरण 1: मॉडल लोड हो रहा है

वाक्य का पता लगाने के लिए मॉडल को नामित वर्ग द्वारा दर्शाया गया है SentenceModel, जो पैकेज के अंतर्गत आता है opennlp.tools.sentdetect

एक वाक्य पहचान मॉडल लोड करने के लिए -

  • बनाओ InputStream मॉडल का उद्देश्य (FileInputStream झटपट करें और इसके निर्माणकर्ता को स्ट्रिंग प्रारूप में मॉडल का पथ पास करें)।

  • झटपट SentenceModel कक्षा और पास InputStream (मॉडल) इसके निर्माता के लिए एक पैरामीटर के रूप में निम्न कोड ब्लॉक में दिखाया गया है -

//Loading sentence detector model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/ensent.bin"); 
SentenceModel model = new SentenceModel(inputStream);

चरण 2: SentenceDetectorME वर्ग को त्वरित करना

SentenceDetectorME पैकेज की कक्षा opennlp.tools.sentdetectकच्चे पाठ को वाक्यों में विभाजित करने के तरीके शामिल हैं। यह वर्ग अधिकतम एंट्रोपी मॉडल का उपयोग करके एक वाक्य के अंत का संकेत देने के लिए एक स्ट्रिंग में अंत-वाक्य वाक्य का मूल्यांकन करने के लिए उपयोग करता है।

इस वर्ग को त्वरित करें और पिछले चरण में बनाई गई मॉडल ऑब्जेक्ट को पास करें, जैसा कि नीचे दिखाया गया है।

//Instantiating the SentenceDetectorME class 
SentenceDetectorME detector = new SentenceDetectorME(model);

चरण 3: वाक्य का पता लगाना

sentDetect() की विधि SentenceDetectorMEकक्षा का उपयोग इसके लिए पारित कच्चे पाठ में वाक्यों का पता लगाने के लिए किया जाता है। यह विधि एक स्ट्रिंग चर को एक पैरामीटर के रूप में स्वीकार करती है।

इस विधि में वाक्य के स्ट्रिंग प्रारूप को पास करके इस विधि को लागू करें।

//Detecting the sentence 
String sentences[] = detector.sentDetect(sentence);

Example

निम्नलिखित कार्यक्रम है जो एक दिए गए कच्चे पाठ में वाक्यों का पता लगाता है। इस प्रोग्राम को नाम वाली फ़ाइल में सेव करेंSentenceDetectionME.java

import java.io.FileInputStream; 
import java.io.InputStream;  

import opennlp.tools.sentdetect.SentenceDetectorME; 
import opennlp.tools.sentdetect.SentenceModel;  

public class SentenceDetectionME { 
  
   public static void main(String args[]) throws Exception { 
   
      String sentence = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
       
      //Loading sentence detector model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin"); 
      SentenceModel model = new SentenceModel(inputStream); 
       
      //Instantiating the SentenceDetectorME class 
      SentenceDetectorME detector = new SentenceDetectorME(model);  
    
      //Detecting the sentence
      String sentences[] = detector.sentDetect(sentence); 
    
      //Printing the sentences 
      for(String sent : sentences)        
         System.out.println(sent);  
   } 
}

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

javac SentenceDetectorME.java 
java SentenceDetectorME

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

Hi. How are you? 
Welcome to Tutorialspoint. 
We provide free tutorials on various technologies

वाक्यों की स्थिति का पता लगाना

हम सेंटपोसडेक्ट () विधि के प्रयोग से वाक्यों की स्थिति का भी पता लगा सकते हैं SentenceDetectorME class

एक प्रोग्राम लिखने के लिए निम्नलिखित चरणों का पालन करना चाहिए जो दिए गए कच्चे पाठ से वाक्यों की स्थिति का पता लगाता है।

चरण 1: मॉडल लोड हो रहा है

वाक्य का पता लगाने के लिए मॉडल को नामित वर्ग द्वारा दर्शाया गया है SentenceModel, जो पैकेज के अंतर्गत आता है opennlp.tools.sentdetect

एक वाक्य पहचान मॉडल लोड करने के लिए -

  • बनाओ InputStream मॉडल का उद्देश्य (FileInputStream झटपट करें और इसके निर्माणकर्ता को स्ट्रिंग प्रारूप में मॉडल का पथ पास करें)।

  • झटपट SentenceModel कक्षा और पास InputStream (ऑब्जेक्ट) इसके निर्माता के लिए एक पैरामीटर के रूप में, जैसा कि निम्नलिखित कोड ब्लॉक में दिखाया गया है।

//Loading sentence detector model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin"); 
SentenceModel model = new SentenceModel(inputStream);

चरण 2: SentenceDetectorME वर्ग को त्वरित करना

SentenceDetectorME पैकेज की कक्षा opennlp.tools.sentdetectकच्चे पाठ को वाक्यों में विभाजित करने के तरीके शामिल हैं। यह वर्ग अधिकतम एंट्रोपी मॉडल का उपयोग करके एक वाक्य के अंत का संकेत देने के लिए एक स्ट्रिंग में अंत-वाक्य वाक्य का मूल्यांकन करने के लिए उपयोग करता है।

इस वर्ग को तुरंत लिखें और पिछले चरण में बनाए गए मॉडल ऑब्जेक्ट को पास करें।

//Instantiating the SentenceDetectorME class 
SentenceDetectorME detector = new SentenceDetectorME(model);

चरण 3: वाक्य की स्थिति का पता लगाना

sentPosDetect() की विधि SentenceDetectorMEकक्षा का उपयोग उसमें दिए गए कच्चे पाठ में वाक्यों की स्थिति का पता लगाने के लिए किया जाता है। यह विधि एक स्ट्रिंग चर को एक पैरामीटर के रूप में स्वीकार करती है।

इस विधि के पैरामीटर के रूप में वाक्य के स्ट्रिंग प्रारूप को पास करके इस विधि को लागू करें।

//Detecting the position of the sentences in the paragraph  
Span[] spans = detector.sentPosDetect(sentence);

चरण 4: वाक्यों की स्पैन प्रिंटिंग

sentPosDetect() की विधि SentenceDetectorME वर्ग प्रकार की वस्तुओं की एक सरणी देता है Span। स्पान नाम की कक्षाopennlp.tools.util पैकेज का उपयोग सेट के प्रारंभ और अंत पूर्णांक को संग्रहीत करने के लिए किया जाता है।

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

//Printing the sentences and their spans of a sentence 
for (Span span : spans)         
System.out.println(paragraph.substring(span);

Example

निम्नलिखित कार्यक्रम है जो दिए गए कच्चे पाठ में वाक्यों का पता लगाता है। इस प्रोग्राम को नाम वाली फ़ाइल में सेव करेंSentenceDetectionME.java

import java.io.FileInputStream; 
import java.io.InputStream; 
  
import opennlp.tools.sentdetect.SentenceDetectorME; 
import opennlp.tools.sentdetect.SentenceModel; 
import opennlp.tools.util.Span;

public class SentencePosDetection { 
  
   public static void main(String args[]) throws Exception { 
   
      String paragraph = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
       
      //Loading sentence detector model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin"); 
      SentenceModel model = new SentenceModel(inputStream); 
       
      //Instantiating the SentenceDetectorME class 
      SentenceDetectorME detector = new SentenceDetectorME(model);  
       
      //Detecting the position of the sentences in the raw text 
      Span spans[] = detector.sentPosDetect(paragraph); 
       
      //Printing the spans of the sentences in the paragraph 
      for (Span span : spans)         
         System.out.println(span);  
   } 
}

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

javac SentencePosDetection.java 
java SentencePosDetection

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

[0..16) 
[17..43) 
[44..93)

उनके पदों के साथ वाक्य

substring() स्ट्रिंग कक्षा की विधि स्वीकार करती है begin और यह end offsetsऔर संबंधित स्ट्रिंग लौटाता है। हम इस विधि का उपयोग वाक्यों और उनके स्पैन (स्थिति) को एक साथ प्रिंट करने के लिए कर सकते हैं, जैसा कि निम्नलिखित कोड ब्लॉक में दिखाया गया है।

for (Span span : spans)         
   System.out.println(sen.substring(span.getStart(), span.getEnd())+" "+ span);

नीचे दिए गए कच्चे पाठ से वाक्यों का पता लगाने और उन्हें उनके पदों के साथ प्रदर्शित करने का कार्यक्रम निम्नलिखित है। इस प्रोग्राम को नाम वाली फ़ाइल में सहेजेंSentencesAndPosDetection.java

import java.io.FileInputStream; 
import java.io.InputStream;  

import opennlp.tools.sentdetect.SentenceDetectorME; 
import opennlp.tools.sentdetect.SentenceModel; 
import opennlp.tools.util.Span; 
   
public class SentencesAndPosDetection { 
  
   public static void main(String args[]) throws Exception { 
     
      String sen = "Hi. How are you? Welcome to Tutorialspoint." 
         + " We provide free tutorials on various technologies"; 
      //Loading a sentence model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin"); 
      SentenceModel model = new SentenceModel(inputStream); 
       
      //Instantiating the SentenceDetectorME class 
      SentenceDetectorME detector = new SentenceDetectorME(model);  
       
      //Detecting the position of the sentences in the paragraph  
      Span[] spans = detector.sentPosDetect(sen);  
      
      //Printing the sentences and their spans of a paragraph 
      for (Span span : spans)         
         System.out.println(sen.substring(span.getStart(), span.getEnd())+" "+ span);  
   } 
}

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

javac SentencesAndPosDetection.java 
java SentencesAndPosDetection

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

Hi. How are you? [0..16) 
Welcome to Tutorialspoint. [17..43)  
We provide free tutorials on various technologies [44..93)

वाक्य संभावना जांच

getSentenceProbabilities() की विधि SentenceDetectorME क्लास सबसे हाल की कॉल से जुड़ी संभावनाओं को रिटर्नडेट () विधि में लौटाता है।

//Getting the probabilities of the last decoded sequence       
double[] probs = detector.getSentenceProbabilities();

कॉलडिट के साथ जुड़ी संभावनाएं () विधि को प्रिंट करने का कार्यक्रम निम्नलिखित है। इस प्रोग्राम को नाम के साथ फाइल में सेव करेंSentenceDetectionMEProbs.java

import java.io.FileInputStream; 
import java.io.InputStream;  

import opennlp.tools.sentdetect.SentenceDetectorME; 
import opennlp.tools.sentdetect.SentenceModel;  

public class SentenceDetectionMEProbs { 
  
   public static void main(String args[]) throws Exception { 
   
      String sentence = "Hi. How are you? Welcome to Tutorialspoint. " 
         + "We provide free tutorials on various technologies"; 
       
      //Loading sentence detector model 
      InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
      SentenceModel model = new SentenceModel(inputStream); 
       
      //Instantiating the SentenceDetectorME class
      SentenceDetectorME detector = new SentenceDetectorME(model);  
      
      //Detecting the sentence 
      String sentences[] = detector.sentDetect(sentence); 
    
      //Printing the sentences 
      for(String sent : sentences)        
         System.out.println(sent);   
         
      //Getting the probabilities of the last decoded sequence       
      double[] probs = detector.getSentenceProbabilities(); 
       
      System.out.println("  "); 
       
      for(int i = 0; i<probs.length; i++) 
         System.out.println(probs[i]); 
   } 
}

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

javac SentenceDetectionMEProbs.java 
java SentenceDetectionMEProbs

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

Hi. How are you? 
Welcome to Tutorialspoint. 
We provide free tutorials on various technologies 
   
0.9240246995179983 
0.9957680129995953 
1.0