OpenNLP - Cümleleri Parçalama
Bir cümleyi parçalamak, bir cümleyi kelime grupları ve fiil grupları gibi kelimelerin parçalarına ayırmak / bölmek anlamına gelir.
OpenNLP Kullanarak Cümle Oluşturma
OpenNLP, cümleleri algılamak için bir model, adında bir dosya kullanır. en-chunker.bin. Bu, verilen ham metindeki cümleleri parçalamak için eğitilmiş önceden tanımlanmış bir modeldir.
opennlp.tools.chunker paketi, isim deyimi parçaları gibi yinelemeli olmayan sözdizimsel ek açıklamaları bulmak için kullanılan sınıfları ve arabirimleri içerir.
Yöntemi kullanarak bir cümleyi parçalayabilirsiniz chunk() of ChunkerMEsınıf. Bu yöntem, bir cümlenin simgelerini ve POS etiketlerini parametre olarak kabul eder. Bu nedenle, parçalama sürecine başlamadan önce, öncelikle cümleyi şifrelemeniz ve bölümlerinin POS etiketlerini oluşturmanız gerekir.
OpenNLP kitaplığını kullanarak bir cümleyi parçalamak için yapmanız gerekenler -
Cümleyi şifreleyin.
Bunun için POS etiketleri oluşturun.
Yükle en-chunker.bin kullanarak model ChunkerModel sınıf
Örnekleyin ChunkerME sınıf.
Kullanarak cümleleri parçalara ayırın chunk() bu sınıfın yöntemi.
Verilen ham metinden cümleleri parçalamak için bir program yazmak için izlenecek adımlar aşağıdadır.
Adım 1: Cümlenin şifrelenmesi
Cümleleri kullanarak şifreleyin tokenize() yöntemi whitespaceTokenizer aşağıdaki kod bloğunda gösterildiği gibi.
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
Adım 2: POS etiketlerinin oluşturulması
Cümlenin POS etiketlerini kullanarak tag() yöntemi POSTaggerME aşağıdaki kod bloğunda gösterildiği gibi.
//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. Adım: Modeli yükleme
Bir cümleyi parçalama modeli, adlı sınıf tarafından temsil edilir. ChunkerModelpakete ait olan opennlp.tools.chunker.
Bir cümle algılama modeli yüklemek için -
Oluşturduğunuz bir InputStream modelin nesnesi (FileInputStream öğesini örnekleyin ve modelin yolunu String biçiminde yapıcısına iletin).
Örnekleyin ChunkerModel sınıf ve geç InputStream (nesne), aşağıdaki kod bloğunda gösterildiği gibi yapıcısına bir parametre olarak modelin -
//Loading the chunker model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel chunkerModel = new ChunkerModel(inputStream);
Adım 4: chunkerME sınıfını örnekleme
chunkerME paketin sınıfı opennlp.tools.chunkercümleleri parçalamak için yöntemler içerir. Bu, maksimum entropi tabanlı bir parçalayıcıdır.
Bu sınıfı örnekleyin ve önceki adımda oluşturulan model nesnesini iletin.
//Instantiate the ChunkerME class
ChunkerME chunkerME = new ChunkerME(chunkerModel);
Adım 5: Cümlenin parçalanması
chunk() yöntemi ChunkerMEsınıfı, kendisine aktarılan ham metindeki cümleleri parçalara ayırmak için kullanılır. Bu yöntem, belirteçleri ve etiketleri parametreler olarak temsil eden iki String dizisini kabul eder.
Önceki adımlarda oluşturulan belirteç dizisini ve etiket dizisini parametre olarak ileterek bu yöntemi çağırın.
//Generating the chunks
String result[] = chunkerME.chunk(tokens, tags);
Example
Aşağıda, verilen ham metindeki cümleleri parçalama programı verilmiştir. Bu programı adıyla bir dosyaya kaydedinChunkerExample.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);
}
}
Kaydedilen Java dosyasını aşağıdaki komutu kullanarak Komut isteminden derleyin ve yürütün -
javac ChunkerExample.java
java ChunkerExample
Yürütüldüğünde, yukarıdaki program verilen String'i okur ve içindeki cümleleri parçalar ve aşağıda gösterildiği gibi görüntüler.
Loading POS Tagger model ... done (1.040s)
B-NP
I-NP
B-VP
I-VP
Jetonların Konumlarının Tespiti
Ayrıca parçaların konumlarını veya aralıklarını da chunkAsSpans() yöntemi ChunkerMEsınıf. Bu yöntem, Span türünde bir dizi nesne döndürür. Span adlı sınıfopennlp.tools.util paketi saklamak için kullanılır start ve end kümelerin tamsayısı.
Tarafından döndürülen aralıkları saklayabilirsiniz. chunkAsSpans() yöntemini Span dizisine ekleyin ve aşağıdaki kod bloğunda gösterildiği gibi yazdırın.
//Generating the tagged chunk spans
Span[] span = chunkerME.chunkAsSpans(tokens, tags);
for (Span s : span)
System.out.println(s.toString());
Example
Aşağıda verilen ham metindeki cümleleri tespit eden program yer almaktadır. Bu programı adıyla bir dosyaya kaydedinChunkerSpansEample.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());
}
}
Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -
javac ChunkerSpansEample.java
java ChunkerSpansEample
Yürütüldüğünde, yukarıdaki program verilen String'i ve içindeki parçaların aralıklarını okur ve aşağıdaki çıktıyı görüntüler -
Loading POS Tagger model ... done (1.059s)
[0..2) NP
[2..4) VP
Chunker Olasılık Algılama
probs() yöntemi ChunkerME sınıfı, son kodu çözülen dizinin olasılıklarını döndürür.
//Getting the probabilities of the last decoded sequence
double[] probs = chunkerME.probs();
Aşağıda, son kodu çözülen dizinin olasılıklarını, chunker. Bu programı adıyla bir dosyaya kaydedinChunkerProbsExample.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]);
}
}
Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -
javac ChunkerProbsExample.java
java ChunkerProbsExample
Yürütüldüğünde, yukarıdaki program verilen String'i okur, parçalara ayırır ve son kodu çözülen dizinin olasılıklarını yazdırır.
0.9592746040797778
0.6883933131241501
0.8830563473996004
0.8951150529746051