Ebook hướng dẫn làm từ điển
Mục lục Lời nói đầu Giới thiệu Một số từ điển loại Những kiến thức cần trang bị Dữ liệu từ điển Từ ASCII đến Unicode .5 Ngơn ngữ lập trình tiện ích cần chuẩn bị Bắt đầu làm việc với file liệu từ điển 10 Progressbar thread .10 Các chức từ điển 10 So sánh xếp theo ngôn ngữ 10 Phát âm cho từ điển 12 Hiển thị liệu có định dạng màu sắc + chuyển tiếp từ 12 Tra từ qua clipboard 12 Thuật toán làm từ điển 13 Đo tốc độ thuật toán 13 Một số thuật toán làm từ điển 13 Chuẩn dict.org 14 Cơ chế load danh sách nhanh 20 Tìm kiếm nâng cao cho từ điền 23 Định dạng từ điển SPDict 27 Những giải pháp chưa hoàn thành 29 Những tính chưa hồn thành 29 Liên kết online offline 30 Lời nói đầu Super Power Dict (SPDict) từ điển mở mã nguồn (không dùng biện pháp bảo vệ mã nguồn) , liệu thuật toán làm từ điển với tinh thần chia sẻ kiến thức kinh nghiệm thân cho bạn có hứng thú với vấn đề , nhiên từ phiên tớ không cung cấp source code nhiều phần mềm nguồn mở để down biên dịch mà bạn muốn có source code dùng trình dịch ngược file java ví dụ : DJ Java Decompiler Nguyên nhân việc làm tớ muốn truyền đạt kiến thức cho người thực muốn tìm hiểu , có kỹ code định có khả phát triển để đóng góp thêm cộng đồng nguồn mở dành cho người biết ăn sẵn , bốc code sửa tên đem khoe , chí cịn chẳng biết code java (T_T) , biết code ăn sẵn nên đâm lười , dịch , chạy cho vào ứng dụng mà chẳng nghiên cứu từ điển hết Tài liệu trình bày tồn muốn chia sẻ kiến thức , khơng hỗ trợ thêm riêng cho , thứ không trình bày tài liệu khơng muốn truyền đạt , hai dễ , khơng đáng để truyền đạt , bạn gửi yêu cầu giúp đỡ riêng tuyên bố trước khơng làm đâu Thơng cảm , rắn việc người cần hỗ trợ sướng , có hiểu nỗi lòng người suppost đâu (^_^), số trường hợp xin xong phủi tay , chê chê , phủ nhận thứ người khác phải nhiều cơng sức để làm , có người chả biết biết hỗ trợ , chả lẽ làm hộ , ăn sẵn … ngồi tớ cịn thời gian để giải đáp muốn hỗ trợ riêng , khơng chịu tìm kiếm , add nick , gửi mail spam lung tung , tớ phải bỏ nick yahoo lý Giới thiệu Giới thiệu qua chút thân: Họ tên : Bùi Đức Tiến Năm sinh 1989 web : http://superpowerdict.googlepages.com/ http://tienlbhoc.vnbb.com/ Làm từ điển với chức khơng phải phức tạp , sâu vào để hồn thiện đầy đủ lại khó khăn Đề tài nhiều sinh viên CNTT chọn làm đề tài làm tập lớn số lượng phần mềm mã nguồn mở hay miễn phí có chất lượng thật khơng nhiều Mình muốn làm , giống unikey dù tính ổn định thay vietkey tốt Hiện có nhiều từ điển online , cài đặt, cập nhật từ thường xuyên , miễn phí , có yếu điểm thay từ điển cài đặt việc làm từ điển cần thiết vì: +Khơng phải lên net để tra khơng phải có net , chưa kể nhiều người xót tiền net +Đơi người dùng muốn tự tạo riêng cho để ghi chép vấn đề hay chun ngành cho riêng hay chia sẻ nội Từ điển online khơng thể làm điều +Vì web nên ví dụ tính kiểu click and see , load đầy đủ danh sách khơng thể có +Web dừng hoạt động lúc +Dữ liệu thêm vào trang web khơng lấy lại được, , phải gắn bó với mãi , giống google khơng thể chat với yahoo , người dùng khơng thích dùng web , sang web khác, phải nhập lại từ trước Đó lý người dùng nhập từ vào từ điển online mà cần phải có từ điển liệu mở SPDict Một số từ điển loại Từ điển offline từ điển chạy máy mà khơng cần kết nối net đó: Hiện tiếng giới mã nguồn mở Stardict , phần mềm có khả tra từ nhanh , gọn nhẹ, bắt từ ứng dụng khác (click and see ) tốt ,định dạng biến thể nâng cấp chuẩn Dict , chuẩn mà thời điểm đa số phần mềm miễn phí , nguồn mở dùng để làm từ điển , có nhược điểm định chưa khắc phục chuẩn Dict liệu từ điển phải ghi vào nhiều file liệu khác , stardict file Ngồi khả thêm xố khơng có hạn chế lớn chuẩn từ điển biến thể Ngoài soft mã nguồn mở , phải kể đến phận không nhỏ soft từ điển miễn phí với đại diện mà cho tốt lingoes , với tính giống stardict có ưu điểm phần danh sách từ xuyên suốt từ đầu đến cuối , có phát âm cơng nghệ text to speech microsoft , cịn stardict có 30 từ danh sách Nhưng có nhược điểm tác giả khơng cung cấp cơng cụ convert liệu từ điển, phải gửi liệu biên soạn text cho tác giả để tác giả convert thành liệu từ điển khơng nhiều ngôn ngữ stardict phổ biến Đối với phần mềm miễn phí nước có phần mềm :Multidictionary (phổ biến nhất) , powerclick jtranslator xuất Tất từ điển khơng có khả thêm xố từ tạo từ điển Hi vọng từ điển đời khoả lấp chỗ trống Đồng thời với chế liệu mở mã nguồn mở thúc đẩy xuất từ điển miễn phí , nguồn mở tăng thêm chất lượng , tính phục vụ cho cộng đồng Trong thời buổi hội nhập , việc học ngoại ngữ quan trọng công việc khơng phải vơ nghĩa Tuy nói thơi tiếng Anh dốt (^_^) Giới thiệu cho người số từ điển thương mại phổ biến nay: +Lạc việt mtd : có thêm xố từ , tra từ click and see , chạy ổn định , liệu từ điển tương đối đầy đủ +Just click n see: có tra từ click and see(tốt lạc việt) , tính +Evtran 2.0 : có thêm xố, phần mềm dịch 3.0 khơng có khả thêm xố, chức click and see lên vista liệt bạn vào trang vdict.com để dịch trực tuyến miễn phí +English Study 4.0: phần mềm ngữ pháp tiếng anh + từ điển + luyện nghe +babylon: khơng có khả thêm xoá khả click and see thuộc loại tốt với khả tìm kiếm từ gần hồn hảo, mạnh +prodict, javidict thuộc hãng, đặc điểm loại liệu lớn gồm nhiều chun ngành, khơng thêm xố (javidict khơng biết), tra từ click and see ngang lạc việt , trang http://tratu.baamboo.com/ mua quyền liệu bạn tra từ trực tuyến miễn phí Đây bảng so sánh: Dữ liệu Click and Tìm kiếm see Phát âm Câp File nhât dư data liêu Load danh sách Stardict Nhiều ngơn ngữ ổn Tra đa từ điển, Có truy vấn mờ tạm được, tra wildcard (tra với * ?) Giọng thật dung lượng lớn , tiếng anh Khơng file thêm xố, có tool tạo từ điển 30 từ , danh sách chung cho từ điển lingoes ổn Tra đa từ điển Text to speech (TTS 5) Không, file Load đầy đủ , nhanh phải cài đặt gửi data cho tác giả để tạo Multi dictionary Tàm tạm Tra tối đa TTS4 từ điển,tìm kiếm thơng minh Tàm tạm Có từ điển , khơng tìm thơng minh powerclick Rất Hạn chế nhiều file Đầy đủ chậm TTS4 , không tiếng anh file Đầy đủ, nhanh jtranslator Bình Tra qua từ điển , Free thường clipboard tìm kiếm java thơng minh TTS tàm tạm không file Đầy đủ , nhanh mtd Nhiều, Trung chất bình lượng tốt Có , file khơng có tool convert Đầy đủ, nhanh Just click n Rất see từ điển, tra chéo , cho dùng wildcard TTS không không Không Đầy đủ, nhanh rõ Evtran 2.0 Bình khơng thường từ điển , tra wildcard khơng có Nhiều file Đầy đủ, nhanh Evtran 3.0 Bình Trung thường bình từ điển khơng khơng Nhiều file Khơng có EStudy Hơi từ điển, tìm thơng minh Giọng thật , tiếng Trung bình Có , Nhiều khơng file tool convert Đầy đủ , nhanh Anh babylon7 Nhiều ngôn ngữ Rất tốt Prodic Dữ liệu Bình lớn thường SPDict Nhiêu ngơn ngư Tra đa từ TTS Không , file Nhiều từ điển, load từ , danh sách chung điển, tìm +5 có tool cài đặt thơng minh convert tốt Bình TTS thường , tìm phần từ nghĩa chậm Khơng, file cho tìm online Tra qua Tra đa tư Java Co , co file clipboard điên, tìm text to tool kiếm thơng speech convert minh với wildcard , regular expression tìm từ gần Đầy đủ , nhanh loại : Đầy đủ với spdict Chung với spdict small Ngoài so sánh spdict cịn có ưu điểm chạy đa tảng , cần có java runtime dù win hay linux chạy hết Những kiến thức cần trang bị Dữ liệu từ điển Bắt đầu nhé, để làm từ điển, ngồi việc có kỹ lập trình, thuật tốn tìm kiếm nhanh, cấu trúc liệu cần CSDL từ điển, nhập CSDL từ đầu mệt, chưa kể vừa số lượng, nội dung, lại sai ngữ nghĩa ( người mà, sai chuyện thường), may cho chúng ta, có nguồn cung cấp từ điển lớn web người việt trang www.tudientiengviet.net, số lượng từ điển phong phú , đa ngôn ngữ thừa để bạn bắt tay vào làm soft từ điển Để lấy CSDL từ điển bạn vào tải liệu stardict (một từ điển nguồn mở phổ biến linux) http://www.tudientiengviet.net/data.html Để dùng liệu stardict bạn dùng cơng cụ stardict-editor công cụ convert file stardict sang định dạng dict.tab ngược lại file dict.tab sau convert từ stardict file để lấy liệu cho từ điển định dạng đơn giản cịn có số tính bổ trợ từ điển tốt Đây trích nguyên văn định dạng này: :Here is a example dict.tab file ============ a 1\n2\n3 b 4\\5\n6 c 789 ============ It means: write the search word first, then a Tab character, and the definition If the definition contains \\ new line, just write \n, if contains \ character, just write Bài viết giới thiệu qua thế, để người định hướng, nói trước, plain text dễ hiểu không nên dùng làm từ điển tốc độ chậm, thử, tra từ điển nhỏ khoảng 30.000 từ cịn được, tra vài từ điển lớn lúc ( babylon 17 ngôn ngữ) nguy, chưa kể người dùng bạn có máy cấu hình thấp Lưu ý: +File stardict có file , để decompile bạn phải chọn file có ifo +đơi stardict convert lỗi với nội dung sau: Building File not exist: D:\YViet\star_yviet.dict Please rename somedict.dict.dz to somedict.dict.gz and use SevenZip to uncompress the somedict.dict.gz file, then you can get the somedict.dict file Done! Có nghĩa file dz stardict file nén (stardict chạy với file nén định dạng dictZip (hình thế) , bạn làm theo cách hướng dẫn , thường dùng 7zip giải nén trực tiếp file dict Từ ASCII đến Unicode Đây viết search mạng , từ điển đa ngôn ngữ, nên dùng mã Unicode vni hay tcvn3 , bạn nên có chút kiến thức , viết viết thuộc loại dễ hiểu biết Từ ASCII đến Unicode kpham2@erols.com (Xin cám ơn bạn Minh Sơn TP HCM dịch viết từ Anh Việt) Bài viết để giúp bạn có trình độ máy tính trung bình hiểu Unicode UTF-8 rõ ràng Sau đọc xong, bạn biết lịch sử Unicode, có dạng thức nào, UTF-8 đôi với Unicode Khi tổng hợp nên tài liệu này, đơn giản, bỏ qua nhiều khía cạnh phức tạp Unicode đề tài mã tổ hợp, mã dựng sẵn Nếu có thiếu sót, mong bạn thơng cảm Thêm vào đó, viết khơng bàn cách cài đặt/sử dụng Unicode font hệ điều hành hay phần mềm Về chuyện này, bạn tham khảo trang web Lê Hoàn hay thư trao đổi Unicode Một vài điều cần lưu ý: Trong viết, dùng hệ thập lục phân (hệ 16) để giá trị mã Ví dụ, tơi nói kí tự "a" có mã 61, bạn phải hiểu 61 hệ thập lục phân (bằng 97 hệ thập phân) Lí bảng mã, mã thường có dạng thập lục phân có dạng thập phân Ở cuối bài, tơi có bảng mã Unicode cho kí tự Việt nam bạn tham khảo Nếu muốn xem toàn bảng mã Unicode (dưới dạng file PDF) vào http://www.unicode.org Trong đó, click "Code Charts" bạn thấy nhiều "trang mã" Tồn kí tự tiếng Việt tìm thấy trang Latin-1 Supplement, Latin Extend A Latin Extend B, Latin Extended Additional Bạn in trang mã muốn Cuối cùng, bạn bỏ qua phần biết thẳng đến nơi tơi nói UTF-16, UTF-8 Tuy nhiên, tơi cho bạn hiểu rõ bảng mã ASCII ANSI hiểu rõ đời phát triển Unicode Một số định nghĩa hữu ích: -Bảng mã: Một tập hợp nhiều kí tự khác Một ví dụ bảng mã chuẩn ASCII (American Standard Code for Information Interchange - Mã chuẩn Hoa kỳ Trao đổi Thơng tin) bao gồm 128 kí tự, phần lớn kí số, kí tự tiếng Anh, ký tự đặc biệt thông dụng dấu cộng, trừ, phần trăm Unicode bảng mã chuẩn khác, gồm có hàng ngàn kí tự gồm tiếng Anh quốc tế bao gồm kí tự Việt nam Cũng có vài bảng mã tiếng Việt (khơng chuẩn) TCVN-ABC, VNI, VISCII, chúng có tối đa 256 kí tự - Mã: Một số nguyên dương đại diện cho kí tự bảng mã Mã kí tự thay đổi tùy theo bảng mã Ví dụ, bảng mã tiếng Việt TCVN-ABC, kí tự "ầ" có mã C7 Trong bảng tiếng Việt VISCII, "ầ" có mã A5 Trong bảng Unicode, "ầ" có mã 1EA7 (=7847 thập phân) Lưu ý mã kí tự cho thấy vị trí kí tự bảng mã Ví dụ, bảng Unicode, "ầ" nằm vị trí 7847 Mỗi kí tự Unicode "gắn" mã Ví dụ, Unicode, bạn khơng thể tìm thấy kí tự "ầ" chổ khác vị trí 7847 Các máy tính biết kí tự qua mã Ví dụ, bạn đánh Unicode dùng gõ tiếng Việt bạn muốn nhập chữ "ầ", gõ tìm cách gửi mã 1EA7 (sau mã hóa dạng nhị phân) đến xử lý trung ương máy tính - Font Unicode: Một font gọi font Unicode cung cấp cấu hình kí tự bảng mã Unicode Một font file (tập tin font) dùng mã kí tự để định cấu hình cho kí tự Ví dụ, phải thể kí tự "ầ" hình dùng font Arial, phần mềm lục tìm mã 1EA7 font file Arial.ttf xác định cấu hình tương ứng Nếu font VNI-Times khơng hổ trợ Unicode, khơng có cấu hình cho mã 1EA7 có mã lớn FF (=255 thập phân) Vì vậy, khơng thể hiển thị kí tự "ầ" khơng gọi font Unicode Tương tự vậy, font Arial, Times New Roman, Tahoma hệ điều hành Windows 95 Windows 98 khơng có cấu hình cho kí tự Unicode; bạn phải "cập nhật" chúng cách tải cài đặt font Unicode với tên tương tự vào máy bạn muốn đọc mail hay duyệt web site dùng Unicode font - Chuỗi bit: Một chuỗi số nhị phân, 01100001 Do máy vi tính "đọc" số nhị phân, liệu phải chuyển đổi thành chuỗi bit trước nhập vào máy Mỗi kí số số thập lục phân ln biểu diễn bốn số nhị phân Ví dụ, = 0110, = 0001, F = 1111, = 0111, 61 = 01100001, 7F=01111111 - Mã hóa (encoding): Cách biểu diễn kí tự dạng chuỗi bit Tùy theo cách mã hóa, kí tự biểu diễn khác "UTF-16" kiểu mã hóa kí tự Unicode kí tự biểu diễn dạng chuỗi 16-bit tương đương với giá trị mã Ví dụ, UTF-16, "ầ" mã hoá thành chuỗi 16-bit: 0001111010100111 (= 1EA7), tương đương với mã gốc "ầ" bảng Unicode "UTF-8" kiểu mã hóa khác cho kí tự Unicode, kí tự biểu diễn dạng MỘT hay NHIỀU chuỗi 8bit, KHƠNG tương đương với mã gốc Ví dụ, UTF-8, "ầ" mã hóa thành ba chuỗi 8-bit (cũng gọi chuỗi 24 bit) 111000011011101010100111 (= E1BAA7) không tương đương với mã gốc 1EA7 Tại cần UTF-8 Chúng ta biết sau - Giải mã: Sau hệ điều hành nhận kí tự (ví dụ đọc từ file) mã hóa, phải giải mã để lấy lại mã gốc kí tự bảng mã trước vào font file để tìm cấu hình thể kí tự hình Một font file dùng mã gốc khơng dùng dạng mã hóa Hệ ASCII/ANSI: hệ điều hành dùng bảng mã ASCII hay ANSI Ví dụ: Windows 95 dùng bảng mã ANSI Các hệ ASCII ANSI luôn dùng đơn vị liệu bit (1 byte) QUÁ TRÌNH PHÁT TRIỂN: từ ASCII đến ANSI Unicode Bảng mã ASCII: 7-bit, cho phép 128 mã (2 mũ 7) Cịn có tên khác ISO 646-IRV ASCII mã lúc máy tính phát minh Mã cho phép: từ đến 7F Mã nhỏ nhất: 0, dùng cho kí tự NUL (null: trống trơn, khơng có gì) Mã lớn 7F (=thập phân 127, =nhị phân 01111111) Được dùng cho phím DEL (delete-xố) (lưu ý: đơn vị liệu bit, có bit cuối dùng, ) Ví dụ: Trong bảng ASCII, kí tự "a" có mã 61 Khuyết điểm: có 128 kí tự cho phép Mọi người cần nhiều mã hơn, sau hệ DOS máy tính cá nhân xuất Vì vậy, người ta phải nghĩ mã ANSI Bảng mã ANSI : 8-bit, bảng mã ASCII mở rộng; cho phép 256 mã (2 mũ 8) Các tên khác: ISO-8859-1, LATIN-1 Mã cho phép: từ đến FF Mã nhỏ nhất: 0, dùng cho kí tự NUL Mã lớn 255 = FF ( =thập phân 255, =nhị phân 11111111 ) (lưu ý: tất bit đơn vị liệu dùng) Ví dụ: bảng ANSI, kí tự "ơ" tiếng Việt có mã F4 (các mã tiếng Việt dựa ANSI với nhiều sửa đổi) Lưu ý: 128 kí tự (các mã từ 7F) giống ASCII ANSI Ví dụ, ký tự "a" có mã 61 hai bảng ASCII ANSI Nói cách khác, ASCII tập ANSI Ưu điểm: số lượng mã cho phép tăng đến 256 Do đó, bảng mã có chỗ cho kí tự khác bên cạnh tiếng Anh Khuyết điểm: Vẫn chưa đủ chỗ cho kí tự quốc tế (Tàu, Hàn Quốc, Ä Rập, Do Thái ,quá nhiều!) Vì vậy, người ta phát minh Unicode 16-bit Bảng mã Unicode 16-bit: Cho phép 65536 mã (2 mũ 16) Các tên khác: ISO-14646, UCS-2 Mã cho phép: từ đến FFFF Mã nhỏ nhất: 0, dùng cho NUL Mã lớn 65535 = FFFF (= thập phân 65535, = nhị phân 1111111111111111 ) Ví dụ: bảng Unicode, kí tự "â`" tiếng Việt có mã 1EA7 Lưu ý: 256 kí tự (các mã từ 255= FF) giống ANSI Unicode Ví dụ, ký tự "a" có mã 61 ba bảng ASCII ANSI Unicode Nói cách khác, ANSI (cũng ASCII) tập Unicode Ưu điểm: đủ chỗ chứa tồn kí tự dân tộc giới Khuyết điểm: Hầu hết máy tính cịn dùng mã ASCII, chúng khơng nhận mã lớn 7F Và vấn đề lớn là, hệ ASCII ANSI, vốn xử lý liệu theo chuỗi 8-bit, lầm lẫn xử lý kí tự Unicode mã hóa dạng 16-bit (UTF-16) Các hệ ASCII/ANSI diễn dịch MỘT kí tự Unicode 16-bit thành HAI kí tự 8-bit Ví dụ, kí tự "a" dạng 16-bit dịch thành HAI kí tự: kí tự thứ NUL (00000000), kí tự thứ hai kí tự ASCII "a" (01100001) Chẳng hạn, bạn muốn thể hàng chữ : "ABCDEF" mã hóa UTF-16, có khả bạn nhìn thấy " A B C D E F" hình (trên hình, kí tự NUL thể thành ô trống ô vuông, tùy theo máy) Vấn đề cần phải giải Chúng ta muốn dùng bảng mã Unicode cần mã hố kí tự theo cách mà hệ ASCII nhận kí tự Cách mã hố UTF-16 rõ ràng có vấn đề cho hệ điều hành phổ biến dùng chuẩn ASCII/ANSI Ðó lý người ta sáng chế cách mã hoá UTF-8 Ngun tắc mã hố UTF-8: - Một kí tự Unicode mã hóa thành hay nhiều chuỗi 8-bit để hệ ASCII hay ANSI nhận diện - Ðể tương thích với ASCII, kí tự Unicode thuộc bảng mã ASCII (mã từ đến 7F) mã hóa thành chuỗi 8-bit tương đương với giá trị nhị phân mã Vì bảng ASCII có kí tự tiếng Anh, điều có nghĩa hệ ASCII đọc văn tiếng Anh viết Unicode UTF-8 cách dễ dàng, khơng cần phải chuyển đổi - Tất kí tự Unicode có mã lớn 7F mã hoá thành HAI BA chuỗi 8-bit (byte) phù hợp với nguyên tắc bảng phía - Trong UTF-8, byte kí tự Unicode định có byte kèm theo dành cho kí tự Như hệ ASCII/ ANSI sau đọc byte thứ kí tự UTF-8 biết có byte kèm cho kí tự Ðiều giúp cho việc giải mã (để lấy trở lại mã Unicode) cho kí tự Dưới hai bảng mã hố UTF-16 UTF-8 cho kí tự Unicode Trong cáccbảng, chữ "x", "y" "z" bit bit Bảng A: Cho mã có giá trị từ đến 7F (các kí tự ASCII): mã -0-7F UTF-16 -byte byte 00000000 0xxxxxxx UTF-8 0xxxxxxxx Bảng B: cho mã từ hex 80 trở lên: mã - UTF-16 byte byte 80-7FF 00000yyy yyxxxxxx 800-FFFF zzzzyyyy yyxxxxxx UTF-8 byte byte byte 110yyyyy 10xxxxxx 1110zzzz 10yyyyyy 10xxxxxx Theo bảng A:: - Nếu mã NHỎ HƠN BẰNG 7F mã hố thành 8-bit tương đương với dạng nhị phân mã Theo bảng B: - Nếu mã LỚN HƠN 7F NHỎ HƠN BẰNG 7FF mã hoá thành chuỗi 8-bit - Nếu mã LỚN HƠN 7FF mã hố thành chuỗi 8-bit Ví dụ: Mã hố kí tự Unicode tiếng Việt "ầ" (mã = 1EA7) dùng UTF-8: 1) Ðầu tiên viết mã thành chuỗi 16-bit (UTF-16): 0001111010100111 tương đương với 1EA7 2) Cắt chuỗi 16-bit thành hai byte: byte là: 00011110 byte là: 10100111 3) 1EA7 lớn 7FF nhỏ FFFF Theo bảng trên, dùng dòng cuối để chuyển đổi (nghĩa dạng mã hóa UTF-8 bạn cho kí tự "ầ" có chuỗi 8-bit (3-byte) 4) Đối chiếu với byte byte dòng cuối cột UTF-16, bạn có: zzzz = 0001; yyyyyy = 111010; xxxxxx = 100111 5) Đối chiếu với byte byte dòng cuối cột UTF-8, bạn có dạng UTF-8: byte là: 1110zzzz = 11100001 (=E1) byte là: 10yyyyyy = 10111010 (= BA) byte là: 10xxxxxx = 10100111 (=A7) Tổng hợp lại, kí tự "ầ" mã hóa dạng UTF-8 là: E1BAA7 Lưu ý bạn có byte cho kí tự ầ, khác với kí tự gốc có byte Nếu bạn theo nguyên tắc trên, bạn viết trình mã hố/giải mã UTF-8 cho hệ thống Thêm vài ví dụ UTF-8 kí tự/ mã UTF-8 -a 97 97 A 7840 225, 186,160; A(` 7856 225, 186,176; E^` 7872 225, 187,128; O^’ 7888 225, 187, 144; O*~ 7904 225, 187, 160 Bảng Unicode cho kí tự Việt Nam 225 a' 224 a` 7843 a? 227 a~ 7841 a 7855 a(' a(` a(? a(~ 7857 7859 7861 7863 7845 a^' a^` a^? a^~ a^ 7847 7849 7851 7853 250 u' u` u? u~ u 249 7911 361 7909 7913 u*' u*` u*? u*~ u* 7915 7917 7919 7921 233 e' e` e? e~ e 232 7867 7869 7865 7871 e^' e^` e^? e^~ e^ 7873 7875 7877 7879 243 o' o` o? o~ o 242 7887 245 7885 7889 o^' o^` o^? o^~ o^ 7891 7893 7895 7897 7899 o*' o*` o*? o*~ o* 7901 7903 7905 7907 237 i' i` i? i~ i 236 7881 297 7883 253 y' y` 7923 7927 7929 7925 259 a( a^ u* e^ o* o^ 226 432 234 417 244 273 d193 A' A` A? A~ A 192 7842 195 7840 7854 A(' A(` A(? A(~ A( 7856 7858 7860 7862 7844 A^' A^` A^? A^~ A^ 7846 7848 7850 7852 218 U' U` U? U~ U 217 7910 360 7908 7912 U*' U*` U*? U*~ U* 7914 7916 7918 7920 201 E' E` E? E~ E 200 7866 7868 7864 7870 E^ E^ E^ E^ E^ 7872 7874 7876 7878 211 O' O` O? O~ O 210 7886 213 7884 7888 O^' O^` O^? O^~ O^ 7890 7892 7894 7896 7898 O*' O*` O*? O*~ O* 7900 7902 7904 7906 205 I' I` I? I~ I 204 7880 296 7882 221 Y' Y` Y? Y~ Y 7922 7926 7928 7924 258 A( A^ U* E^ O* O^ 195 431 202 416 212 208 D- Ngơn ngữ lập trình tiện ích cần chuẩn bị Vì từ điển từ điển đa ngôn ngữ nên việc cần thiết phải hỗ trợ unicode , nên hỗ trợ xếp đa ngôn ngữ (không thiết phải có) Mình chọn java (các spdict trước 6.0 dùng c#) để lập trình , c# , vb.net , thoả mãn hai tính trên, ngơn ngữ dùng framework hỗ trợ Cịn khơng bạn dùng vb (lấy control unicode bên caulacbovb.net) delphi , vc++ được, tuỳ , phần xếp đa ngơn ngữ khơng thiết phải có làm thay đổi phần hiển thị danh sách chút , không đáng kể , mang tính chất thói quen người dùng thơi Ngồi , để làm việc với file dict.tab bạn cần cơng cụ có khả hiển thị file text hàng chục mb chí hàng trăm mb với tốc độ nhanh , việc notepad chí word không làm Phải dùng số công cụ notepad2 , notepad++ , EmEditor , EditPlus notepad++ nhiều tính hơn, hiển thị unicode số ký tự thành ô vuông, không free phải cài định chọn notepad2 Như xong, bắt đầu nghiên cứu tiếp sau Bắt đầu làm việc với file liệu từ điển Để code từ điển bạn phải thơng thạo đọc ghi loại file nhị phân văn Trong file văn cần biết cách đọc liệu unicode (spditc lưu dạng UTF-8) đọc dòng , ký tự … Đối với file nhị phân cần ý: +position (cho biết vị trí trỏ văn hành) +seek : nhảy đến vị trí văn +setlength : định lại kích thước file +Đọc mảng byte với độ dài cho sẵn, đọc số kiểu nhị phân short (2 byte) , integer(4 byte) Progressbar thread Để chạy trình convert tìm kiếm nâng cao hiển thị tiến trình progressbar cần thiết ,để chạy bạn search google lên trang sun có ví dụ cách thức sử dụng control (swing control) , ngồi để progressbar chương trình khơng bị chạy q trình tìm , convert , ta cần dùng đến thread Lấy đường dẫn thư mục hành (riêng cho java) Ở chương trình c# , vb , vb.net cần application startup path đường dẫn java khơng Java dùng hàm để lấy đường dẫn thư mục : System.getProperty("user.dir"); Nhưng với mơi trường window , với mơi trường linux ln thư mục home máy : /home/tienlbhoc Để lấy đường dẫn win linux bạn dùng đoạn mã sau : URL link = this.getClass().getProtectionDomain().getCodeSource().getLocation(); //lấy đường dẫn class dạng url File i = new File(link.toURI()); duongDanChinh = i.getParent();//convert dạng path bình thường Các chức từ điển So sánh xếp theo ngôn ngữ Java hỗ trợ xếp nhiều ngôn ngữ giới (trong có tiếng việt) , để xếp , so sánh ta cần phải tạo class Abdeckung kbpP D3 Như nghĩa từ Abdeckung file chưa nghĩa bắt đầu offset kbpP (theo mã 64 ký tự) có độ dài D3 Việc chuyển từ mã số 64 số 10 thực sau: Đối với vị trí bắt đầu: kbpP Ta có k mã số 64 = 36 số 10, b = 27, p = 41, P = 15 Như chuyển sang số 10, mã kbpP có giá trị là: 36*64^3 + 27*64^2 + 41*64^1 + 15*64^0 = 9550415 Đối với độ dài nghĩa: D3 Ta có D = 3, = 55 Như chuyển sang số 10, mã D3 số 64 có giá trị là: 247 File index xếp để giảm bớt thời gian tìm kiếm Việc mã hố theo số 64 giúp cho kích thước file index giảm xuống nhiều so với khơng mã hóa Cịn cấu trúc file chứa nghĩa gồm phần sau: @headword * tu loai (noun, verb ) - dinh nghia = cau vi du cho dinh nghia + nghia cua cau - dinh nghia = cau vi du cho dinh nghia + nghia cua cau * tu loai - dinh nghia Nghĩa từ gồm phần trên, nghĩa từ nối tiếp liên tục Như vậy, bạn hiểu cách thức hồn tồn xây dựng cho từ điển riêng Tuy nhiên, công việc nhập liệu lại không đơn giản chút Nhưng, lại lần nữa, thật may mắn có số bạn bỏ công nhập sẵn cho số từ điển thông dụng Các bạn tham khảo thêm tại: http://www.ttdomain.net/ttdownload/, http://www.informatik.uni-leipzig.de/~duc/Dict/, http://huybien.vze.com Ngồi cịn nhiều từ điển chun dụng khác nữa, bạn tham khảo thêm địa www.dict.org II Xây dựng chương trình: Ở tơi xin trình bầy cách sử dụng ngôn ngữ Visual C++ 6.0 thư viện MFC Các bạn hồn tồn dễ dàng sử dụng ngôn ngữ khác để làm Trong khuôn khổ báo, xin đưa phần chủ yếu Các phần thiết kế giao diện, bố trí giao diện v.v… tơi xin dành cho bạn tự sáng tạo Các thành phần giao diện bản: - Edit Box: dùng để nhập từ;Gán biến: Variable name: m_word, Category: Value, Type: CString - WebBrowser dùng để nghĩa từ Việc sử dụng WebBrowser nhằm mục đích hiển thị nghĩa trực quan sinh động cách xử lý chuỗi (sẽ đề cập sau này) Bạn hồn tồn thay điều khiển Edit Bạn thêm điều khiển ActiveX Web Browser vào ứng dụng cách chọn Project -> Add to Project -> Components And Controls, chọn thư mục Registered ActiveX Controls điều khiển Microsoft Web Browser Cài biến cho điều khiển: Variable name : m_wordmean; - Listbox, dùng để danh sách từ Cài biến cho điều khiển: Variable name: m_wordlist; Category: Control; - Listbox, dùng để lưu trữ liệu từ Cài biến cho điều khiển: Variable name: m_worddata, Category:Control; Giao diện chương trình sau: Mã chương trình: - Nạp liệu vào list box: bạn đặt phần mã kiện WM_OnInitDialog() để liệu nạp từ lúc khởi động chương trình Ở đây, bạn thay tên file index tên file tương ứng với từ điển bạn sử dụng: FILE *inFile; inFile = fopen ("mydic.index","r"); if (inFile == NULL) { MessageBox ("Cannot open index file"); } else { char * line; char lineBuf[100]; line = (char *) lineBuf; m_wordlist.ResetContent(); m_worddata.ResetContent(); CString word = ""; CString sWord = ""; CString sData = ""; while (!feof(inFile)) { fgets(line,99,inFile); if (strlen(line)>=2) { word = line; int pos = word.Find("\t",0); sWord = word.Left(pos); sData = word.Mid(pos+1,word.GetLength()-pos-1); if (sData.Find("\n",0) > 0){ sData = sData.Left(sData.GetLength()-1); } if (sWord.GetLength()>=1) { m_wordlist.AddString(sWord); m_worddata.AddString(sData); } } } } fclose(inFile); - Hàm chuyển từ mã số 64 sang số 10: int GetDemicalValue (CString str) { CString base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; int decValue = 0; int len = str.GetLength(); for (int i = 0; i=64) dwRead = f.Read(buff,64); else dwRead = f.Read(buff,iLength); iLength -= dwRead; CString stemp = buff; stemp = stemp.Left(dwRead); meaning += stemp; }while (iLength>0); f.Close(); } meaning = ChangeStyle(meaning); CString strHtml(""); strHtml += "\n\n"; strHtml += "\n"; strHtml += "\n\n"; strHtml += meaning + "\n\n"; CFile f2; if (f2.Open("temp.htm",CFile::modeCreate | CFile::modeWrite) == FALSE){ MessageBox("Cannot write meaning file!","Error!"); return 0; } f2.Write(strHtml,strHtml.GetLength()); f2.Close(); return 1; } - Hiển thị nghĩa từ, bạn cài đoạn mã vào kiện DoubleClick điều khiển list box BOOL gm = GetMeaning(); if (gm) { m_wordlist.GetText(m_wordlist.GetCurSel(),m_word); UpdateData(FALSE); // Lay duong dan cua thu muc hien thoi DWORD cchCurDir; LPTSTR lpszCurDir; TCHAR buffer[MAX_PATH]; lpszCurDir = buffer; GetCurrentDirectory(cchCurDir, lpszCurDir); CString str = lpszCurDir; str = "file://"+str+"\\temp.htm"; //Hien thi nghia cua tu m_wordmean.Navigate(str,NULL,NULL,NULL,NULL); } else { MessageBox("Can't get the meaning of the word"); } - Tìm kiếm từ list box tương ứng với thay đổi từ nhập điều khiển Edit Bạn cài đặt phần mã vào kiển EN_CHANGE điều khiển Edit Như bạn đánh ký từ vào điều khiển Edit, chương trình tự động tìm từ gần giống danh sách từ UpdateData(TRUE); m_wordlist.SelectString(-1,m_word); Sau xây dựng thành công, chương trình chạy có giao diện sau Như đây, tơi trình bầy giúp bạn cách thức xây dựng ứng dụng từ điển đơn giản Với sáng tạo kiến thức có, bạn hồn tồn bổ xung khả cho ứng dụng từ điển để khơng thua so với Click and See hay MTD Ngoài ra, với format từ điển đơn giản này, bạn dễ dàng xây dựng thêm ứng dụng để tạo từ điển cách tự động Tôi xin giới thiệu cho bạn số địa phần mềm có sử dụng từ điển theo chuẩn www.dict.org để bạn tham khảo thêm: - Trang Web bạn Hồ Ngọc Đức Địa chỉ: http://www.informatik.uni-leipzig.de/~duc/Dict/ Tại bạn tra từ điển trực tuyến Hoặc download ứng dụng viết java file từ điển máy để chạy trực tiếp máy - PowerClick: Địa chỉ:http://www.ttdomain.net/ttdownload Phần mềm giới thiệu PCWorldVN 7-2004, có khả tra theo kiểu Click And See số ứng dụng - E-lexikon: Địa chỉ: http://www.edusoft.com.vn Phần mềm giới thiệu PCWorldVN 7-2004, chạy theo mô hình Client - Server - MultiDictionary: Địa chỉ: http://huybien.vze.com/ Ứng dùng đa từ điển, giao diện đẹp, có khả phát âm thức tiếng Anh, Nga, Pháp, Đức Chúc bạn thành cơng hài lịng với ứng dụng từ điển Trần Bình An Tự Động Hố - K46 Đại Học Bách Khoa Hà Nội ... thuật tốn làm từ điển He he, q trình tìm thuật tốn làm từ điển nan giải Đầu tiên làm từ điển dos, dùng nhị phân , thuật toán từ điển nhanh hầu hết sinh viên năm đầu cntt làm từ điển theo hướng (chắc... , sang web khác, phải nhập lại từ trước Đó lý người dùng nhập từ vào từ điển online mà cần phải có từ điển liệu mở SPDict Một số từ điển loại Từ điển offline từ điển chạy máy mà không cần kết... dựng cho ứng dụng từ điển riêng Tơi hướng dẫn bạn làm ứng dụng từ điển cho mình, chắn bạn tận hưởng cảm giác vui sướng sử dụng từ điển làm I Cơ sở liệu: Phần quan trọng ứng dụng từ điển khả hoạt