OpenNLP - Chunking Kalimat
Memotong kalimat mengacu pada pemecahan / pembagian kalimat menjadi beberapa bagian kata seperti kelompok kata dan kelompok kata kerja.
Memecah Kalimat menggunakan OpenNLP
Untuk mendeteksi kalimat, OpenNLP menggunakan model, file bernama en-chunker.bin. Ini adalah model standar yang dilatih untuk memecah kalimat dalam teks mentah yang diberikan.
Itu opennlp.tools.chunker paket berisi kelas dan antarmuka yang digunakan untuk menemukan anotasi sintaksis non-rekursif seperti potongan frase kata benda.
Anda dapat memotong kalimat menggunakan metode ini chunk() dari ChunkerMEkelas. Metode ini menerima token kalimat dan tag POS sebagai parameter. Oleh karena itu, sebelum memulai proses chunking, pertama-tama Anda perlu melakukan Token pada kalimat dan membuat tag POS bagian-bagiannya.
Untuk memotong kalimat menggunakan pustaka OpenNLP, Anda perlu -
Tokenkan kalimat tersebut.
Hasilkan tag POS untuk itu.
Muat file en-chunker.bin model menggunakan ChunkerModel kelas
Instantiate ChunkerME kelas.
Potong kalimat menggunakan chunk() metode kelas ini.
Berikut adalah langkah-langkah yang harus diikuti untuk menulis program untuk memotong kalimat dari teks mentah yang diberikan.
Langkah 1: Tokenisasi kalimat
Tokenkan kalimat menggunakan tokenize() metode dari whitespaceTokenizer kelas, seperti yang ditunjukkan pada blok kode berikut.
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
Langkah 2: Membuat tag POS
Hasilkan tag POS dari kalimat menggunakan tag() metode dari POSTaggerME kelas, seperti yang ditunjukkan pada blok kode berikut.
//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);
Langkah 3: Memuat model
Model untuk memotong kalimat diwakili oleh kelas bernama ChunkerModel, yang termasuk dalam paket opennlp.tools.chunker.
Untuk memuat model deteksi kalimat -
Buat InputStream objek model (Membuat Instansiasi FileInputStream dan meneruskan jalur model dalam format String ke konstruktornya).
Instantiate ChunkerModel kelas dan lulus InputStream (object) dari model sebagai parameter untuk konstruktornya, seperti yang ditunjukkan pada blok kode berikut -
//Loading the chunker model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel chunkerModel = new ChunkerModel(inputStream);
Langkah 4: Membuat instance kelas chunkerME
Itu chunkerME kelas paket opennlp.tools.chunkerberisi metode untuk memotong kalimat. Ini adalah chunker berbasis entropi maksimum.
Buat instance kelas ini dan teruskan objek model yang dibuat di langkah sebelumnya.
//Instantiate the ChunkerME class
ChunkerME chunkerME = new ChunkerME(chunkerModel);
Langkah 5: Memotong kalimat
Itu chunk() metode dari ChunkerMEclass digunakan untuk memotong kalimat dalam teks mentah yang diteruskan padanya. Metode ini menerima dua larik String yang mewakili token dan tag, sebagai parameter.
Panggil metode ini dengan meneruskan larik token dan larik tag yang dibuat pada langkah sebelumnya sebagai parameter.
//Generating the chunks
String result[] = chunkerME.chunk(tokens, tags);
Example
Berikut adalah program untuk memotong kalimat dalam teks mentah yang diberikan. Simpan program ini dalam sebuah file dengan namaChunkerExample.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);
}
}
Kompilasi dan jalankan file Java yang disimpan dari Command prompt menggunakan perintah berikut -
javac ChunkerExample.java
java ChunkerExample
Saat menjalankan, program di atas membaca String yang diberikan dan memotong kalimat di dalamnya, dan menampilkannya seperti yang ditunjukkan di bawah ini.
Loading POS Tagger model ... done (1.040s)
B-NP
I-NP
B-VP
I-VP
Mendeteksi Posisi Token
Kami juga dapat mendeteksi posisi atau bentang potongan menggunakan chunkAsSpans() metode dari ChunkerMEkelas. Metode ini mengembalikan larik objek dengan tipe Span. Kelas bernama Span of theopennlp.tools.util paket digunakan untuk menyimpan file start dan end bilangan bulat himpunan.
Anda dapat menyimpan durasi yang dikembalikan oleh chunkAsSpans() metode dalam array Span dan mencetaknya, seperti yang ditunjukkan pada blok kode berikut.
//Generating the tagged chunk spans
Span[] span = chunkerME.chunkAsSpans(tokens, tags);
for (Span s : span)
System.out.println(s.toString());
Example
Berikut adalah program yang mendeteksi kalimat-kalimat dalam teks mentah yang diberikan. Simpan program ini dalam sebuah file dengan namaChunkerSpansEample.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());
}
}
Kompilasi dan jalankan file Java yang disimpan dari Command prompt menggunakan perintah berikut -
javac ChunkerSpansEample.java
java ChunkerSpansEample
Saat menjalankan, program di atas membaca String dan span yang diberikan dari potongan di dalamnya, dan menampilkan output berikut -
Loading POS Tagger model ... done (1.059s)
[0..2) NP
[2..4) VP
Deteksi Kemungkinan Chunker
Itu probs() metode dari ChunkerME kelas mengembalikan probabilitas dari urutan yang terakhir didekodekan.
//Getting the probabilities of the last decoded sequence
double[] probs = chunkerME.probs();
Berikut adalah program untuk mencetak probabilitas dari urutan terakhir yang diterjemahkan oleh chunker. Simpan program ini dalam sebuah file dengan namaChunkerProbsExample.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]);
}
}
Kompilasi dan jalankan file Java yang disimpan dari Command prompt menggunakan perintah berikut -
javac ChunkerProbsExample.java
java ChunkerProbsExample
Saat menjalankan, program di atas membaca String yang diberikan, memotongnya, dan mencetak probabilitas dari urutan yang terakhir didekodekan.
0.9592746040797778
0.6883933131241501
0.8830563473996004
0.8951150529746051