Muốn thực hiện tách từ tiếng Việt chúng tôi cần 3 file: lớp thực thi chú giải, bộ miêu tả XML, lớp định nghĩa đầu ra cho chú giải. Chúng tôi sử dụng công cụ tách từ tiếng Việt [2] và tích hợp để nó chạy trên UIMA.
Trước hết chúng tôi xây dựng lớp thực thi chú giải. Lớp này có nhiệm vụ đọc kết quả lấy được từ hàm tachtu() trong công cụ tách từ tiếng Việt và tạo một vector để lấy giá trị của từ (Word) trong file kết quả và đưa nó vào các đặc trưng của chú giải Token_VN và Token_Splits. Chúng tôi chỉ trích một đoạn code trong lớp chú giải.
Tachtu tachtu = new Tachtu();
Vector v = tachtu.execute("C:/apache-uima/examples", docText); for (int i = 0; i < v.size(); i++){
Vector vector = (Vector) v.get(i);
if (vector.get(0).toString().equalsIgnoreCase("Word")){
Token_VN token = new Token_VN(aJCas);
token.setBegin(vector.get(1).hashCode()); token.setEnd(vector.get(2).hashCode()); token.setPosTag(vector.get(3).toString()); token.setComponentId("Vietname token"); } if (vector.get(0).toString().equalsIgnoreCase("Split")){
Token_Splits token = new Token_Splits(aJCas);
token.setBegin(vector.get(1).hashCode());
31
token.setPosTag(vector.get(3).toString());
token.setComponentId("Vietname split");
token.addToIndexes();
}
Các đặc trưng của chú giải Token_VN bao gồm begin, end thể hiện vị trí các ký tự xác định chú giải trong tài liệu, posTag là nhãn của từ loại và ComponentId thể hiện chú giải này thuộc loại “VietNam token”. Các đặc trưng của Token_Splits cũng bao gồm begin, end thể hiện vị trí chú giải trong tài liệu, posTag và componentId.
Sau đó chúng tôi xây dựng bộ miêu tả cho máy phân tích. Cấu trúc của bộ miêu tả máy phân tích chi tiết như sau:
<?xml version="1.0" encoding="UTF-8"?> <analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier"> <frameworkImplementation>org.apache.uima.java</frameworkImplementation> <primitive>true</primitive> <annotatorImplementationName>Vietnamese.testToken </annotatorImplementationName> <analysisEngineMetaData> <name>Token, Splits</name>
<description> Token lay ra tu lop tachtu() </description> <configurationParameters/> <configurationParameterSettings/> <typeSystemDescription> <imports> <import name="descriptor.VNExampleTypes"/> </imports> </typeSystemDescription> <capabilities> <capability> <inputs/> <outputs> <type>Types.Token_VN</type> <type>Types.Token_Splits</type> </outputs>
32 <languagesSupported/> </capability> </capabilities> </analysisEngineMetaData> <resourceManagerConfiguration/> </analysisEngineDescription>
Cấu trúc của file XML này bao gồm lớp chú giải là lớp testToken trong gói Vietnamese. Hệ thống kiểu mà máy phân tích này làm việc với được lưu trong file VNExampleTypes. Nhận dạng các từ trong văn bản và các dấu ngắt là các bước đầu tiên trong hệ thống do vậy nó không cần các yêu cầu về đầu vào, các yêu cầu về đầu ra là các kiểu được định nghĩa trong lớp định nghĩa về Token_VN và Token_Splits.
Lớp định nghĩa chú giải Token_VN, Token_Splits cho thấy nó được kế thừa từ lớp Annotation. Lớp Annotation là lớp có sẵn của UIMA. Nó định nghĩa một chú giải (annotator) có những đặc trưng cơ bản là begin và end. Chúng tôi chỉ trích một phần trong lớp Token_VN và Token_Splits.
public class Token_VN extends Annotation { public Token_VN(JCas jcas, int begin, int end) { super(jcas);
setBegin(begin); setEnd(end);} }
public class Token_Splits extends Annotation { public Token_Splits(JCas jcas, int begin, int end) { super(jcas); setBegin(begin); setEnd(end); readObject(); } }
33
Chúng tôi xây dựng thêm 2 đặc trưng cho chú giải này đó là posTag và componentId.
Kết quả chạy máy phân tích cho chú giải tách từ như sau:
Hình 3.6 - Kết quả chạy tách từ tiếng Việt
Kết quả trong hình 3.6 cho thấy chương trình đã tách được các từ trong một câu thành các từ riêng biệt, mỗi từ cách nhau bằng một dấu cách và các dấu ngắt. Mỗi từ, dâu ngắt có những đặc trưng begin, end, posTag và componentId. Nó cũng nhận dạng chính xác các từ trên tiếng Việt bao gồm từ ghép, từ viết tắt, tên địa phương cũng như một số nhập nhằng trong xử lý tiếng Việt.
Trong quá trình tách từ tiếng Việt thì nhiệm vụ cần thiết là việc gán nhãn cho mỗi loại từ vựng được tìm ra trong tài liệu, nó giúp ích không nhỏ cho người dùng các ứng dụng này. Thông qua việc gán nhãn người dùng có thể nhanh chóng tìm ra các thông tin có liên quan đến cùng loại từ.
Do vậy trong khi thực hiện tách từ các ứng dụng đã được thêm phần gán nhãn cho mỗi loại từ vựng (hình 3.7). Các dấu ngắt được sử dụng thì posTag chính là các dấu ngắt (hình 3.7).
34
Hình 3.7 - Gán nhãn từ, dấu ngắt