Oop.docx

  • Uploaded by: Mai
  • 0
  • 0
  • April 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Oop.docx as PDF for free.

More details

  • Words: 2,206
  • Pages: 31
VIỆN ĐẠI HỌC MỞ HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN ----------------------

BÁO CÁO BÀI TẬP LỚN Môn: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Đề tài: Quản lý từ điển cho một số tiếng của dân tộc thiểu số và tiếng Việt

Giảng viên hướng dẫn:

Mai Thị Thúy Hà

Sinh viên thực hiện:

Trần Đức Lương-17A02

Hà Nội-2018

MỤC LỤC a.Quy tắc chung (sử dụng bộ gõ VnKey) ........................................................................... 3 a.1:Kiểu gõ VNI ................................................................................................................ 3 a.2:Kiểu gõ TELEX .......................................................................................................... 4 II.SƠ ĐỒ LỚP CỦA BÀI TOÁN............................................................................................ 6 A.Model ................................................................................................................................. 6 B.Controller .......................................................................................................................... 7 C.View ................................................................................................................................... 8 III.MÔ TẢ THUẬT TOÁN-THAO TÁC .............................................................................. 9 a.

Thêm từ ........................................................................................................................ 10

b.Tra nghĩa của từ .............................................................................................................. 11 c.Lưu File ............................................................................................................................ 12 d.Thoát ................................................................................................................................ 12 IV.CÀI ĐẶT BÀI TOÁN ....................................................................................................... 12 1.Model ................................................................................................................................ 12 a.Lớp Dictionary ............................................................................................................. 12 b.Lớp WordClass ............................................................................................................ 14 2.Controller ......................................................................................................................... 17 a.Lớp BST........................................................................................................................ 17 b.Lớp BSTNode .............................................................................................................. 20 c.Lớp DicLibrary ............................................................................................................ 22 3.View .................................................................................................................................. 25 a.Form DictionaryManager ........................................................................................... 25 b.Dialog AddTDT-TV .................................................................................................... 26 c.Dialog AddTV-TDT ..................................................................................................... 26 d.Dialog SearchTDT ....................................................................................................... 26 e.Dialog SearchTV .......................................................................................................... 27 V.KIỂM THỬ ĐÁNH GIÁ CHƯƠNG TRÌNH .................................................................. 27 VI.TỐI ƯU HÓA CHƯƠNG TRÌNH .................................................................................. 31

2

I.XÁC ĐỊNH BÀI TOÁN Việt Nam là một quốc gia có nhiều dân tộc cùng chung sống dưới một mái nhà.Mỗi dân tộc lại có một nét văn hóa ,tập tục ,ngôn ngữ riêng nên tạo ra không ít khó khăn trong quá trình giao lưu,trao đổi,buôn bán với các dân tộc khác và đặc biệt là trong việc giao tiếp hàng ngày.Nhiều dân tộc thiểu số lại không có hệ thống ngôn ngữ xác định,ít được nghiên cứu,chuẩn hóa ,khó tìm kiếm dữ liệu,…Điều đó đặt ra một yêu cầu phải xây dựng một ứng dụng giúp việc tra cứu, tìm hiểu ngôn ngữ của dân tộc khác trở nên dễ dàng hơn.Vì vậy ý tưởng ứng dụng từ điển tiếng dân tộc - tiếng Việt được xuất phát từ nhu cầu cấp thiết trên. Do nguồn cơ sở dữ liệu khan hiếm và phải mất nhiều thời gian,công sức để tìm kiếm ,thu thập cùng với việc không có phương ngôn,vùng âm chuẩn nên bắt buộc đầu vào cho từ điển phải do người dùng tự thêm và chỉnh sửa dựa trên những quy luật chuẩn hóa đã có từ chữ dân tộc sang chữ quốc ngữ cùng với bộ gõ phụ trợ:

a.Quy tắc chung (sử dụng bộ gõ VnKey) a.1:Kiểu gõ VNI 1-Sắc, 2-Huyền, 3-Hỏi, 4-Ngã, 5-Nặng, 6-Mũ, 7-Móc, 8-Trăng, 9-Đ.Ẃ B+9=Ẃ

C+8=Č

E+8=Ĕ

I + 8=Ĭ

N+4=Ñ

O+8=Ŏ

U+8=Ŭ

E+6+8=Ẅ

A+6+8 =Ẁ O+6+8=Ö

O+7+8=Ő U+7+8=Ů

3

Lưu ý: Khi gõ nguyên âm hay ký tự có dấu kết hợp với phím số ta sẽ được ký tự có dấu tương ứng với kiểu gõ VNI thông thường. Các ký tự đặc biệt của các Dân tộc cũng được quy ước giống như vậy cụ thể như sau: – Số 1 – 5 dùng cho các dấu chữ Việt (sắc, huyền, hỏi, ngã, nặng)- Số 4 (dấu ngã ~) vẫn sử dụng để bỏ dấu cho N (N + 4 = Ñ) – Số 6 (dấu mũ ^) bỏ cho các ký tự A,E – Số 8 (dấu trăng “È”) bỏ dấu cho các ký tự,A,C,I,E,O,U – Kết hợp 6+8 là các ký tự có dấu mũ (^) và dấu trăng – Số 9 (dấu chữ Ð) sử dụng cho chữ B (B + 9 = Ẃ a.2:Kiểu gõ TELEX Các dấu sẽ tương ứng với các chữ như sau: S-Sắc, F-Huyền, R-Hỏi, X-Ngã, J-Nặng, W.Z-Trăng.Các kí tự gõ đôi bao gồm A,B,E,O,D; B + B = Ẃ

C + W = Č

E + W = Ĕ

I + W = Ĭ

N + X = Ñ

O + Z = Ŏ

U + Z = Ŭ

E + E + W = Ẅ

A + A +W = Ẁ

O+W+W=Ő

U+W+W

O+O+W=Ö =Ů

Lưu ý: Chữ S,F,R,X,J tương ứng với các dấu (sắc, huyền, hỏi, ngã, nặng)Chữ X (dấu ngã ~) vẫn sử dụng để bỏ dấu cho N (N + X = Ñ)- Các ký tự gõ đôi (dấu mũ ^ và gạch trên) là: A, B, D, E, O- Chữ W (dấu trăng “È” và Ơ) bỏ dấu cho các ký tự,A,C,I,E,O,U- Riêng chữ Ŏ và Ŭ sử dụng phím khử dấu Z để gõ. – Kết hợp ký tự gõ đôi + W để gõ các ký tự có dấu mũ và dấu trăng. 4

b.Trường hợp đặc biệt Tuy nhiên, có những dân tộc phải dùng cách chuyển từ phát âm sang chữu cái tiếng Việt để có thể sử dụng được trong quá trình dịch.Ví dụ môt số âm tiếng Mường: Âm

Chữ cái

Ví dụ

p’

ph

phái(phải),phăl ổm(cứu người ốm)

t’

th

thiểng(tiếng),thuối(tuổi),thổl(tối)

c’

ch

chăng mắt(không biết)

z

d

du(dâu),dỗng(chơi),ngày dao(ngày mai)

ie

ia,iê

tia(con rệp),thiểng Moxl(tiếng Mường)

w

ư

từ(nhiều),chứ(nhớ)

Ngoài ra do chữu viết của các dân tộc khác nhau và khó để đồng nhất trên quy tắc nên trong quá trình chuyển đổi sang tiếng việt không thể tránh khỏi sai sót nên ít nhiều ảnh hưởng đến độc chính xác của từ điển.

5

II.SƠ ĐỒ LỚP CỦA BÀI TOÁN Các lớp trong bài toán được xây dựng theo mô hình MVC để tối ưu cũng như dễ dàng quản lý code.

A.Model

Phần Model gồm 3 lớp: Lớp Dictionary lưu trữ cấu trúc từ điển. Lớp WordClass lưu trữ từ và nghĩa của từ. Lớp DictionaryTest tạo thể hiện của đối tượng.

6

B.Controller

Phần Model gồm 3 lớp: Lớp BST để lưu trữ gốc(root) Lớp BSTNode để lưu trữ các node(Node) Lớp DicLibrary tạo các thao tác với từ điển

7

C.View

Phần View gồm 6 form: Form DictionaryManager:Giao diện chính của chương trình. Form addTDT:Thêm tiếng dân tộc vào từ điển. Form addVn:Thêm tiếng việt vào từ điển. Form SearchTDTDialog:Tạo hộp thoại Dialog để nhập tiếng dân tộc cần tra. Form SearchVnDialog:Tạo hộp thoại Dialog để nhập tiếng Việt cần tra.

8

III.MÔ TẢ THUẬT TOÁN-THAO TÁC Chương trình sử dụng cấu trúc dữ liệu Treemap-là một lớp triển khai của Map Interface trong Collection Framework.Do vậy nó có đặc điểm của Map:gồm một tập các cặp khóa-giá trị (key-value),trong đó giá trị các phần tử có thể giống nhau nhưng khóa thì không được giống nhau.Và một điểm đặc biệt ở TreeMap là các phần tử sẽ được sắp xếp theo thứ tự tăng dần của khóa(key) và không có bất kì khóa nào được mang giá trị null( tuy nhiên value có thể bằng null).

Từ điển sẽ được lưu trữ dưới dạng tương tự gồm từ-nghĩa(key-value). public TreeMap<String,WordClass> dic; Khởi tạo TreeMap với key là String và value là WordClass: public Dictionary(){ dic = new TreeMap<String,WordClass>(); }

9

a. Thêm từ Khi người dùng nhấn nút thêm từ mới(add) ,hộp thoại Dialog xuất hiện cho phép người dùng nhập từ và nghĩa của từ đó.Sau đó lưu vào TreeMap.

Dữ liệu từ hộp Dialog

Định dạng chữ thường

Chuyển về dạng key - value

Lưu vào TreeMap

10

b.Tra nghĩa của từ

Khi người dùng nhấn vào nút tra từ , hộp thoại Dialog xuất hiện để người dùng nhập từ cần tra->tìm kiếm trên TreeMap-> hiện nghĩa của từ cần tra. Dữ liệu từ hộpDialog

Tìm kiếm trên TreeMap

Định dạng từ hiển thị nghĩa

Hiển thị nghĩa từ cần tra

11

c.Lưu File Khi người dùng nhấn nút lưu thì dữ liệu được nhập ở nút “thêm từ”(add) sẽ được lưu vào File dưới định dạng key- value. d.Thoát Khi người dùng nhấn nút Exit thì thoát chương trình từ điển.

IV.CÀI ĐẶT BÀI TOÁN Code:

1.Model a.Lớp Dictionary

package MODEL; /** * * @author Luong */ import java.util.TreeMap; public class Dictionary { public TreeMap<String,WordClass> dic; // Tao TreeMap bao gom tu va public Dictionary() {

12

dic = new TreeMap<String,WordClass>(); } // Them tu moi vao tu dien public boolean addWord(WordClass word) { return dic.put(word.getWord().toLowerCase(),word) == null; } // Tra tu public WordClass lookup(String word) { return dic.get(word); } @Override public String toString() { String ret = ""; for(WordClass w:dic.values()) ret += w.toString()+"\n"; return ret; } 13

} b.Lớp WordClass package MODEL; /** * * @author Luong */ public class WordClass implements Comparable { private String word; private String mean; private String type; private String notes; public WordClass() { this("","","",""); } public WordClass(String word, String mean, String type, String notes) { this.word = word; this.mean = mean; this.type = type; this.notes = notes; 14

} public String getMean() { return mean; } public void setMean(String mean) { this.mean = mean; } public String getNotes() { return notes; } public void setNotes(String notes) { this.notes = notes; } public String getType() { return type; 15

} public void setType(String type) { this.type = type; } public String getWord() { return word; } public void setWord(String word) { this.word = word; } @Override public boolean equals(Object obj) { WordClass w = (WordClass)obj; return word.equalsIgnoreCase(w.getWord()); } @Override public String toString() { 16

return word + "; " + type + "; " + mean + "; " + notes; } @Override public int compareTo(Object o) { return this.word.compareToIgnoreCase(((WordClass)o).getWord()); }

2.Controller a.Lớp BST

package Controller;

import java.io.PrintWriter; import java.util.Optional;

/** * *@author Luong */ public class BST { protected BSTNode root = null; 17

void insert(String word, String trans) { BSTNode p, t; String e = word.toLowerCase(); for (p = null, t = root; t != null;) { p = t; String tt = t.key.toLowerCase(); if (e.compareTo(tt) < 0) { t = t.left; } else if (e.compareTo(tt) > 0) { t = t.righ; } else { // doubling t.list.add(trans); return; } } if (p == null) { root = new BSTNode(word, trans); } else if (word.compareTo(p.key) < 0) { p.left = new BSTNode(word, trans); 18

} else { p.righ = new BSTNode(word, trans); } }

public Optional search(String Tdt) { BSTNode p = root; while (p != null) { if (Tdt.compareTo(p.key) == 0) return Optional.ofNullable(p); p = (Tdt.compareTo(p.key) < 0) ? p.left : p.righ; } return Optional.empty(); } void Preoder(BSTNode p, final PrintWriter pw) { if (p != null) { pw.println(p.toString()); Preoder(p.left, pw); Preoder(p.righ, pw); } 19

} }

b.Lớp BSTNode

package Controller;

import java.util.LinkedList;

/** * * @author Luong */ class BSTNode { protected String key; LinkedList<String> list = new LinkedList<>(); BSTNode left; BSTNode righ;

20

public BSTNode(String key, String trans, BSTNode left, BSTNode righ) { this.key = key; list.add(trans); this.left = left; this.righ = righ; }

public BSTNode(String word, String trans) { this(word, trans, null, null); }

@Override public String toString() { String s = key + " : "; return list.stream() .map(t -> (list.indexOf(t) > 0 ? ", " : "") + t) .reduce(s, String::concat); } }

21

c.Lớp DicLibrary package Controller;

import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Arrays; import java.util.Optional;

/** * * @author Luong */ public class DicLibrary {

BST bstTdT = new BST(); BST bstVn = new BST(); private static final String BASE_TDT = "TdtVN.txt"; 22

private static final String BASE_VN = "VnTdt.txt";

public void insertLineTdtVn(String line) { int i = line.indexOf(":"); String word = line.substring(0, i).trim().toLowerCase(); String trans = line.substring(i + 1).trim(); String words[] = trans.split(", "); Arrays.stream(words).forEach(w -> bstTdT.insert(word, w)); }

public void insertLineVnTdt(String line) { int i = line.indexOf(":"); String word = line.substring(0, i).trim().toLowerCase(); String trans = line.substring(i + 1).trim(); String words[] = trans.split(", "); Arrays.stream(words).forEach(w -> bstVn.insert(word, w)); }

public void loadFile() throws IOException { // Load từ điển Tiếng dân tộc 23

Files.lines(Paths.get(BASE_TDT)) .forEach(line -> insertLineTdtVn(line)); //Load từ điển Tiếng Việt Files.lines(Paths.get(BASE_VN)) .forEach(line -> insertLineVnTdt(line)); }

public void insertTree(String lang, String left, String right) { BST tree = lang.equals("Tdt") ? bstTdT : bstVn; tree.insert(left, right); }

public void saveFile() throws IOException { //Chép qua file TDTVN.txt try(PrintWriter pwe = new PrintWriter(new FileWriter(BASE_TDT)); PrintWriter pwv = new PrintWriter(new FileWriter(BASE_VN))) { bstTdT.Preoder(bstTdT.root, pwe); bstVn.Preoder(bstVn.root, pwv); } } 24

public String search(String lang, String word) { BST tree = lang.equals("Tdt") ? bstTdT : bstVn; Optional node = tree.search(word); return node.isPresent() ? node.get().toString() : null; } }

3.View a.Form DictionaryManager

25

b.Dialog AddTDT-TV

c.Dialog AddTV-TDT

d.Dialog SearchTDT

26

e.Dialog SearchTV

V.KIỂM THỬ ĐÁNH GIÁ CHƯƠNG TRÌNH

27

28

29

Đánh giá chương trình: +Nhiều đoạn code vẫn còn khá rườm rà và chưa tối ưu được . +Chương trình chỉ dừng lại ở mức độ cơ bản chứ chưa có được hết các tiện ích,chức năng như ứng dụng từ điển khác. +Từ điển chưa có tính phân loại và chứ hiển thị được nhiều nội dung cụ thể về nghĩa của từ do hạn chế về mặt nhập liệu.

30

+Các đối tượng nhập chỉ dừng lại ở dạng văn bản chứ chưa thể dùng ở dạng khác như hình ảnh,âm thanh,… +Giao diện khá thô sơ,chưa toàn diện và bắt mắt.

VI.TỐI ƯU HÓA CHƯƠNG TRÌNH Cấu trúc dữ liệu dùng trong từ điển có thể thay thế bằng dạng Map khác như HashMap,HashTable để dễ dàng cài đặt hơn và tốc độ truy xuất,xử lí khi tra từ nhanh hơn. Ngoài ra,thay vì dùng File để lưu trữ thì có thể dùng các cơ sở dữ liệu (nếu có) :Sqlite,My SQL,…để dễ dàng quản lý,sắp xếp.

31

More Documents from "Mai"

Drugs
April 2020 41
Cognitive Disorders
April 2020 16
Unidad-ii-sociedades.doc
November 2019 21
With Anxiety
April 2020 22
Oop.docx
April 2020 13