OpenNLP - Mã hóa
Quá trình cắt câu đã cho thành các phần nhỏ hơn (mã thông báo) được gọi là tokenization. Nói chung, văn bản thô nhất định được mã hóa dựa trên một tập hợp các dấu phân cách (chủ yếu là khoảng trắng).
Tokenization được sử dụng trong các tác vụ như kiểm tra chính tả, xử lý tìm kiếm, xác định các phần của giọng nói, phát hiện câu, phân loại tài liệu của tài liệu, v.v.
Mã hóa bằng OpenNLP
Các opennlp.tools.tokenize gói chứa các lớp và giao diện được sử dụng để thực hiện mã hóa.
Để mã hóa các câu đã cho thành các đoạn đơn giản hơn, thư viện OpenNLP cung cấp ba lớp khác nhau:
SimpleTokenizer - Lớp này mã hóa văn bản thô đã cho bằng cách sử dụng các lớp ký tự.
WhitespaceTokenizer - Lớp này sử dụng khoảng trắng để mã hóa văn bản đã cho.
TokenizerME- Lớp này chuyển đổi văn bản thô thành các mã thông báo riêng biệt. Nó sử dụng Maximum Entropy để đưa ra quyết định của mình.
SimpleTokenizer
Để mã hóa một câu bằng cách sử dụng SimpleTokenizer lớp học, bạn cần phải -
Tạo một đối tượng của lớp tương ứng.
Mã hóa câu bằng cách sử dụng tokenize() phương pháp.
In mã thông báo.
Sau đây là các bước cần thực hiện để viết một chương trình mã hóa văn bản thô đã cho.
Step 1 - Khởi tạo lớp tương ứng
Trong cả hai lớp, không có hàm tạo nào có sẵn để khởi tạo chúng. Do đó, chúng ta cần tạo các đối tượng của các lớp này bằng cách sử dụng biến tĩnhINSTANCE.
SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;
Step 2 - Mã hóa các câu
Cả hai lớp này đều chứa một phương thức được gọi là tokenize(). Phương thức này chấp nhận một văn bản thô ở định dạng Chuỗi. Khi gọi, nó mã hóa Chuỗi đã cho và trả về một mảng Chuỗi (mã thông báo).
Mã hóa câu bằng cách sử dụng tokenizer() như hình dưới đây.
//Tokenizing the given sentence
String tokens[] = tokenizer.tokenize(sentence);
Step 3 - In mã thông báo
Sau khi mã hóa câu, bạn có thể in mã thông báo bằng cách sử dụng for loop, như hình dưới đây.
//Printing the tokens
for(String token : tokens)
System.out.println(token);
Example
Sau đây là chương trình mã hóa câu đã cho bằng cách sử dụng lớp SimpleTokenizer. Lưu chương trình này trong một tệp có tênSimpleTokenizerExample.java.
import opennlp.tools.tokenize.SimpleTokenizer;
public class SimpleTokenizerExample {
public static void main(String args[]){
String sentence = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Instantiating SimpleTokenizer class
SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE;
//Tokenizing the given sentence
String tokens[] = simpleTokenizer.tokenize(sentence);
//Printing the tokens
for(String token : tokens) {
System.out.println(token);
}
}
}
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 SimpleTokenizerExample.java
java SimpleTokenizerExample
Khi thực thi, chương trình trên đọc Chuỗi đã cho (văn bản thô), mã hóa nó và hiển thị đầu ra sau:
Hi
.
How
are
you
?
Welcome
to
Tutorialspoint
.
We
provide
free
tutorials
on
various
technologies
WhitespaceTokenizer
Để mã hóa một câu bằng cách sử dụng WhitespaceTokenizer lớp học, bạn cần phải -
Tạo một đối tượng của lớp tương ứng.
Mã hóa câu bằng cách sử dụng tokenize() phương pháp.
In mã thông báo.
Sau đây là các bước cần thực hiện để viết một chương trình mã hóa văn bản thô đã cho.
Step 1 - Khởi tạo lớp tương ứng
Trong cả hai lớp, không có hàm tạo nào có sẵn để khởi tạo chúng. Do đó, chúng ta cần tạo các đối tượng của các lớp này bằng cách sử dụng biến tĩnhINSTANCE.
WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE;
Step 2 - Mã hóa các câu
Cả hai lớp này đều chứa một phương thức được gọi là tokenize(). Phương thức này chấp nhận một văn bản thô ở định dạng Chuỗi. Khi gọi, nó mã hóa Chuỗi đã cho và trả về một mảng Chuỗi (mã thông báo).
Mã hóa câu bằng cách sử dụng tokenizer() như hình dưới đây.
//Tokenizing the given sentence
String tokens[] = tokenizer.tokenize(sentence);
Step 3 - In mã thông báo
Sau khi mã hóa câu, bạn có thể in mã thông báo bằng cách sử dụng for loop, như hình dưới đây.
//Printing the tokens
for(String token : tokens)
System.out.println(token);
Example
Sau đây là chương trình mã hóa câu đã cho bằng cách sử dụng WhitespaceTokenizerlớp học. Lưu chương trình này trong một tệp có tênWhitespaceTokenizerExample.java.
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class WhitespaceTokenizerExample {
public static void main(String args[]){
String sentence = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Instantiating whitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE;
//Tokenizing the given paragraph
String tokens[] = whitespaceTokenizer.tokenize(sentence);
//Printing the tokens
for(String token : tokens)
System.out.println(token);
}
}
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 WhitespaceTokenizerExample.java
java WhitespaceTokenizerExample
Khi thực thi, chương trình trên đọc Chuỗi đã cho (văn bản thô), mã hóa nó và hiển thị kết quả sau.
Hi.
How
are
you?
Welcome
to
Tutorialspoint.
We
provide
free
tutorials
on
various
technologies
Lớp TokenizerME
OpenNLP cũng sử dụng một mô hình được xác định trước, một tệp có tên de-token.bin, để mã hóa các câu. Nó được đào tạo để mã hóa các câu trong một văn bản thô nhất định.
Các TokenizerME lớp của opennlp.tools.tokenizergói được sử dụng để tải mô hình này và mã hó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-token.bin mô hình sử dụng TokenizerModel lớp học.
Khởi tạo TokenizerME lớp học.
Mã hóa các câu bằng cách sử dụng tokenize() phương thức của lớp này.
Sau đây là các bước cần thực hiện để viết một chương trình mã hóa các câu từ văn bản thô đã cho bằng cách sử dụng TokenizerME lớp học.
Step 1 - Đang tải mô hình
Mô hình mã hóa được đại diện bởi lớp có tên TokenizerModel, thuộc về gói opennlp.tools.tokenize.
Để 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 TokenizerModel 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 the Tokenizer model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStream);
Step 2 - Khởi tạo lớp TokenizerME
Các TokenizerME lớp của gói opennlp.tools.tokenizechứa các phương thức để cắt văn bản thô thành các phần nhỏ hơn (mã thông báo). 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ư hình dưới đây.
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
Step 3 - Mã hóa câu
Các tokenize() phương pháp của TokenizerMElớ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).
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, như sau.
//Tokenizing the given raw text
String tokens[] = tokenizer.tokenize(paragraph);
Example
Sau đây là chương trình mã hóa văn bản thô đã cho. Lưu chương trình này trong một tệp có tênTokenizerMEExample.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
public class TokenizerMEExample {
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 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);
//Tokenizing the given raw text
String tokens[] = tokenizer.tokenize(sentence);
//Printing the tokens
for (String a : tokens)
System.out.println(a);
}
}
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 TokenizerMEExample.java
java TokenizerMEExample
Khi thực thi, chương trình trên đọc Chuỗi đã cho và phát hiện các câu trong đó và hiển thị kết quả sau:
Hi
.
How
are
you
?
Welcome
to
Tutorialspoint
.
We
provide
free
tutorials
on
various
technologie
Lấy vị trí của các mã thông báo
Chúng tôi cũng có thể nhận được các vị trí hoặc spans của các mã thông báo bằng cách sử dụng tokenizePos()phương pháp. Đây là phương thức của giao diện Tokenizer của góiopennlp.tools.tokenize. Vì tất cả (ba) lớp Tokenizer đều triển khai giao diện này, bạn có thể tìm thấy phương thức này trong tất cả chúng.
Phương thức này chấp nhận câu hoặc văn bản thô ở dạng một chuỗi và trả về một mảng đối tượng kiểu Span.
Bạn có thể nhận vị trí của các mã thông báo bằng cách sử dụng tokenizePos() phương pháp, như sau:
//Retrieving the tokens
tokenizer.tokenizePos(sentence);
In các vị trí (nhịp)
Lớp có tên Span sau đó opennlp.tools.util gói được sử dụng để lưu trữ số nguyên bắt đầu và kết thúc của bộ.
Bạn có thể lưu trữ các nhịp được trả về bởi tokenizePos() trong mảng Span và in chúng, như được hiển thị trong khối mã sau.
//Retrieving the tokens
Span[] tokens = tokenizer.tokenizePos(sentence);
//Printing the spans of tokens
for( Span token : tokens)
System.out.println(token);
In mã thông báo và vị trí của chúng cùng nhau
Các substring() phương thức của lớp String chấp nhận begin và endbù trừ và trả về chuỗi tương ứng. Chúng ta có thể sử dụng phương pháp này để in các mã thông báo và khoảng cách (vị trí) của chúng với nhau, như được hiển thị trong khối mã sau.
//Printing the spans of tokens
for(Span token : tokens)
System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));
Example(SimpleTokenizer)
Sau đây là chương trình lấy các khoảng mã thông báo của văn bản thô bằng cách sử dụng SimpleTokenizerlớp học. Nó cũng in các mã thông báo cùng với vị trí của chúng. Lưu chương trình này trong một tệp có tênSimpleTokenizerSpans.java.
import opennlp.tools.tokenize.SimpleTokenizer;
import opennlp.tools.util.Span;
public class SimpleTokenizerSpans {
public static void main(String args[]){
String sent = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Instantiating SimpleTokenizer class
SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE;
//Retrieving the boundaries of the tokens
Span[] tokens = simpleTokenizer.tokenizePos(sent);
//Printing the spans of tokens
for( Span token : tokens)
System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));
}
}
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 SimpleTokenizerSpans.java
java SimpleTokenizerSpans
Khi thực thi, chương trình trên đọc Chuỗi đã cho (văn bản thô), mã hóa nó và hiển thị đầu ra sau:
[0..2) Hi
[2..3) .
[4..7) How
[8..11) are
[12..15) you
[15..16) ?
[17..24) Welcome
[25..27) to
[28..42) Tutorialspoint
[42..43) .
[44..46) We
[47..54) provide
[55..59) free
[60..69) tutorials
[70..72) on
[73..80) various
[81..93) technologies
Example (WhitespaceTokenizer)
Sau đây là chương trình lấy các khoảng mã thông báo của văn bản thô bằng cách sử dụng WhitespaceTokenizerlớp học. Nó cũng in các mã thông báo cùng với vị trí của chúng. Lưu chương trình này trong một tệp có tênWhitespaceTokenizerSpans.java.
import opennlp.tools.tokenize.WhitespaceTokenizer;
import opennlp.tools.util.Span;
public class WhitespaceTokenizerSpans {
public static void main(String args[]){
String sent = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Instantiating SimpleTokenizer class
WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE;
//Retrieving the tokens
Span[] tokens = whitespaceTokenizer.tokenizePos(sent);
//Printing the spans of tokens
for( Span token : tokens)
System.out.println(token +"
"+sent.substring(token.getStart(), token.getEnd()));
}
}
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 WhitespaceTokenizerSpans.java
java WhitespaceTokenizerSpans
Khi thực thi, chương trình trên đọc Chuỗi đã cho (văn bản thô), mã hóa nó và hiển thị kết quả sau.
[0..3) Hi.
[4..7) How
[8..11) are
[12..16) you?
[17..24) Welcome
[25..27) to
[28..43) Tutorialspoint.
[44..46) We
[47..54) provide
[55..59) free
[60..69) tutorials
[70..72) on
[73..80) various
[81..93) technologies
Example (TokenizerME)
Sau đây là chương trình lấy các khoảng mã thông báo của văn bản thô bằng cách sử dụng TokenizerMElớp học. Nó cũng in các mã thông báo cùng với vị trí của chúng. Lưu chương trình này trong một tệp có tênTokenizerMESpans.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 TokenizerMESpans {
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);
//Printing the spans of tokens
for(Span token : tokens)
System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));
}
}
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 TokenizerMESpans.java
java TokenizerMESpans
Khi thực thi, chương trình trên đọc Chuỗi đã cho (văn bản thô), mã hóa nó và hiển thị đầu ra sau:
[0..5) Hello
[6..10) John
[11..14) how
[15..18) are
[19..22) you
[23..30) welcome
[31..33) to
[34..48) Tutorialspoint
Xác suất Tokenizer
Phương thức getTokenProbabilities () của lớp TokenizerME được sử dụng để lấy các xác suất liên quan đến các cuộc gọi gần đây nhất đến phương thức tokenizePos ().
//Getting the probabilities of the recent calls to tokenizePos() method
double[] probs = detector.getSentenceProbabilities();
Sau đây là chương trình để in các xác suất liên quan đến các lệnh gọi đến phương thức tokenizePos (). Lưu chương trình này trong một tệp có tênTokenizerMEProbs.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]);
}
}
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 Chuỗi đã cho và mã hóa các câu và in ra. Ngoài ra, nó cũng trả về các xác suất được liên kết với các cuộc gọi gần đây nhất đến phương thức tokenizerPos ().
[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