Cấu trúc dữ liệu

Một phần của tài liệu Tài liệu Luận văn tốt nghiệp "Xử lý các văn bản tiếng Việt" ppt (Trang 50 - 52)

Từđiển là một danh sách tuyến tính các mục từ trong từđiển. Mỗi mục từ là một

đối tượng của lớp Lexicon. Lớp Lexicon gồm hai thành phần dữ liệu: biến kiểu xâu ký tựword chứa nội dung của mục từ và một vector partOfSpeech biểu diễn các từ

loại tương ứng với từđó. Các phương thức thao tác trên hai thành phần dữ liệu này là:

¾ boolean isPos(String c) kiểm tra xem từ này có kiểu từ loại là c hay không

¾ String getWord() lấy ra nội dung của từ

¾ Vector getPos() lấy ra vector các từ loại của từ

Lớp Lexicon có dạng như sau:

class Lexicon { String word;

Vector partOfSpeech;

Lexicon(String w, Vector pos) {}

boolean isPOS(String c) {} public String getWord() {} public Vector getPOS() {} public String toString() {} }

Để tăng tốc độ tính toán trong quá trình phân tích, ta biểu diễn mỗi kiểu từ loại bởi một ký tự. Để thực hiện điều này, ta dùng một bảng băm (hashtable) chứa các cặp khoá-trị thể hiện các cặp kiểu từ loại -- mã ký tự tương ứng. Trong chương trình phân tích cú pháp tiếng Anh, ta dùng bảng băm sau:

Hashtable ht = new Hashtable();

String keys[] = {"S", "N", "V", "a","n", "v", "i", "j", "P", "p", "x", "o", "u"

};

String values[] = {"S", "NP", "VP", "ART", "NOUN", "VERB", "NAME", "ADJ", "PP", "PREP", "AUX", "PRONOUN", "NUMBER"

};

for (int i = 0; i < keys.length; i++) ht.put(keys[i], values[i]);

Bảng băm này cũng tiện dụng khi biểu diễn các nút của cây chứa kết quả phân tích.

Để biểu diễn các nút của cây phân tích, ta sử dụng lớp ParsingTreeNode. Lớp này gồm hai thành phần dữ liệu value chứa tên từ loại và key chứa mã của từ loại này. Lớp ParsingTreeNode có dạng như sau:

private String key;

public ParsingTreeNode() {}

public ParsingTreeNode(String k, String v) {} public String getKey() {}

public String toString() {} }

Với bảng băm nêu trên, ta có văn phạm đơn giản của tiếng Anh gồm 11 quy tắc như sau:

STT Dạng đầy đủ Dạng biểu diễn

1. S → NP VP S → NV 2. NP → ART NOUN N → an 3. NP → ART ADJ NOUN N → ajn

4. NP → NAME N → i 5. NP → PRONOUN N → o 6. PP → PREP NP P → pN 7. VP → VERB V → v 8. VP → AUX V NP V → xvN 9. VP → VERB NP V → vN 10. VP → VERB NP PP V → vNP 11. VP → VERB PP V → vP Bảng 6. Tập luật của văn phạm tiếng Anh

Để lưu các vế trái và vế phải của các quy tắc sinh trong văn phạm, ta sử dụng hai mảng một chiều left, right:

int MAX_RULES = 50; // số quy tắc cực đại String left[] = new String[MAX_RULES]; String right[] = new String[MAX_RULES];

Các từ của câu cần phân tích được chứa trong mảng tokens. Với tiếng Anh, ta chỉ

cần dựa vào các ký tự trắng trong câu để cắt ra các từ.

String tokens[];

Để chứa các trạng thái phân tích được sao lưu và vị trí hiện tại đang xét trong câu cần phân tích, ta dùng các ngăn xếp

Stack backupStates = new Stack(); Stack positions = new Stack();

Một phần của tài liệu Tài liệu Luận văn tốt nghiệp "Xử lý các văn bản tiếng Việt" ppt (Trang 50 - 52)