ओपनएनएलपी - वाक्य पहचान
एक प्राकृतिक भाषा को संसाधित करते समय, वाक्यों की शुरुआत और अंत तय करना समस्याओं को संबोधित करने में से एक है। इस प्रक्रिया के रूप में जाना जाता है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