nén văn bản tiếng việt theo huffman

81 603 3
nén văn bản tiếng việt theo huffman

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

i Đ ẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CNTT & TRUYỀN THÔNG PH ẠM THU HƯỜNG NÉN VĂN B ẢN TIẾNG VIỆT THEO HUFFMAN LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH Thái Nguyên - 2013 ii Đ ẠI HỌC THÁI NGUYÊN TRƯ ỜN G Đ ẠI HỌC CNTT & TRUY ỀN THÔNG PH ẠM T HU HƯ ỜNG NÉN VĂN B ẢN TIẾNG VIỆT THEO HUFFMAN Chuyên ngành: Khoa h ọc máy tính Mã số: 60 48 01 LU ẬN V ĂN THẠC SĨ KHOA HỌC MÁY TÍNH Ngư ời hướng dẫn khoa học: PGS.TS Nguyễn Hữu Điển Thái Nguyên - 2013 iii L ỜI CẢM ƠN Đ ể đạt được kết quả ngày hôm nay l à m ột sự cố gắng, nỗ lực rất lớn của bản thân, c ũng như sự giúp đỡ nhiệt tình của quý thầy cô, bạn bè để tôi hoàn thành lu ận văn này. Tôi xin trân tr ọng cảm ơn: - PGS.TS Nguy ễn Hữu Điển – Giám đ ốc Trung tâm tính toán hiệu n ăng cao Trư ờng Đại học khoa học t ự nhiên Hà Nội. - Các th ầy cô trong hội đồng phản biện. Cu ối cùng tôi xin chân thành cảm ơn các thầy, cô, các b ạn đ ã đ ộng viên và giúp đ ỡ tôi trong thời gian làm luận văn. Xin trân tr ọng cám ơn quý thầy cô, các bạn!. iv DANH M ỤC CÁC HÌNH Hình 1. Quy trình nén d ữ liệu 3 Hình 2. Xây d ựng cây nhị phân từ bảng mã không ở dạng tiền tố 8 Hình 3. S ắp xếp danh sách các ký tự 20 Hình 4. Xây dựng cây Huffman 22 Hình 5. Cây Huffman đi ền đầy đủ thành phần 22 Hình 6. M ột tr ường hợp xây dựng khác 23 Hình 7. L ưu đồ giả i mã 24 Hình 8. Ý t ưởng xây dựng cây theo phương pháp Shannon – Fano 26 Hình 9. Xây d ựng cây theo phương pháo Shannon -Fano 27 Hinh 10. Mã hóa b ằng phương pháp Huffman đ ộng 31 Hình 11. Gi ải m ã b ằng phương pháp Huffman đ ộng 33 Hình 12. Quá trình thực hiện nén bằng LZ 43 Hình 13. S ơ đ ồ nén LZ 78 47 Hình 14. S ơ đ ồ giải nén LZ78 48 Hình 15. S ơ đồ nén LZW 51 Hình 16. S ơ đồ giải nén LZW 54 Hình 17. Phương pháp MTF ( t ốt ) 57 Hình 18. Phương pháp MTF ( x ấu) 57 Hình 19. Phương pháp BW t ìm chuỗi s au mã hóa 59 Hình 20. Hai cách tìm chu ỗi gốc 60 Hình 21. Giao di ện ch ương trình 62 v M ỤC LỤC L ỜI CẢM ƠN iii DANH M ỤC CÁC HÌNH iv M Ở ĐẦU 1 1. Đ ặt vấn đề 1 2. Đ ối tượng và phạm vi nghiên cứu 1 2.1. Đ ối tượng 1 2.2. Ph ạm vi 2 3. Hư ớng nghiên cứu của đề tài 2 4. Phương pháp nghiên c ứu 2 5. Ý ngh ĩa khoa học của luận văn 2 CHƯƠNG 1: T ỔNG QUAN VỀ CÔNG NGHỆ NÉN DỮ LIỆU 3 1.1. Sơ lư ợc về nén dữ liệu 3 1.1.1. Khái ni ệm về nén dữ liệu 3 1.1.2. Nh ững vấn đề phải giải quyết trong nén dữ liệu 4 1.1.3. Phân lo ại chương trình nén 5 1.1.4. Đánh giá ch ất lượng của chương trình nén 6 1.2. Mã nén d ữ liệu 7 1.2.1. Đ ịnh nghĩa mã hoá 7 1.2.2. Các khái ni ệm về ký tự mã hóa 8 1.2.3. Mã t ổng và mã phân tách 13 1.2.4. Định lý mã nén 18 CHƯƠNG 2. MỘT SỐ MÃ NÉN CƠ BẢN 21 2.1. Mã hóa Huffman (Huffman coding) 21 2.1.1. Phương pháp m ã hóa 21 2.1.2. Thu ật toán tạo mã Huffman 21 2.1.3. Gi ải mã thuật toán Huffman : 25 2.2. Mã hóa Huffman đ ộng ( Adaptive Huffman coding ) 31 2.2.1. Phương pháp m ã hóa: 31 2.2.2. Thu ật toán nén 31 2.2.3. Thu ật toán giải nén 33 2.3. Thu ật toán xử lý sự lặp lại của xâu (RLE) 36 vi 2.3.1. Phương pháp: 36 2.3.2. Thu ật toán tạo mã 36 2.3.3. Quá trình gi ải mã 36 2.4. Mã hóa ki ểu từ điển (Dictionary -based compression) 39 2.4.1. Nguyên lý LZ 39 2.4.2.T ừ điển 40 2.4.3. Quá trình th ực hiện khi nén bằng mã LZ 41 2.4.4. Các thu ật toán nén LZ 42 2.5. M ột số phương pháp biến đổi (transform) 54 2.5.1. Phương pháp đ ẩy về phía trước (Move to front): 54 2.5.2. Phương pháp Burrows – Wheeler (BW): 56 CHƯƠNG 3. XÂY D ỰNG CHƯƠNG TRÌNH NÉN TIẾNG VIỆT SỬ DỤNG PHƯƠNG PHÁP M Ã HÓA HUFFMAN 59 3.1. B ộ gõ Tiếng việt 59 3.2. Quy ư ớc biểu diễn ký tự tiếng Việt. 59 3.3. Chu ẩn dấ u Ti ếng việt 60 3.3.1. Unicode 60 3.3.2. TCVN3 60 3.3.3. VNI 60 3.4. Phương pháp m ã hóa Huffman 60 3.5. Gi ới thiệu chương trình 61 3.5.1. Hư ớng dẫn sử dụng 62 3.5.2. Kết quả kiểm thử chương trình 64 KẾT LUẬN 65 TÀI LIỆU THAM KHẢO 66 PH Ụ LỤC 67 1 M Ở ĐẦU 1. Đ ặt vấn đề Một trong nh ững chức n ăng chính c ủa máy tính là xử lý d ữ liệu và lưu trữ. Bên c ạn h vi ệc xử lý nhanh, ngư ời ta còn quan tâm đ ến việc lưu trữ được nhiều dữ liệu nhưng lại tiết kiệm được vùng nhớ và giảm chi phí lưu trữ . Về mặt lý thuyết thì các thi ết bị lưu trữ là không có giới hạn nhưng ngày nay do nhu cầu xử lý nhi ều tập tin, nhi ề u lo ại dữ liệu trong cùng một tệp do vậy mà kích th ước tệp trở nên khá lớn . Nh ững vấn đề trên nảy sinh ra khái niệm nén dữ liệu , nén dữ liệu là quá trình làm giảm lượng thông tin “dư thừa” trong dữ liệu gốc, do vậy lượng thông tin thu được sau nén thường nhỏ hơn dữ liệu gốc rất nhiều. Nén d ữ liệu là giải pháp hợp lý nh ất nh ằm mục đích giảm chi phí cho người sử dụng. Như chúng ta cũng đã biết tiếng Việt là một ngôn thuộc hệ thống chữ cái Latin sử dụng nhiều dấu đi kèm với nguyên âm. V ới bảng m ã ASCII 8 bit s ử dụng phổ biến trên máy tính, chúng ta có thể mã hóa 256 ký tự. Để đưa tiếng Việt vào máy tính, các ph ần mềm tiếng Việt hiện nay sử dụng một trong hai ph ương pháp m ã hóa : mã d ựng sẵn hoặc m ã t ổ hợp để xây dựng trang mã ký t ự tiếng Việt . Bảng mã phổ biến nhất chúng ta thường sử dụng là bảng mã Unicode để thể hiện tiếng Việt. Nhưng bảng mã Unicode yêu cầu 16 bit để thể hiện một ký tự điều này sẽ dẫn đến sự lãng phí và dư thừa dữ liệu. Vì v ậy, “ Nén văn bản tiếng Việt theo Huffman ” đư ợc em chọn làm lu ận văn tốt nghiệp của mình. 2. Đ ối tượng và phạm vi nghiên cứu 2.1. Đ ối t ượng − Các phần mềm nén dữ liệu; − Các thuật toán nén dữ liệu; − Các phương pháp mã hóa tiếng Việt; − H ệ thống phần mềm nén dữ liệu từ đó ứng dụng vào để nén dữ liệu cho tiếng Việt. 2 2.2. Ph ạm vi − Các khái ni ệm của ký tự mã hóa, các thuật toán của nén văn bản. Ki ến trúc, ch ức n ãng và các thành ph ần của nén dữ liệu c ụ thể cho bài toán nén văn b ản Ti ếng việt s ử dụng phương pháp mã hóa Huffman. − Các ch ức n ãng chính và quy trình th ực thi của bài toán nén dữ liệu; − H ệ thống ch ương trình cho bài toán nén dữ liệu; Vì th ời gian có hạn, trong khuôn khổ một luận văn t ốt nghi ệp cao học , vi ệc gi ải quyết bài toán nén dữ liệu ch ỉ giới hạn ở một vài thuật toán nén cổ điển. 3. Hư ớng nghiên cứu của đề tài − Tìm hi ểu tổng quan về nén dữ liệu và nghiên c ứu một thu ật toán nén c ụ thể − Tìm hi ểu bài toán nén dữ liệu, ti ến hành phân tích; − Thu th ập các số liệu có liên quan; − Phân tích, đánh giá thông qua các số liệu thu thập được; − Cài đ ặt thực nghiệm. 4. Phương pháp nghiên c ứu − Nghiên c ứu các tài liệu và viết tổng quan; − Phương pháp khảo sát thực tế; − Phương pháp phân tích và đánh giá các thuật toán; − Nghiên c ứu triển khai thu ật toán và th ử nghiệm hệ thống. 5. Ý ngh ĩa khoa học của lu ận v ăn − Bản thân hiểu sâu hơn và áp dụng được các thuật toán của nén dữ liệu vào thực tế; − Tri ển khai một s ố thuật toán nén dữ liệu qua đó ứng dụng chính là phương pháp mã hóa Huffman vào tiếng Việt; − Xây dựng đư ợc chương trình nén dữ liệu dành cho tiếng Việt trên máy tính. 3 CHƯƠNG 1: T ỔNG QUAN VỀ CÔNG NGHỆ NÉN DỮ LIỆU 1.1. Sơ lư ợc về nén dữ liệu 1.1.1. Khái ni ệm về nén dữ liệu Nén là m ột quá trình giảm lượng không gian cần thiết để biểu diễn cùng một lư ợng thông tin cho tr ước. Người ta còn gọi nén là biến đổi một luồng ký hiệu thành m ột luồng các từ mã. Quá trình nén nh ư sau: Hình 1. Quy trình nén dữ liệu Trong đó: - Văn b ản là văn bản ban đầu cần nén. - Mô hình là t ập hợp các chữ cái cùng quy tắc được sử dụng để xử lý các chữ cái vào và đưa ra các t ừ mã. Một mô hình sẽ xác định chính xác xác suất xu ất hiện của từng chữ cái và một bộ mã sẽ tạo ra các từ mã dựa trên xác suất đó. - Mã hoá là ch ỉ quá trình thay thế các chữ cái trong văn bản ban đầu bằng các từ mã t ương ứng để đưa ra bản mã chính xác. Như v ậy, quá trình nén diễn ra như sau: quá trình mô h ình c ăn cứ vào văn bản c ần nén sẽ tạo ra các từ mã. Sau đó, từ bộ từ mã vừa tạo được và văn bản ban đầu quá trình nén s ẽ đưa ra bản mã. Văn b ản Mô hình Mã hoá B ản mã 4 Mã hoá và mô hình là hai giai đoạn hoàn toàn khác nhau vì trong giai đoạn mô hình có r ất nhiều cách để xử lý các chữ cá i c ủa văn bản mà cùng sử dụng một phương pháp xây d ựng mã để cho ra các từ mã. Nếu bản mã có kích thước nhỏ hơn văn bản thì phương pháp nén đó có hiệu qu ả. Ví d ụ : Chúng ta s ử dụng cùng phương pháp mã Huffman cho hai mô hình khác nhau: - Mô hình 1: d ựa trên x ác su ất độc lập của từng chữ cái xuất hiện bất kì trong văn b ản. - Mô hình 2: c ần tính được xác suất phụ thuộc dựa trên những chữ cái nhận được lúc đó trong văn bản. Do mô hình khác nhau nên cùng s ử dụng mã Huffman để đưa ra từ mã nhưng hi ệu quả nén của chún g r ất khác nhau. Tuy nhiên, chúng ta v ẫn quen dùng từ mã hoá để chỉ cho cả quá trình nén văn b ản mặc dù đó chỉ là một giai đoạn của một quá trình nén. Ngư ời ta th ường mã hoá thông qua các từ mã của một bảng chữ cái nào đó. Có th ể có nhiều thuật toán nén dữ li ệu khác nhau. Mỗi thuật toán có một kiểu d ữ liệu nhất định và cùng một số modem có đặc điểm nén thích ứng có nghĩa là chúng có kh ả năng chọn thuật toán nén thích hợp phụ thuộc vào kiểu dữ liệu cần nén. Trong s ố các cách mã thì cách nào mã ngắn hơn chúng ta nói là nó nén t ốt hơn (so v ới cách mã khác). 1.1.2. Nh ững vấn đề phải giải quyết trong nén dữ liệu M ục tiêu của nén dữ liệu là đưa ra thuật toán để giảm thiểu sự l ãng phí t ừ nh ững phần giống nhau khi biểu diễn dữ liệu. Thông th ường một chương tr ình né n c ần quan tâm đến khả n ãng nó có th ể cẳt triết đ ược nhiều hay ít dung l ư ợng của dữ li ệu sau khi nén, điều này còn phụ thuộc vào thuật toán, và điều kiện đầu vào của dữ li ệu. Nh ư v ậy những dữ liệu đầu vào khác nhau có thể đòi hỏi những thuật toán khác nhau đ ể nhận diện nhậy nhất những chỗ tiêu sài l ãng phí b ộ nhớ. Cần nhận ra [...]... văn bản là các văn bả n khác nhau thì có các file nén khác nhau Bởi nếu không thì chúng ta không thể khôi phục lại văn bản nguồn Mọi văn bản không thể nén lại thành một file chỉ có 1 bít vì số lượng các file có một bít là 2 Một qui trình nén như vậy thì chỉ có thể dùng để né n hai văn bản mà thôi, đến văn bản thứ ba là nội dung file nén sẽ bị trùng lặp Vậy thì không thể nén một văn bản nhỏ tuỳ ý được... đầu tiên chứng minh được sự tồn tại một giới hạn nén cho mỗi văn bản Một văn bản thực ra thì chỉ có thể nén đến một giới hạn nhất định, giới hạn ấy chúng ta gọi là lượng tin của văn bản Lượng tin chỉ phụ thuộc vào bản thân văn bản chứ không phụ thuộc vào thuật toán nào Mọi thuật toán đều không thể nén một văn bản đến một file nhỏ hơn lượng tin mà văn bản có S au đây chúng ta sẽ làm quen với khái niệm... hơn Nén dữ liệu không phải là việc các dữ liệu bị ghi nén lại Bản chất của các thuật toán nén dữ liệu là ghi lại văn bản (mã hoá lại văn bản) ở dạng khác Khi đó xuất hiện hai câu hỏi: - Câu hỏi 1: Có thể nén một văn bản nhỏ đến bao nhiêu cũng được hay là có một giới hạn nào đó mà chúng ta không thể vượt qua được - Câu hỏi 2: Có hay không một thuật toán nén tốt nhất Điều kiện đầu tiên để nén được văn bản. .. các văn bản trong tập A thành các văn bản trong tập B Nếu tập B gồm các văn bản được tạo ra từ các bít 0/1 thì chúng ta gọi loại ánh xạ mã này là mã nhị phân Các văn bản trong tập B được gọi là bản mã, còn văn bản được ngầm hiểu là các văn bản trong tập A Trong các phần sau đây chúng ta chỉ sử dụng mã nhị phân 1.2.2 Các khái niệm về ký tự mã hóa 1.2.2.1 Bít trung bình Chúng ta thường dùng trình nén. .. dụng văn bản Văn bản nào hay được dùng hơn thì có xác suất xuất hiện lớn hơn, văn bản nào ít đ ược dùng hơn thì có xác suất xuất hiện nhỏ hơn Như vậy định nghĩa này bao hàm ý tưởng, để có thể nén được tốt hơn thì một văn bản cần phải được mã nén không phụ thuộc vào văn bản ấy dài hay ngắn mà là phụ thuộc theo xác suất mà người ta sử dụng nó Tuy nh iên có một thực tế là phần lớn các văn bản lưu trữ trong... một mã nén nhị phân có thể đạt được” cho dù mã được tạo ra theo cách nào đi chăng nữa 20 CHƯƠNG 2 MỘT SỐ MÃ NÉN CƠ BẢN 2.1 Mã hóa Huffman (Huffman coding) 2.1.1 Phương pháp mã hóa Mã hóa Huffman là phương pháp được áp dụng nhiều cho nén văn bản Đối với mỗi văn bản thường có đặc trưng riêng về tần suất xuất hiện các ký tự Thuật toán mã hóa Huffman đưa những ký tự được xuất hiện nhiều về dạng biểu diễn... mã nén Để đánh giá khả năng nén của một thuật toán chúng ta đưa ra khái niệm về số bít trung bình cần thiết để ghi lại một chữ cái của văn bản Định nghĩa 1.2.2.1 Bít trung bình Tỷ số giữa độ dài của bản mã chia ch o số các chữ cái của văn bản được gọi là bít trung bình cho một chữ cái của văn bản, hay còn gọi tắt là bít trung bình (hay bít trung bình cho từng chữ cái) Ký hiệu An là tập các văn bản. .. trên là mã Định nghĩa 1.2.1.2 Mã văn bản Bảng chữ cái là một tập hợp Σ = {a 1, a2, a3, , am} Mỗi phần tử a i của nó được gọi là chữ cái hay kí tự Nếu bảng chữ cái chỉ có hai chữ cái thì chúng ta gọi các chữ cái là bít và ký hiệu là 0/1 Văn bản là một dãy gồm các chữ cái của một bảng chữ cái Số lượng các chữ cái được gọi là độ dài của văn bản Cho A và B là các tập hợp văn bản Một song ánh f : f:A→B x... để nén các file, tức là các văn bản được tạo ra từ 256 byte Nén một file nhiều lần liên tiếp thì đến một lúc nào đó chúng ta cũng sẽ thu được một file mà trình nén này không thể thu nhỏ lại được nữa Bởi vì, nếu không chúng ta sẽ nén được file ấy xuống thành một file không có bít nào cả Từ đó, chúng ta có khẳng định: Với mọi thuật toán mã các file văn bản luôn tồn tại một văn bản mà nó không thể nén. ..  =  b¶n m· 1001010 + = 111000 1001010111000 Trong định nghĩa cho mã tổng ta đã sử dụng khái niệm “tổng của các văn bản Nếu bản mã của văn bản “a” là f(a), của văn bản b là f(b) thì bản mã của “ab” là “f(a)f(b)”, bản mã của “ba” là “f(b)f(a)” Xét mã tổng trên bảng chữ cái Σ = {a 1, a2, , am} Mỗi chữ cái a 1, a2, , am có từ mã tương ứng Từ mã của các chữ cái xác định ánh xạ f : Σ → M, . bảng mã Unicode để thể hiện tiếng Việt. Nhưng bảng mã Unicode yêu cầu 16 bit để thể hiện một ký tự điều này sẽ dẫn đến sự lãng phí và dư thừa dữ liệu. Vì v ậy, “ Nén văn bản tiếng Việt theo Huffman. HƯỜNG NÉN VĂN B ẢN TIẾNG VIỆT THEO HUFFMAN LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH Thái Nguyên - 2013 ii Đ ẠI HỌC THÁI NGUYÊN TRƯ ỜN G Đ ẠI HỌC CNTT & TRUY ỀN THÔNG PH ẠM T HU HƯ ỜNG NÉN VĂN B ẢN TIẾNG. D ỰNG CHƯƠNG TRÌNH NÉN TIẾNG VIỆT SỬ DỤNG PHƯƠNG PHÁP M Ã HÓA HUFFMAN 59 3.1. B ộ gõ Tiếng việt 59 3.2. Quy ư ớc biểu diễn ký tự tiếng Việt. 59 3.3. Chu ẩn dấ u Ti ếng việt 60 3.3.1. Unicode

Ngày đăng: 22/11/2014, 23:25

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan