4.1.3.Tổ chức lưu trữ dữ liệu
4.2.3.4. Gói Analysis
4.2.3.4.1. Lớp CYKBeamSearch
Đây là lớp thực hiện phân tích cú pháp bằng giải thuật CYK kết hợp cắt tỉa beam search.
Bảng 4-15. Bảng mô tả của lớp CYKBeamSeach
Phạm vi: private
Kiểu: String
Tên: sentence Câu đầu vào.
Phạm vi: private
Kiểu: float
Tên: fRatio
Tỉ lệ loại bỏ trong cắt tỉa beam search.
Thuộc tính
Kiểu: RuleSet
Tên: ruleS Tập luật cú pháp.
Phạm vi: private
Kiểu: DefaultMutableTreeNode
Tên: rootNode
Là biến sẽ nhận kết quả trả về từ bộ phân tích cú pháp với giá trị là nút gốc của cây phân tích cú pháp. Phạm vi: private
Kiểu: ArrayList<String>
Tên: specialWord
Mảng lưu các từ đặc biệt, bao gồm danh từ riêng và số từ.
Phạm vi: private
Kiểu: ArrayList<Integer>
Tên: specialIndex
Mảng lưu vị trí các dấu câu, để sử dụng trong việc thêm nhãn
Phạm vi: private
Kiểu: ArrayList<String>
Tên: arlTree
Mảng lưu xâu đọc được từ cây cú pháp.
Phạm vi: private
Kiểu: ArrayList<Word>
Tên: arlWord Mảng lưu trữ các từ trong câu
Phạm vi: private Kiểu: ArrayList<Integer> Tên: arlSize Mảng lưu kích thước các hàng trong bảng CYK Phạm vi: private Kiểu: ArrayList<Cell> Tên: table
Danh sách các ô trong phân tích CYK. Phương thức Phạm vi: public Kiểu: void Tên+tham số: CYK(float step)
Thực hiện phân tích CYK với ngưỡng step.
Phạm vi: public
Kiểu: void
Tên+tham số: run()
Là hàm chính thực hiện công việc phân tích câu đầu vào.
Pham vi: public
Kiểu: void
Tên+tham số:
buildTree()
Dựng cây phân tích từ bảng CYK Phạm vi: public
Kiểu: void
Tên+tham số: joinCell
(int iPos1, int iPos2, Bounds bound1, Bounds bound2 )
Thực hiện việc kết hợp hai ô ở vị trí iPos1 và iPos2 trong bảng CYK.
4.2.3.4.2. Lớp AStar
Đây là lớp thực hiện phân tích cú pháp bằng thuật toán A* có sử dụng thuật toán lelightwin cơ bản.
Bảng 4-16. Bảng mô tả của lớp AStar
Thuộc tính
Kiểu: RuleSet
Tên: ruleS Tập luật cú pháp.
Phạm vi: private
Kiểu: ArrayList<Word>
Tên: arlWord Mảng lưu trữ các từ trong câu. Phạm vi: private
Kiểu: ArrayList<Integer>
Tên: specialIndex
Biến lưu vị trí các dấu câu, để dùng cho việc thêm nhãn cụm từ. Phạm vi: private Kiểu: HashMap<String, AStarElement> Tên: chart Tập CHART được sử dụng trong thuật toán A*.
Phạm vi: private
Kiểu: ArrayList<AStarElement>
Tên: agenda
Tập AGENDA được sử dụng trong thuật toán A*. Phạm vi: private
Kiểu: DefaultMutableTreeNode
Tên: node
Giống như trường hợp của CYK, đây là biến lưu giữ kết quả sau khi phân tích.
Phươn g thức
Phạm vi: public
Kiểu: void
Tên+tham số: run()
Đây là hàm chính trong class thực hiện phân tích AStar. Phạm vi: public
Kiểu: ArrayList<AStarElement>
Tên+tham số:
getCombinedElements(AStarElement e)
Hàm trả về tập phần tử được tạo ra bởi sự kết hợp của phần tử e với các phần tử trong CHART. Phạm vi: public Kiểu: float Tên+tham số: calculateOutside(AStarElement cand)
Thực hiện tính outside cho phần tử cand.
Phạm vi: public
Kiểu: AStarElement
Tên+tham số: candidate()
Trả về phần tử ứng cử viên có ước lượng cao nhất. Phạm vi: public
Kiểu: DefaultMutableTreeNode
Tên+tham số:
getNode(AStarElement a)
Trả về nhánh cây mà a làm nút gốc trong cây phân tích cú pháp đầu ra. Phạm vi: public Kiểu: DefaultMutableTreeNode Tên+tham số: getNode() Trả về biến node. Phạm vi: public Kiểu: String Tên+tham số: key(AstarElement e) Trả về khóa của phần tử e trong AGENDA. 4.2.3.4.3. Lớp LeLightWin
Đây là lớp thực hiện giải thuật lelightwin cơ bản, thực hiện công việc xử lí và trả về một tập các chuỗi kết hợp của phần tử ứng cử viên với các phần tử trong CHART.
Bảng 4-17. Bảng mô tả của lớp LeLightWin
Thuộc tính Phạm vi: private Kiểu: ArrayList<ArrayList<AStarElement>> Tên: chain
Biến để lưu kết quả của thuật toán là các chuỗi kết hợp.
Phạm vi: private
Kiểu:
ArrayList<ArrayList<AStarElement>>
Tên: leftChain
Dãy kết hợp trái của phần tử ứng cử viên Phạm vi: private
Kiểu:
ArrayList<ArrayList<AStarElement>>
Tên: rightChain
Dãy kết hợp phải của phần tử ứng cử viên Phạm vi: private Kiểu: HashMap<String, ArrayList<AStarElement>> Tên: left Tập phần tử nằm bên trái ứng cử viên sau khi đã được phân loại Phạm vi: private
Kiểu:
HashMap<String, ArrayList<AStarElement>>
Tên: right
Tập phần tử nằm bên phải ứng cử viên sau khi đã được phân loại
Phươn g thức Phạm vi: public Kiểu: void Tên+tham số: leftProcess(AStarElement elem) Hàm làm nhiệm vụ sinh ra leftChain của ứng cử viên bắt đầu tại vị trí phần tử elem Phạm vi: public Kiểu: void Tên+tham số: rightProcess(AStarElement elem) Hàm làm nhiệm vụ sinh ra rightChain của ứng cử viên bắt đầu tại vị trí phần tử elem Phạm vi: public Kiểu: void Tên+tham số: classify(AStarElement e, HashMap<String, AStarElement> ea) Hàm làm nhiệm vụ phân loại các phần tử trong CHART và lưu vào hai tập left và right. Phạm vi: public Kiểu: void Tên+tham số: generateSubChain(AStarElement e) Hàm làm nhiệm vụ tạo ra các chuỗi con kết hợp của phần tử ứng cử viên từ hai tập left và right Phạm vi: public Kiểu: ArrayList<ArrayList<AStarElement>> Hàm cuối cùng, là hàm chính trong class, làm nhiệm vụ
Tên+tham số:
getLLWChain(AStarElement e,
HashMap<String, AStarElement> chart)
quan trọng nhất: sinh ra tất cả các chuỗi kết hợp của ứng cử viên e và lưu vào chain.
4.2.3.4.4. Lớp Sentence
Đây có thể coi là lớp chính của gói phân tích câu analysis. Lớp này sẽ đảm nhận nhiệm vụ lưu trữ thông tin về một câu văn bản đầu vào, cung cấp các phương thức để phân tích cú pháp cho câu đó dựa vào tất cả các lớp ở trên.
Bảng 4-18. Bảng mô tả của lớp Sentence
Thuộc tính
Phạm vi: private
Kiểu: String
Tên: sentence
Biến lưu câu văn bản đầu vào Phạm vi: private
Kiểu: ArrayList<String>
Tên: specialWord
biến lưu các từ đặc biệt: danh từ riêng và số từ
Phạm vi: private
Kiểu: ArrayList<Integer>
Tên: specialIndex
biến lưu vị trí các dấu câu, để sử dụng trong việc thêm nhãn cụm từ Phạm vi: private
Kiểu: ArrayList<Word>
Tên: arlWord
mảng lưu trữ các từ trong câu
Phươn g thức Phạm vi: public Kiểu: void Tên+tham số: splitWord() Đảm nhận nhiệm vụ tách từ cho câu đầu vào. Kết quả trả ra file “text.txt”.
Phạm vi: public
Kiểu: void
Tên+tham số: callQTag()
Đọc dữ liệu từ file “text.txt” và thực hiện gán nhãn từ loại. Kết quả lưu trong file
“wordTagged.txt” Phạm vi: public
Kiểu: void
Tên+tham số: readWordFromFile() Đọc dữ liệu từ file “wordTagged.txt” Phạm vi: public
Kiểu: void
Tên+tham số: CYKParser()
Thực hiện phân tích CYK cho câu đầu vào, có sử dụng kết hợp beam search.
Phạm vi: public
Kiểu: void
Tên+tham số: astarParser()
Thực hiện phân tích A* cho câu đầu vào, có sử dụng kết hợp thuật toán lelighwin cơ bản.
Phạm vi: public
Kiểu: DefaultMutableTreeNode
Tên+tham số: getAStarNode Trả về kết quả phân tích của AStar
Phạm vi: public
Kiểu: DefaultMutableTreeNode