OpenNLP - Tìm các phần của bài phát biểu
Sử dụng OpenNLP, bạn cũng có thể phát hiện các Phần của Bài phát biểu của một câu nhất định và in chúng. Thay vì tên đầy đủ của các phần của bài phát biểu, OpenNLP sử dụng các dạng ngắn của từng phần của bài phát biểu. Bảng sau đây chỉ ra các phần khác nhau của bài phát biểu được OpenNLP phát hiện và ý nghĩa của chúng.
Các phần của bài phát biểu | Ý nghĩa của các phần của bài phát biểu |
---|---|
NN | Danh từ, số ít hoặc số lượng |
DT | Người xác định |
VB | Động từ, dạng cơ sở |
VBD | Động từ, thì quá khứ |
VBZ | Động từ, ngôi thứ ba thì hiện tại số ít |
TRONG | Chuẩn bị hoặc kết hợp phụ |
NNP | Danh từ riêng, số ít |
ĐẾN | đến |
JJ | Tính từ |
Gắn thẻ các phần của bài phát biểu
Để gắn thẻ các phần lời nói của một câu, OpenNLP sử dụng một mô hình, một tệp có tên en-posmaxent.bin. Đây là một mô hình được xác định trước được đào tạo để gắn thẻ các phần lời nói của văn bản thô nhất định.
Các POSTaggerME lớp của opennlp.tools.postaggói được sử dụng để tải mô hình này và gắn thẻ các phần lời nói của văn bản thô đã cho bằng thư viện OpenNLP. Để làm như vậy, bạn cần phải -
Tải en-pos-maxent.bin mô hình sử dụng POSModel lớp học.
Khởi tạo POSTaggerME lớp học.
Mã hóa câu.
Tạo các thẻ bằng cách sử dụng tag() phương pháp.
In mã thông báo và thẻ bằng cách sử dụng POSSample lớp học.
Sau đây là các bước cần thực hiện để viết một chương trình gắn thẻ các phần của bài phát biểu trong văn bản thô đã cho bằng cách sử dụng POSTaggerME lớp học.
Bước 1: Tải mô hình
Mô hình gắn thẻ POS được đại diện bởi lớp có tên POSModel, thuộc về gói opennlp.tools.postag.
Để tải một mô hình tokenizer -
Tạo ra một InputStream đối tượng của mô hình (Khởi tạo FileInputStream và chuyển đường dẫn của mô hình ở định dạng Chuỗi đến phương thức khởi tạo của nó).
Khởi tạo POSModel lớp và vượt qua InputStream (đối tượng) của mô hình như một tham số cho phương thức khởi tạo của nó, như được hiển thị trong khối mã sau:
//Loading Parts of speech-maxent model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModel(inputStream);
Bước 2: Khởi tạo lớp POSTaggerME
Các POSTaggerME lớp của gói opennlp.tools.postagđược sử dụng để dự đoán các phần lời nói của văn bản thô đã cho. Nó sử dụng Maximum Entropy để đưa ra quyết định của mình.
Khởi tạo lớp này và chuyển đối tượng mô hình đã tạo ở bước trước, như được hiển thị bên dưới:
//Instantiating POSTaggerME class
POSTaggerME tagger = new POSTaggerME(model);
Bước 3: Mã hóa câu
Các tokenize() phương pháp của whitespaceTokenizerlớp được sử dụng để mã hóa văn bản thô được chuyển cho nó. Phương thức này chấp nhận một biến Chuỗi làm tham số và trả về một mảng Chuỗi (mã thông báo).
Khởi tạo whitespaceTokenizer lớp và gọi phương thức này bằng cách chuyển định dạng Chuỗi của câu cho phương thức này.
//Tokenizing the sentence using WhitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
Bước 4: Tạo thẻ
Các tag() phương pháp của whitespaceTokenizerlớp gán thẻ POS cho câu mã thông báo. Phương thức này nhận một mảng mã thông báo (Chuỗi) làm tham số và trả về thẻ (mảng).
Gọi tag() bằng cách chuyển các mã thông báo được tạo ở bước trước cho nó.
//Generating tags
String[] tags = tagger.tag(tokens);
Bước 5: In mã thông báo và thẻ
Các POSSamplelớp đại diện cho câu được gắn thẻ POS. Để khởi tạo lớp này, chúng tôi sẽ yêu cầu một mảng mã thông báo (của văn bản) và một mảng thẻ.
Các toString()phương thức của lớp này trả về câu được gắn thẻ. Khởi tạo lớp này bằng cách chuyển mã thông báo và các mảng thẻ được tạo ở các bước trước đó và gọitoString() , như được hiển thị trong khối mã sau.
//Instantiating the POSSample class
POSSample sample = new POSSample(tokens, tags);
System.out.println(sample.toString());
Example
Sau đây là chương trình gắn thẻ các phần của bài phát biểu trong một văn bản thô nhất định. Lưu chương trình này trong một tệp có tênPosTaggerExample.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSSample;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class PosTaggerExample {
public static void main(String args[]) throws Exception{
//Loading Parts of speech-maxent model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModel(inputStream);
//Instantiating POSTaggerME class
POSTaggerME tagger = new POSTaggerME(model);
String sentence = "Hi welcome to Tutorialspoint";
//Tokenizing the sentence using WhitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating tags
String[] tags = tagger.tag(tokens);
//Instantiating the POSSample class
POSSample sample = new POSSample(tokens, tags);
System.out.println(sample.toString());
}
}
Biên dịch và thực thi tệp Java đã lưu từ Dấu nhắc lệnh bằng các lệnh sau:
javac PosTaggerExample.java
java PosTaggerExample
Khi thực thi, chương trình trên đọc văn bản đã cho và phát hiện các phần lời nói của những câu này và hiển thị chúng, như được hiển thị bên dưới.
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB
Hiệu suất trình gắn thẻ POS
Sau đây là chương trình gắn thẻ các phần của bài phát biểu của một văn bản thô nhất định. Nó cũng theo dõi hiệu suất và hiển thị hiệu suất của trình gắn thẻ. Lưu chương trình này trong một tệp có tênPosTagger_Performance.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.cmdline.PerformanceMonitor;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSSample;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class PosTagger_Performance {
public static void main(String args[]) throws Exception{
//Loading Parts of speech-maxent model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModel(inputStream);
//Creating an object of WhitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Instantiating POSTaggerME class
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags
String[] tags = tagger.tag(tokens);
//Instantiating POSSample class
POSSample sample = new POSSample(tokens, tags);
System.out.println(sample.toString());
//Monitoring the performance of POS tagger
PerformanceMonitor perfMon = new PerformanceMonitor(System.err, "sent");
perfMon.start();
perfMon.incrementCounter();
perfMon.stopAndPrintFinalResult();
}
}
Biên dịch và thực thi tệp Java đã lưu từ Dấu nhắc lệnh bằng các lệnh sau:
javac PosTaggerExample.java
java PosTaggerExample
Khi thực thi, chương trình trên đọc văn bản đã cho và gắn thẻ các phần lời nói của những câu này và hiển thị chúng. Ngoài ra, nó cũng theo dõi hiệu suất của máy gắn thẻ POS và hiển thị nó.
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB
Average: 0.0 sent/s
Total: 1 sent
Runtime: 0.0s
Xác suất người gắn thẻ POS
Các probs() phương pháp của POSTaggerME lớp được sử dụng để tìm xác suất cho mỗi thẻ của câu được gắn thẻ gần đây.
//Getting the probabilities of the recent calls to tokenizePos() method
double[] probs = detector.getSentenceProbabilities();
Sau đây là chương trình hiển thị xác suất cho mỗi thẻ của câu được gắn thẻ cuối cùng. Lưu chương trình này trong một tệp có tênPosTaggerProbs.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSSample;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class PosTaggerProbs {
public static void main(String args[]) throws Exception{
//Loading Parts of speech-maxent model
InputStream inputStream = new FileInputStream("C:/OpenNLP_mdl/en-pos-maxent.bin");
POSModel model = new POSModel(inputStream);
//Creating an object of WhitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Instantiating POSTaggerME class
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags
String[] tags = tagger.tag(tokens);
//Instantiating the POSSample class
POSSample sample = new POSSample(tokens, tags);
System.out.println(sample.toString());
//Probabilities for each tag of the last tagged sentence.
double [] probs = tagger.probs();
System.out.println(" ");
//Printing the probabilities
for(int i = 0; i<probs.length; i++)
System.out.println(probs[i]);
}
}
Biên dịch và thực thi tệp Java đã lưu từ Dấu nhắc lệnh bằng các lệnh sau:
javac TokenizerMEProbs.java
java TokenizerMEProbs
Khi thực thi, chương trình trên đọc văn bản thô đã cho, gắn thẻ các phần của bài phát biểu của mỗi mã thông báo trong đó và hiển thị chúng. Ngoài ra, nó cũng hiển thị xác suất cho từng phần của bài phát biểu trong câu đã cho, như hình dưới đây.
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB
0.6416834779738033
0.42983612874819177
0.8584513635863117
0.4394784478206072