Chuẩn nén Dictzip# được chúng em đề nghị để giải quyết khó khăn khi áp dụng Dictzip cho dữ liệu trên điện thoại di động. Chuẩn nén Dictzip# có cách thức nén và cấu trúc lưu trữ như sau.
5.2.5.1 Cách thức nén
Tùy chọn bộ thư viện nén và giải nén. Trong chương trình ứng dụng của mình, chúng em sử dụng bộ thư viện mã nguồn mở zlib version 1.1.4.
5.2.5.2 Cấu trúc lưu trữ
Hình 5.2 Ý tưởng cấu trúc lưu trữ chuẩn Dictzip#
Ý tưởng cơ bản của cấu trúc lưu trữ này là dữ liệu gốc được chia thành từng khối có kích thước tối đa là 64 KB để nén. Kích thước của khối cuối cùng có thể không bằng với kích thước của các khối trước. Dictzip# nén các khối dữ liệu đã biết trước kích thước l (l tối đa là 64KB) thành các khối nén có kích thước bli (kích thước các khối nén của chuẩn Dictzip# không biết trước được, kích thước các khối nén của chuẩn Dictzip là một số cốđịnh tối đa 64KB, đây chính là điểm khác nhau cơ bản giữa Dictzip# và Dictzip). Kích thước sau nén của từng khối dữ liệu sẽđược lưu vào thông tin đầu tập tin nén. Khi cần truy cập ngẫu nhiên ta dựa vào vị trí, kích thước cần đọc và thông tin đầu tập tin nén mà lấy ra các khối nén tương ứng và giải nén chúng.
5.2.5.3 So sánh tỉ lệ nén giữa Dictzip và Dictzip#
So sánh kích thước tập tin dữ liệu đã nén của 3 loại từ điển thông dụng: Anh – Việt (68998 từ), Việt – Anh (91146 từ) và Anh – Anh (121962 từ).
Các tập tin dữ liệu nén chuẩn DictZip lấy từ khóa luận “Xây dựng ứng dụng từ điện trên Pocket PC” của Nguyễn Thiện Chương và Phạm Tuấn Sơn (Th.S Nguyễn Tấn Trần Minh Khang và Th.S Trần Minh Triết hướng dẫn).
Mỗi bộ dữ liệu DictZip gồm 3 tập tin (1 tập tin nghĩa, 2 tập tin chỉ mục) trong đó 2 tập tin chỉ mục chưa được nén. Để tiện so sánh, chúng em đã nén 2 tập tin chỉ mục này theo chuẩn DictZip rồi cộng kích thước của cả 3 tập tin lại. Tỉ lệ % là tỉ lệ kích thước tập tin nén so với tập tin gốc.
Từđiển Kích thước chưa
nén (KB) Kích thDiztZip (KB) ước tập tin Kích thDiztZip# (KB) ước tập tin
Anh – Việt 11505 3994 (34.7%) 4363 (37.9%)
Việt – Anh 5238 1827 (34.9%) 1993 (38.0%)
Anh – Anh 22180 7486 (33.7%) 8121 (36.6%)
Bảng 5.4 So sánh tỉ lệ nén giữa DictZip và Dictzip#
Như vậy có thể thấy chuẩn nén DictZip và DictZip# không có nhiều sự khác biệt về tỉ lệ nén.
5.2.5.4 So sánh các khối nén trong chuẩn Dictzip#
5.2.5.4.1 Kích thước tập tin sau khi nén
Từđiển 8 KB 16 KB 32 KB 64 KB
Anh – Việt 4616 4363 4168 4029
Việt – Anh 2053 1993 1950 1916
Anh – Anh 8510 8121 7805 7558
Bảng 5.5 Kích thước tập tin sau khi dùng Dictzip# nén
5.2.5.4.2 Tốc độ truy xuất
Từđiển Anh – Việt: (thời gian tính bằng mili giây)
Khối nén Load từđiển Chuyển từ list ‘a’ sang ‘d’ Hiển thị nghĩa “a” lần đầu 8 KB 734 109 2953 16 KB 734 125 2968 32 KB 781 171 2984 64 KB 953 250 3015
Từđiển Việt – Anh: (thời gian tính bằng mili giây)
Khối nén Load
từđiển Chuy‘a’ sang ‘d’ ển từ list Hiển thlần ị nghđầu ĩa “a”
8 KB 703 93 234
16 KB 718 109 250
32 KB 750 156 250
64 KB 953 218 281
Bảng 5.7 Tốc độ truy xuất từđiển Anh-Việt khi sử dụng Dictzip#
5.3 Tổ chức cấu trúc dữ liệu hỗ trợ cho việc tìm kiếm nhanh
Đến thời điểm này, ta đã giải quyết được hai vấn đề cơ bản: vấn đề tổ chức cấu trúc lưu trữ và vấn đề nén dữ liệu. Ta vẫn còn một vấn đề nữa là tổ chức cấu trúc dữ liệu hỗ trợ cho việc tìm kiếm nhanh. Một số cấu trúc tập tin hỗ trợ cho việc tìm kiếm nhanh hiện nay là:
Tập tin tuần tự: tập tin này là một tập các mẫu tin lưu trữ các bản ghi liên tiếp nhau. Việc tìm kiếm một mẫu tin có giá trị khoá K cho trước được thực hiện bằng cách so sánh từng khoá của từng mẫu tin trong tập tin. Tập tin chỉ mục: khi mẫu tin có kích thước lớn để làm tăng thêm hiệu
quả thao tác trên các mẫu tin người ta sử dụng tập tin chỉ mục. Tập tin chỉ mục là tập tin chứa thông tin về vị trí của một mẫu tin trong một tập tin khác. Một cách hình thức, có thể xem tập tin chỉ mục là một tập tin phụ mà mỗi mẫu tin là một tập (K, i), với K là giá trị của khoá và i là địa chỉ của mẫu tin trong tập tin chính. Ta còn có thể gia tăng tốc độ tìm kiếm bằng cách xây dựng tập tin chỉ mục có thứ tựđể tiến hành tìm kiếm nhị phân trên tập tin chỉ mục này.
Tập tin băm: được sử dụng để giới hạn phạm vi tìm kiếm khi số lượng mẫu tin lớn. Thao tác băm chính là thao tác phân loại các khoá có cùng tính chất nào đó vào chung một cụm.
Ta còn có thể đọc tất cả các mẫu tin chỉ mục rồi phát sinh ra cây tìm kiếm, sau đó lưu cây này lên một tập tin. Cách này khai thác được ưu điểm về tốc độ tìm kiếm của các loại cây tìm kiếm nhưng có nhược điểm
là chiếm nhiều bộ nhớ (kể cả bộ nhớ trong lần bộ nhớ phụ) cho việc lưu trữ cây. Theo thông kê đối với dữ liệu từđiển Anh – Việt gồm 68.998 từ thì ta cần khoảng 3,4 MB để tổ chức cây trong bộ nhớ.
Qua việc xem xét các cấu trúc tập tin hỗ trợ cho việc tìm kiếm nhanh, ta thấy kết hợp phương pháp chỉ mục có thứ tự và băm tập tin nghĩa là thích hợp nhất cho việc tìm kiếm nhanh nhất.
5.3.1 Tổ chức tập tin nghĩa
Như đã trình bày, phần nghĩa của từ sẽ có kích thước biến động. Để phần hiển thị nghĩa thêm sinh động, ta thêm phần định dạng font chữ và màu sắc. Do đó mỗi mẫu tin trong tập tin nghĩa sẽ bao gồm:
Phần nghĩa thực sự của từ gồm các nghĩa con. Các nghĩa con này gồm phiên âm quốc tế (nếu có) và các nghĩa khác của từ.
Các byte định dạng (font chữ và màu sắc) tương ứng với từng nghĩa con. Như vậy có bao nhiêu nghĩa con sẽ có bấy nhiêu định dạng tương ứng.
5.3.2 Tổ chức tập tin chỉ mục
Trong phần này ta sẽ trình bày cách thức chỉ mục cho các mẫu tin nghĩa trong tập tin nghĩa. Tập tin chỉ mục của tập tin nghĩa từ điển là một tập các mẫu tin chỉ mục có khoá là từ gốc của từ, các khoá được sắp theo thứ tự tăng dần của bảng chữ cái. Ngoài các thông tin về từ, từ loại, các mẫu tin chỉ mục còn phải lưu thêm thông tin về vị trí bắt đầu và chiều dài mẫu tin nghĩa vì các mẫu tin nghĩa có kích thước biến động.
5.3.2.1 Các trường dữ liệu trong mẫu tin chỉ mục STT Trường dữ liệu Kiểu dữ liệu Kích
thước
Ý nghĩa
1. Word Mảng ký tự Biến
động Từ gốc
2. Attribute Byte 1 byte Tổ hợp các cờ quy định từ loại của từ: 9 Danh từ 9 Động từ 9 Tính từ 9 Trạng từ 9 Giới từ 9 Các từ loại khác 3. MeaningPosition Số nguyên không dấu
4 byte Vị trí mẫu tin nghĩa trong tập tin nghĩa
4. MeaningLength Số nguyên
không dấu 2 byte Kích thước mẫu tin nghĩa
Bảng 5.8 Các trường dữ liệu trong mẫu tin chỉ mục
Khi tìm một từ, trước hết ta khoanh vùng phạm vi tìm kiếm (thao tác băm) để lấy ra đoạn buffer rồi phân tích ra thành các mẫu tin chỉ mục sau đó tiến hành tìm kiếm trên tập các mẫu tin chỉ mục đó. Theo bảng trên ta thấy trường dữ liệu Word (từ gốc của từ) có kích thước biến động, ta không thể phân tích mẫu tin chỉ mục bằng cách tạo thêm một tập tin chỉ mục nữa để lưu vị trí và chiều dài của mẫu tin chỉ mục trên vì biện pháp này không khả thi. Ta chỉ có thểđánh dấu vị trí kết thúc mỗi mẫu tin chỉ mục bằng một giá trị. Nếu ta chọn giá trịđánh dấu có kích thước là 1 byte thì mỗi từ trong từ điển sẽ được biểu diễn bởi 249 byte ( 256 trừ đi 1 byte attribute, 4 byte MeaningPostion và 2 byte MeaningLength) thì mỗi từ trong từ điển có không quá 120 ký tự nếu mỗi ký tựđược biểu diễn bằng 2 byte. Việc phân tích buffer chứa các mẫu tin chỉ mục bây giờ là công việc tìm vị trí kết thúc mỗi mẫu tin chỉ mục.
Hình 5.5 Các giá trị cần thiết để phân tích mục từ 5.3.3 Tổ chức băm tập tin chỉ mục
Việc băm tập tin chỉ mục là nhằm mục đích thu nhỏ phạm vi tìm kiếm. Tiêu chí chọn hàm băm trong bài toán xây dựng từ điển được đề nghị theo thứ tự ưu tiên tăng dần trong bài viết này là:
Sau khi băm, nếu lần lượt gộp các cụm mẫu tin chỉ mục lại thì kết quả phải là tập tin chỉ mục có thứ tự ban đầu.
Việc tính toán cho hàm băm phải nhanh.
Ít xảy ra đụng độ (giới hạn tốt không gian tìm kiếm). Các khoá được phân bốđều trong bảng băm.
Do tập tin chỉ mục của ta được tổ chức thành các mẫu tin tăng dần theo bảng chữ cái nên ta sẽ băm theo các chữ cái đầu của từ. Như vậy theo cách này, hàm băm của ta có thể đảm bảo được hai tiêu chí đầu tiên đã đề ra. Ta có thể băm một hay nhiều cấp tương ứng với một hay nhiều ký tựđầu của từđể có thểđáp ứng được hai tiêu chí còn lại.
Thực nghiệm trên máy điện thoại di động thật (Nokia NGate QD và Nokia 7610) cho thấy khi số mục từ nạp lên listbox có giá trị > 2000 thì ta bắt đầu cảm nhận được thời gian nạp từ. Gọi: N là tổng số cụm. Smin là số mục từ nhỏ nhất trong một cụm. S_ là số mục từ trung bình trong một cụm. Smax là số mục từ lớn nhất trong một cụm. cmaxlà cụm ký tự xuất hiện nhiều nhất. S>2000 là số cụm có số mục từ > 2000.
Size là kích thước bộ nhớ bị chiếm dụng bởi bảng băm tính bằng byte. Ta lần lượt xem xét các cách thức băm có thểđược.
5.3.3.1 Băm cấp một
Các từ có cùng một ký tựđầu tiên sẽ thuộc một cụm. Bảng thống kê sự phân bố các cụm trong bảng băm của các từđiển như sau: Từđiển N Smin _ S Smax cmax S>2000 % 100 2000 × > N S Size (byte) Tin học 56 1 246.39 1405 “s” 0 0 336 Anh – Anh 38 1 3209.53 1325 “s” 19 50 228 Anh – Việt 29 1 2379.24 9406 “s” 17 57 174 Việt – Anh 68 1 1340.38 12813 “c” 14 21 408
Bảng 5.9 Bảng thống kê sự phân bố các cụm trong bảng băm cấp 1
Theo bảng trên ta thấy trung bình phân bố nhỏ nhất và lớn nhất trong một cụm là 246.39 và 12813. Phạm vi tìm kiếm vẫn còn rất lớn. Hơn nữa số cụm có số mục từ > 2000 chiếm khoảng 21% đến 57%, đều này sẽ gây cảm giác ứng dụng chạy chậm, ta cần phải phân hoạch nhỏ hơn nữa.
5.3.3.2 Băm cấp hai
Các từ có cùng hai ký tựđầu tiên sẽ thuộc một cụm. Bảng thống kê sự phân bố trong bảng băm của các từđiển như sau: Từđiển N Smin _ S Smax cmax S>2000 % 100 2000 × > N S Size (byte) Tin học 802 1 17.20 506 “co” 0 0 6416
Anh – Anh 608 1 200.60 4186 “ge” 7 1 4864
Anh – Việt 198 1 138.55 2328 “co” 3 2 594
Việt – Anh 1050 1 86.81 7626 “ng” 7 1 8400
Bảng 5.10 Bảng thống kê sự phân bố các cụm trong bảng băm cấp 2
Theo bảng trên ta thấy trung bình phân bố nhỏ nhất và lớn nhất trong một cụm là 17.20 và 7626. So với băm cấp một, phạm vi tìm kiếm và số cụm có số mục từ > 2000 đã giảm đáng kể. Tuy nhiên vẫn có thể gây cảm giác chậm đối với người sử dụng khó tính.
5.3.3.3 Băm cấp ba
Các từ có cùng ba ký tựđầu tiên sẽ thuộc một cụm. Bảng thống kê sự phân bố trong bảng băm của các từđiển như sau Từđiển N Smin _ S Smax cmax S>2000 % 100 2000 × > N S Size (byte) Tin học 3991 1 3.46 211 “com” 0 0 39910
Anh – Anh 3906 1 31.22 3800 “gen” 1 0.03 39960 Anh – Việt 3211 1 21.49 752 “con” 0 0 32110 Việt – Anh 3755 1 24.27 5984 “ngư” 2 0.05 37550
Bảng 5.11 Bảng thống kê sự phân bố các cụm trong bảng băm cấp 3
Theo bảng trên ta thấy trung bình phân bố nhỏ nhất và lớn nhất trong một cụm là 3.46 và 5984. So với băm cấp một và hai, phạm vi tìm kiếm và số cụm có số mục từ > 2000 đã giảm đi rất nhiều. Số lần làm chậm ứng dụng không đáng kể.
5.3.3.4 Băm cấp bốn
Các từ có cùng bốn ký tự đầu tiên sẽ thuộc một cụm. Khi tiến hành băm theo cách này, tập tin chỉ mục sẽ bị chia quá vụn, kích thước bộ nhớ bị chiếm dụng bởi bảng băm sẽ gia tăng, điều này không cần thiết vì băm cấp ba đã dung hòa được kích thước bộ nhớ và thời gian nạp từ.
Từđiển N % 100 2000 × > N S Size (byte) Tin học >> 3991 << 0 >> 39910 Anh – Anh >> 3906 << 0 >> 39960 Anh – Việt >> 3211 << 0 >> 32110 Việt – Anh >> 3755 << 0 >> 37550
Bảng 5.12 Bảng thống kê sự phân bố các cụm trong bảng băm cấp 4
5.3.3.5 Kết luận
Như vậy, việc băm cấp một và cấp hai gây ra cảm giác ứng dụng chạy chậm khi nạp từ. Việc băm cấp bốn sẽ chia quá vụn tập tin chỉ mục và gia tăng kích thước bộ nhớ bị chiếm vụng một cách không cần thiết. Ta chỉ có thể băm cấp ba để có thể dung hoà đượcthời gian nạp từ và kích thước bộ nhớ bị chiếm dụng.
Chương 6 Các kỹ thuật xử lý ứng dụng
Khi phát triển chương trình từ điển trên điện thoại thông minh Symbian Series 60. Ngoài vấn đề cấu trúc dữ liệu, điện thoại di động còn có những đặc trưng riêng về màn hình hiển thị, bàn phím… Do đó, trong khi lập trình ứng dụng cần phải giải quyết những vấn đề kĩ thuật chính sau:
6.1 Font chữ tiếng Việt
Trong thời gian gần đây, với sự ra đời của font chữ Unicode (một ký tự biểu diễn bằng 2 bytes – 16 bits) có các ký tự tiếng Việt trong phần mở rộng, tiếng Việt đã được hiển thị tốt như các ngôn ngữ khác trong những phần mềm ứng dụng trên máy tính. Ngoài ra, những thiết bị kĩ thuật số cá nhân (PDA) khác, như Pocket PC với hệđiều hành Windows CE cũng sử dụng cùng loại font. Do đó, khi phát triển từ điển trên các thiết bị này, vấn đề chỉ là sử dụng font Unicode trên các control hiển thị.
Hệ điều hành Symbian – ngay khi mới ra đời – đã sử dụng font Unicode làm font chữ hiển thị. Tuy nhiên, , các nhà sản xuất điện thoại thông minh Symbian Series 60 đã không sử dụng những font chữ hiện có trên máy tính, thay vào đó là các font Unicode với ít ký tự mở rộng hơn nhằm tiết kiệm bộ nhớ. Do đó, nếu sử dụng font Unicode sẵn có trên điện thoại, chỉ một số ký tự tiếng Việt hiển thị đúng, các ký tự có mã lớn không hiển thịđược.
Như vậy, để hiển thị được tiếng Việt trong ứng dụng từ điển, chúng em tìm cách sử dụng font Unicode của máy tính. Điều này thực hiện được nhờ cơ chế Open Font System của hệđiều hành Symbian.
Open Font System là cơ chế cho phép sử dụng các bộ quét font (rasterizez plug- in), giúp hệ điều hành hiển thị được nhiều loại font khác nhau. Bộ quét font là một DLL nhận dạng dữ liệu của tập tin font chữ (*.ttf, *.fon…) và cung cấp hình dạng ký tự trong font đó cho hệ thống hiển thị. Nói cách khác, một bộ quét font sẽ giúp hệ thống Symbian “hiểu” được một loại font nào đó, tùy theo các bộ quét font hiện