ओपनएनएलपी - नामांकित मान्यता
किसी दिए गए पाठ से नाम, लोगों, स्थानों और अन्य संस्थाओं को खोजने की प्रक्रिया के रूप में जाना जाता है Nपरिवेश क्षेत्र amed Entity Rपारिस्थितिकी (एनईआर)। इस अध्याय में, हम चर्चा करेंगे कि ओपनएनएलपी लाइब्रेरी का उपयोग करके जावा प्रोग्राम के माध्यम से एनईआर को कैसे आगे बढ़ाया जाए।
नामित एनएलपी का उपयोग कर एंटिटी मान्यता
विभिन्न एनईआर कार्यों को करने के लिए, ओपनएनएलपी अलग-अलग पूर्वनिर्धारित मॉडल का उपयोग करता है, जैसे- en-nerdate.bn, en-ner-location.bin, en-ner-Organization.bin, en-ner-person.bin और en-ner-time। बिन। ये सभी फाइलें पूर्वनिर्धारित मॉडल हैं जिन्हें किसी दिए गए कच्चे पाठ में संबंधित संस्थाओं का पता लगाने के लिए प्रशिक्षित किया जाता है।
opennlp.tools.namefindपैकेज में वे वर्ग और इंटरफ़ेस होते हैं जिनका उपयोग NER कार्य करने के लिए किया जाता है। ओपनएनआरपी लाइब्रेरी का उपयोग करके एनईआर कार्य करने के लिए, आपको निम्न की आवश्यकता है -
संबंधित मॉडल का उपयोग करके लोड करें TokenNameFinderModel कक्षा।
झटपट NameFinder कक्षा।
नाम खोजें और उन्हें प्रिंट करें।
एक प्रोग्राम लिखने के लिए निम्नलिखित चरणों का पालन करना चाहिए जो किसी दिए गए कच्चे पाठ से नाम संस्थाओं का पता लगाता है।
चरण 1: मॉडल लोड हो रहा है
वाक्य का पता लगाने के लिए मॉडल को नामित वर्ग द्वारा दर्शाया गया है TokenNameFinderModel, जो पैकेज के अंतर्गत आता है opennlp.tools.namefind।
एक एनईआर मॉडल लोड करने के लिए -
बनाओ InputStream मॉडल का उद्देश्य (FileInputStream झटपट करें और इसके निर्माण में स्ट्रिंग प्रारूप में उपयुक्त एनईआर मॉडल का मार्ग पास करें)।
झटपट TokenNameFinderModel कक्षा और पास InputStream (ऑब्जेक्ट) इसके निर्माता के लिए एक पैरामीटर के रूप में, जैसा कि निम्नलिखित कोड ब्लॉक में दिखाया गया है।
//Loading the NER-person model
InputStream inputStreamNameFinder = new FileInputStream(".../en-nerperson.bin");
TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder);
चरण 2: NameFinderME वर्ग को त्वरित करना
NameFinderME पैकेज की कक्षा opennlp.tools.namefindएनईआर कार्यों को करने के लिए तरीके हैं। यह वर्ग दिए गए कच्चे पाठ में नामित संस्थाओं को खोजने के लिए अधिकतम एंट्रोपी मॉडल का उपयोग करता है।
इस वर्ग को तुरंत लिखें और पिछले चरण में बनाए गए मॉडल ऑब्जेक्ट को नीचे दिखाए गए अनुसार दर्ज करें -
//Instantiating the NameFinderME class
NameFinderME nameFinder = new NameFinderME(model);
चरण 3: वाक्य में नाम ढूँढना
find() की विधि NameFinderMEकक्षा का उपयोग इसके लिए पारित कच्चे पाठ में नामों का पता लगाने के लिए किया जाता है। यह विधि एक स्ट्रिंग चर को एक पैरामीटर के रूप में स्वीकार करती है।
इस विधि में वाक्य के स्ट्रिंग प्रारूप को पास करके इस विधि को लागू करें।
//Finding the names in the sentence
Span nameSpans[] = nameFinder.find(sentence);
चरण 4: वाक्य में नामों के स्पैन को प्रिंट करना
find() की विधि NameFinderMEवर्ग प्रकार की वस्तुओं की एक सरणी देता है। स्पान नाम की कक्षाopennlp.tools.util पैकेज का उपयोग स्टोर करने के लिए किया जाता है start तथा end सेट का पूर्णांक।
आप द्वारा दिए गए स्पैन को स्टोर कर सकते हैं find() स्पैन ऐरे में विधि और उन्हें प्रिंट करें, जैसा कि निम्नलिखित कोड ब्लॉक में दिखाया गया है।
//Printing the sentences and their spans of a sentence
for (Span span : spans)
System.out.println(paragraph.substring(span);
NER Example
निम्नलिखित कार्यक्रम है जो दिए गए वाक्य को पढ़ता है और इसमें व्यक्तियों के नामों के विस्तार को पहचानता है। इस प्रोग्राम को नाम के साथ फाइल में सेव करेंNameFinderME_Example.java।
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.namefind.NameFinderME;
import opennlp.tools.namefind.TokenNameFinderModel;
import opennlp.tools.util.Span;
public class NameFinderME_Example {
public static void main(String args[]) throws Exception{
/Loading the NER - Person model InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-ner-person.bin");
TokenNameFinderModel model = new TokenNameFinderModel(inputStream);
//Instantiating the NameFinder class
NameFinderME nameFinder = new NameFinderME(model);
//Getting the sentence in the form of String array
String [] sentence = new String[]{
"Mike",
"and",
"Smith",
"are",
"good",
"friends"
};
//Finding the names in the sentence
Span nameSpans[] = nameFinder.find(sentence);
//Printing the spans of the names in the sentence
for(Span s: nameSpans)
System.out.println(s.toString());
}
}
निम्न आदेशों का उपयोग करके कमांड प्रॉम्प्ट से सहेजी गई जावा फ़ाइल को संकलित करें और निष्पादित करें -
javac NameFinderME_Example.java
java NameFinderME_Example
निष्पादित करने पर, उपरोक्त कार्यक्रम दिए गए स्ट्रिंग (कच्चे पाठ) को पढ़ता है, इसमें व्यक्तियों के नाम का पता लगाता है, और उनके पदों (स्पैन) को प्रदर्शित करता है, जैसा कि नीचे दिखाया गया है।
[0..1) person
[2..3) person
उनके पदों के साथ नाम
substring() स्ट्रिंग कक्षा की विधि स्वीकार करती है begin और यह end offsetsऔर संबंधित स्ट्रिंग लौटाता है। हम इस पद्धति का उपयोग नामों और उनके स्पैन (स्थिति) को एक साथ प्रिंट करने के लिए कर सकते हैं, जैसा कि निम्नलिखित कोड ब्लॉक में दिखाया गया है।
for(Span s: nameSpans)
System.out.println(s.toString()+" "+tokens[s.getStart()]);
निम्नलिखित दिए गए कच्चे पाठ से नामों का पता लगाने और उन्हें अपने पदों के साथ प्रदर्शित करने का कार्यक्रम है। इस प्रोग्राम को नाम के साथ फाइल में सेव करेंNameFinderSentences.java।
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.namefind.NameFinderME;
import opennlp.tools.namefind.TokenNameFinderModel;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
import opennlp.tools.util.Span;
public class NameFinderSentences {
public static void main(String args[]) throws Exception{
//Loading the tokenizer model
InputStream inputStreamTokenizer = new
FileInputStream("C:/OpenNLP_models/entoken.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStreamTokenizer);
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
//Tokenizing the sentence in to a string array
String sentence = "Mike is senior programming
manager and Rama is a clerk both are working at
Tutorialspoint";
String tokens[] = tokenizer.tokenize(sentence);
//Loading the NER-person model
InputStream inputStreamNameFinder = new
FileInputStream("C:/OpenNLP_models/enner-person.bin");
TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder);
//Instantiating the NameFinderME class
NameFinderME nameFinder = new NameFinderME(model);
//Finding the names in the sentence
Span nameSpans[] = nameFinder.find(tokens);
//Printing the names and their spans in a sentence
for(Span s: nameSpans)
System.out.println(s.toString()+" "+tokens[s.getStart()]);
}
}
निम्न आदेशों का उपयोग करके कमांड प्रॉम्प्ट से सहेजी गई जावा फ़ाइल को संकलित करें और निष्पादित करें -
javac NameFinderSentences.java
java NameFinderSentences
निष्पादित करने पर, उपरोक्त कार्यक्रम दिए गए स्ट्रिंग (कच्चे पाठ) को पढ़ता है, इसमें व्यक्तियों के नाम का पता लगाता है, और नीचे दिखाए गए अनुसार उनके पदों (स्पैन) को प्रदर्शित करता है।
[0..1) person Mike
स्थान के नाम का पता लगाना
विभिन्न मॉडलों को लोड करके, आप विभिन्न नामित संस्थाओं का पता लगा सकते हैं। निम्नलिखित एक जावा प्रोग्राम है जो लोड करता हैen-ner-location.binमॉडल और दिए गए वाक्य में स्थान के नाम का पता लगाता है। इस प्रोग्राम को नाम के साथ फाइल में सेव करेंLocationFinder.java।
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.namefind.NameFinderME;
import opennlp.tools.namefind.TokenNameFinderModel;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
import opennlp.tools.util.Span;
public class LocationFinder {
public static void main(String args[]) throws Exception{
InputStream inputStreamTokenizer = new
FileInputStream("C:/OpenNLP_models/entoken.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStreamTokenizer);
//String paragraph = "Mike and Smith are classmates";
String paragraph = "Tutorialspoint is located in Hyderabad";
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
String tokens[] = tokenizer.tokenize(paragraph);
//Loading the NER-location moodel
InputStream inputStreamNameFinder = new
FileInputStream("C:/OpenNLP_models/en- ner-location.bin");
TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder);
//Instantiating the NameFinderME class
NameFinderME nameFinder = new NameFinderME(model);
//Finding the names of a location
Span nameSpans[] = nameFinder.find(tokens);
//Printing the spans of the locations in the sentence
for(Span s: nameSpans)
System.out.println(s.toString()+" "+tokens[s.getStart()]);
}
}
निम्न आदेशों का उपयोग करके कमांड प्रॉम्प्ट से सहेजी गई जावा फ़ाइल को संकलित करें और निष्पादित करें -
javac LocationFinder.java
java LocationFinder
निष्पादित करने पर, उपरोक्त कार्यक्रम दिए गए स्ट्रिंग (कच्चे पाठ) को पढ़ता है, इसमें व्यक्तियों के नाम का पता लगाता है, और उनके पदों (स्पैन) को प्रदर्शित करता है, जैसा कि नीचे दिखाया गया है।
[4..5) location Hyderabad
NameFinder संभावना
probs()की विधि NameFinderME वर्ग का उपयोग अंतिम डिकोड किए गए अनुक्रम की संभावनाओं को प्राप्त करने के लिए किया जाता है।
double[] probs = nameFinder.probs();
निम्नलिखित संभावनाओं को मुद्रित करने का कार्यक्रम है। इस प्रोग्राम को नाम के साथ फाइल में सेव करेंTokenizerMEProbs.java।
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
import opennlp.tools.util.Span;
public class TokenizerMEProbs {
public static void main(String args[]) throws Exception{
String sent = "Hello John how are you welcome to Tutorialspoint";
//Loading the Tokenizer model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-token.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStream);
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
//Retrieving the positions of the tokens
Span tokens[] = tokenizer.tokenizePos(sent);
//Getting the probabilities of the recent calls to tokenizePos() method
double[] probs = tokenizer.getTokenProbabilities();
//Printing the spans of tokens
for( Span token : tokens)
System.out.println(token +"
"+sent.substring(token.getStart(), token.getEnd()));
System.out.println(" ");
for(int i = 0; i<probs.length; i++)
System.out.println(probs[i]);
}
}
निम्न आदेशों का उपयोग करके कमांड प्रॉम्प्ट से सहेजी गई जावा फ़ाइल को संकलित करें और निष्पादित करें -
javac TokenizerMEProbs.java
java TokenizerMEProbs
निष्पादित करने पर, उपरोक्त कार्यक्रम दिए गए स्ट्रिंग को पढ़ता है, वाक्यों को टोकन देता है, और उन्हें प्रिंट करता है। इसके अलावा, यह अंतिम डिकोड किए गए अनुक्रम की संभावनाओं को भी लौटाता है, जैसा कि नीचे दिखाया गया है।
[0..5) Hello
[6..10) John
[11..14) how
[15..18) are
[19..22) you
[23..30) welcome
[31..33) to
[34..48) Tutorialspoint
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0