- Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
- Tìm kiếm trước khi đặt câu hỏi
Dự án nén dữ liệu.
Điều hành viên: Điều hành
- truongphu
- VIP
- Bài viết: 4756
- Ngày tham gia: CN 04/11/2007 10:57 am
- Đến từ: Cam Đức, Khánh hòa
- Has thanked: 14 time
- Been thanked: 510 time
Dự án nén dữ liệu.
LNĐ: Hôm nay mất toi một ngày tham dự hội thảo giới thiệu thuốc mới, chả nhớ gì ngoài cái đầu "lắc lư"!
Tuy nhiên còn đỡ, chưa gục! bèn mở truyện xem tiếp...
Rất ngạc nhiên khi file nén quá nhỏ!: "Chúng nó" nén sao mà hay thế? chỉ còn hơn 200KB trong khi bộ truyện chuẩn pdf cũng non chục MB! Bèn có ý tưởng...
Dự án nén dữ liệu: làm để nâng cao nhận thức (học hỏi). Các trình nén thông dụng hiện quá tốt.
Biết đâu trên thực hành lý thuyết "sơ sài", sẽ nẩy sinh nhân tài cntt?
1- Công cụ: - Scripting.Dictionary để ghi nhận từ mới; hoặc một công cụ tương đương thuộc VB6.
- Word.Application để di chuyển từng từ (hay nhóm từ); hoặc một công cụ (function) tương đương thuộc VB6.
Ghi chú: dùng object có lẽ chậm nhiều so với VB6.
2- Thao tác: Duyệt từng từ (word, not char) từ đầu đến cuối file.
- Nếu chưa có trong Dictionary thì: a- Add vào Dictionary, b- giữ nguyên từ.
- Nếu đã có trong Dictionary: thay thế với một ký tự unicode > 7999 (unicode tiếng Việt chưa đến số nầy).
3- Ý tưởng dùng Dictionary vì có Dictionary.Exist("từ") rất hay; biết ngay từ nào đã đọc qua. Tuy nhiên như đã nói: có lẽ chậm..
4- Giải nén: vì ta đã quy định ký tự thay thế nên không cần chìa khóa (tự điển) đi kèm file.
- Duyệt từng từ (word, not char) từ đầu đến cuối file nén.
- Nếu chưa có trong Dictionary thì: a- Add vào Dictionary, b- giữ nguyên từ.
- Nếu gặp một ký tự có AscW > 7999, tiến hành thay thế phục hồi từ đã có trong Dictionary theo tính toán từ AscW.
Nếu được nhiều bạn ủng hộ ý tưởng nầy, gởi code sơ bộ; tôi sẽ phụ trách các code VBS và VBA. Tuy nhiên mong code thuần VB6 hơn vì qua thực tiễn thấy chạy nhanh quá!
(vd: Dùng ReadFile API đọc một file text 15 MB mất chưa đến 1 giây!)
Chúc chủ nhật vui vẻ.
Tuy nhiên còn đỡ, chưa gục! bèn mở truyện xem tiếp...
Rất ngạc nhiên khi file nén quá nhỏ!: "Chúng nó" nén sao mà hay thế? chỉ còn hơn 200KB trong khi bộ truyện chuẩn pdf cũng non chục MB! Bèn có ý tưởng...
Dự án nén dữ liệu: làm để nâng cao nhận thức (học hỏi). Các trình nén thông dụng hiện quá tốt.
Biết đâu trên thực hành lý thuyết "sơ sài", sẽ nẩy sinh nhân tài cntt?
1- Công cụ: - Scripting.Dictionary để ghi nhận từ mới; hoặc một công cụ tương đương thuộc VB6.
- Word.Application để di chuyển từng từ (hay nhóm từ); hoặc một công cụ (function) tương đương thuộc VB6.
Ghi chú: dùng object có lẽ chậm nhiều so với VB6.
2- Thao tác: Duyệt từng từ (word, not char) từ đầu đến cuối file.
- Nếu chưa có trong Dictionary thì: a- Add vào Dictionary, b- giữ nguyên từ.
- Nếu đã có trong Dictionary: thay thế với một ký tự unicode > 7999 (unicode tiếng Việt chưa đến số nầy).
3- Ý tưởng dùng Dictionary vì có Dictionary.Exist("từ") rất hay; biết ngay từ nào đã đọc qua. Tuy nhiên như đã nói: có lẽ chậm..
4- Giải nén: vì ta đã quy định ký tự thay thế nên không cần chìa khóa (tự điển) đi kèm file.
- Duyệt từng từ (word, not char) từ đầu đến cuối file nén.
- Nếu chưa có trong Dictionary thì: a- Add vào Dictionary, b- giữ nguyên từ.
- Nếu gặp một ký tự có AscW > 7999, tiến hành thay thế phục hồi từ đã có trong Dictionary theo tính toán từ AscW.
Nếu được nhiều bạn ủng hộ ý tưởng nầy, gởi code sơ bộ; tôi sẽ phụ trách các code VBS và VBA. Tuy nhiên mong code thuần VB6 hơn vì qua thực tiễn thấy chạy nhanh quá!
(vd: Dùng ReadFile API đọc một file text 15 MB mất chưa đến 1 giây!)
Chúc chủ nhật vui vẻ.
- bangnhatquang68
- Guru
- Bài viết: 791
- Ngày tham gia: T.Ba 26/01/2010 12:44 pm
- Đến từ: Vĩ tuyến 17
- Has thanked: 20 time
- Been thanked: 37 time
- Liên hệ:
Re: Dự án nén dữ liệu.
Cái này của bác phú thấy rất hay nhưng hình như file nén của bác là nén 1 file thì phải. nén 1 file liệu có cần thiết chăng? nén thường nén vài file trong folder luôn. nén 1 file thì chẳng để làm gì.
Cho chảu hỏi bác cái này với!
trong file docx là một file nén. ta chưa quan tâm nó nén được bao nhiêu dung lượng. vấn đề của cháu là nó nén như thế nào? Khi giải nén thì file docx như 1 folder mà trong đó là tùm lum file con. Vậy làm sao nén được như vậy.
không lẽ dùng:
http://www.c-sharpcorner.com/uploadfile ... zipstream/

Cho chảu hỏi bác cái này với!
trong file docx là một file nén. ta chưa quan tâm nó nén được bao nhiêu dung lượng. vấn đề của cháu là nó nén như thế nào? Khi giải nén thì file docx như 1 folder mà trong đó là tùm lum file con. Vậy làm sao nén được như vậy.
không lẽ dùng:
http://www.c-sharpcorner.com/uploadfile ... zipstream/
Mời anh em lên facebook giao lưu nào!
http://www.facebook.com/groups/145823032176611/
http://www.facebook.com/groups/145823032176611/
- truongphu
- VIP
- Bài viết: 4756
- Ngày tham gia: CN 04/11/2007 10:57 am
- Đến từ: Cam Đức, Khánh hòa
- Has thanked: 14 time
- Been thanked: 510 time
Re: Dự án nén dữ liệu.
bangnhatquang68 đã viết:Cái này của bác phú thấy rất hay nhưng hình như file nén của bác là nén 1 file thì phải. nén 1 file liệu có cần thiết chăng?
* Tôi mới đưa ra ý tưởng, hy vọng chúng ta cùng thảo luận nếu đề tài thiết thực.
* Nén file để lưu trữ như ZIP, RAR, CAB.... cũng hoạt động như tôi nêu trên, nén từng file một trong folder...
* Nén file liệu có cần thiết? Nếu dùng dữ liệu trên desktop thì chả cần. Tuy nhiên khi chạy trên di động thì file nén càng nhỏ càng tốt. Vì thế nên các soft ebook đều nén file...
bangnhatquang68 đã viết:1 folder mà trong đó là tùm lum file con. Vậy làm sao nén được như vậy.
Đã trình bày trên. Tôi hy vọng sẽ có bạn đưa ra một thuật toán xuất sắc để nén file: tỉ lệ nén cao, thời gian thao tác nhanh. Ở trên tôi đưa ra và mô tả ý tưởng, dùng dictionary và word.app nên chậm và dở.
- dazzlingvit
- Guru
- Bài viết: 960
- Ngày tham gia: T.Ba 18/01/2011 10:21 am
- Đến từ: Sinh ra từ hư vô, sống trong thế giới ảo...
- Has thanked: 7 time
- Been thanked: 112 time
- Liên hệ:
Re: Dự án nén dữ liệu.
Mấy chương trình từ điển cho điện thoại họ thường dùng kỹ thuật nén dictzip, tương thích với gzip nhưng có thêm một bảng tra cứu để "gần như" có thể nhập xuất ngẫu nhiên. Có thể tham khảo dictzip và nâng cấp nó lên 

- bangnhatquang68
- Guru
- Bài viết: 791
- Ngày tham gia: T.Ba 26/01/2010 12:44 pm
- Đến từ: Vĩ tuyến 17
- Has thanked: 20 time
- Been thanked: 37 time
- Liên hệ:
Re: Dự án nén dữ liệu.
dazzlingvit đã viết:tương thích với gzip
các bạn tham khảo nè
http://msdn.microsoft.com/en-us/library/ms404280.aspx
http://www.codeproject.com/KB/files/GZipStream.aspx
Gzip nén file và folder thì dotnet có mì ăn liền rồi
nhưng còn làm "Made in tự mình"
Thì có lẽ nên nghĩ thuật toán, nén được file thì nén được files

Mời anh em lên facebook giao lưu nào!
http://www.facebook.com/groups/145823032176611/
http://www.facebook.com/groups/145823032176611/
- bangnhatquang68
- Guru
- Bài viết: 791
- Ngày tham gia: T.Ba 26/01/2010 12:44 pm
- Đến từ: Vĩ tuyến 17
- Has thanked: 20 time
- Been thanked: 37 time
- Liên hệ:
Re: Dự án nén dữ liệu.
Theo ngu ý của cháu thì đọc file thành mảng byte()
000 111 222 354 542 .....
dùng thuật toán mã hóa, mã hóa thành đơn giản hơn, như MD5 mã hóa chuỗi thành chuỗi nhỏ hơn.
Những file có thể đọc thành mảng byte mà.
Khi cháu đọc nó thành mảng byte() convert thành mảng string(), dấu được file bất kì trong file txt. Nhưng dung lượng cao hơn.
( Hiển nhiên rồi). Cháu cũng đang nghĩ cách nào mã hóa chuỗi to về chuỗi nhỏ và giải nén lại thôi 
viewtopic.php?f=17&t=20852&p=115508#p115508
000 111 222 354 542 .....
dùng thuật toán mã hóa, mã hóa thành đơn giản hơn, như MD5 mã hóa chuỗi thành chuỗi nhỏ hơn.
Những file có thể đọc thành mảng byte mà.
Khi cháu đọc nó thành mảng byte() convert thành mảng string(), dấu được file bất kì trong file txt. Nhưng dung lượng cao hơn.


viewtopic.php?f=17&t=20852&p=115508#p115508
Mời anh em lên facebook giao lưu nào!
http://www.facebook.com/groups/145823032176611/
http://www.facebook.com/groups/145823032176611/
- dazzlingvit
- Guru
- Bài viết: 960
- Ngày tham gia: T.Ba 18/01/2011 10:21 am
- Đến từ: Sinh ra từ hư vô, sống trong thế giới ảo...
- Has thanked: 7 time
- Been thanked: 112 time
- Liên hệ:
Re: Dự án nén dữ liệu.
bangnhatquang68 đã viết:dazzlingvit đã viết:tương thích với gzip
các bạn tham khảo nè
http://msdn.microsoft.com/en-us/library/ms404280.aspx
http://www.codeproject.com/KB/files/GZipStream.aspx
Gzip nén file và folder thì dotnet có mì ăn liền rồi
nhưng còn làm "Made in tự mình"
Thì có lẽ nên nghĩ thuật toán, nén được file thì nén được files
Tương thích ở đây ý nói là các chương trình giải nén bình thường hỗ trợ gzip thì giải nén được. Nhưng nếu chương trình của mình muốn tận dụng ưu thế của dictzip thì phải nhập/xuất thủ công. Cái này bắt chước mã nguồn của dictzip (viết bằng C/C++) được mà

- bangnhatquang68
- Guru
- Bài viết: 791
- Ngày tham gia: T.Ba 26/01/2010 12:44 pm
- Đến từ: Vĩ tuyến 17
- Has thanked: 20 time
- Been thanked: 37 time
- Liên hệ:
Re: Dự án nén dữ liệu.
http://vi.wikipedia.org/wiki/M%C3%A3_h%C3%B3a_Huffman
Nén file bằng mã Huffman
Trong các bước trên, giả sử đã xây dựng được bộ mã Huffman của 256 ký hiệu có mã ASCII từ 0 đến 255 chứa trong mảng Code[1..256]. Việc nén file có thể phân tích sơ bộ như sau:
Đọc từng byte của file cần nén cho đến khi hết tệp,
Chuyển theo bộ mã thành xâu nhị phân,
Ghép với xâu nhị phân còn dư từ bước trước,
Nếu có đủ 8 bit trong xâu thì cắt ra tám bít đầu tiên ghi vào tệp nén,
Nếu đã hết tệp cần nén thì dừng.
Nén file bằng mã Huffman
Trong các bước trên, giả sử đã xây dựng được bộ mã Huffman của 256 ký hiệu có mã ASCII từ 0 đến 255 chứa trong mảng Code[1..256]. Việc nén file có thể phân tích sơ bộ như sau:
Đọc từng byte của file cần nén cho đến khi hết tệp,
Chuyển theo bộ mã thành xâu nhị phân,
Ghép với xâu nhị phân còn dư từ bước trước,
Nếu có đủ 8 bit trong xâu thì cắt ra tám bít đầu tiên ghi vào tệp nén,
Nếu đã hết tệp cần nén thì dừng.
Mời anh em lên facebook giao lưu nào!
http://www.facebook.com/groups/145823032176611/
http://www.facebook.com/groups/145823032176611/
- bangnhatquang68
- Guru
- Bài viết: 791
- Ngày tham gia: T.Ba 26/01/2010 12:44 pm
- Đến từ: Vĩ tuyến 17
- Has thanked: 20 time
- Been thanked: 37 time
- Liên hệ:
Re: Dự án nén dữ liệu.
Chà vụ nén này, ít ngừoi quan tâm nhỉ?
http://vietbao.vn/Vi-tinh-Vien-thong/Du ... 27964/217/
Nén file thì được rồi, thế làm sao nén được folder nhỉ?
http://vietbao.vn/Vi-tinh-Vien-thong/Du ... 27964/217/
Nén file thì được rồi, thế làm sao nén được folder nhỉ?

Mời anh em lên facebook giao lưu nào!
http://www.facebook.com/groups/145823032176611/
http://www.facebook.com/groups/145823032176611/
-
- Bài viết: 1
- Ngày tham gia: T.Sáu 03/02/2012 1:36 pm
Re: Dự án nén dữ liệu.
Mình có 1 số góp ý phát triển nén văn bản.
bạn ơi cho mình hỏi vậy nó có nén 2 từ trở lên không?
(tạm gọi là nén cả câu, mặc dù với 2 - 3 lần nén liên tục ta vẫn đc kết quả như vậy như tốn 2 -3 lần xét đi xét lại)
ví dụ trong văn bản là: "không thể, tất nhiên là không thể rồi?"
==> "#1, tất nhiên là #1 rồi?" (với #1: không thể)...
thuật toán có mở rộng tới thế này không nhỉ:
(tạm gọi là tìm kiếm và nén dữ liệu tương đồng)
"anh yêu em, anh rất yêu em" ==> "#1, #1-2-5"
(với #1: anh yêu em, #2 là rất, -5 có nghĩa là sẽ thêm vào kiểu insert #1 là #2)...
sau khi nén ở dạng từ điển xong có khi sẽ được là: "#1 #3 #2 #4 #5 #7 #6"
nếu xét dạng cấu trúc thì sẽ có dạng "lên xuống1 #4 lên xuống2"
"lên xuống 1" và "lên xuống 2" có hình dạng như nhau nhưng cao độ khác nhau ==> mình nghĩ bạn sẽ hiểu ý mình
đối với việc nén dữ liệu văn bản cần xét đến trường hợp nếu có ảnh.
Cần chia thành 2 bộ mã riêng biệt là nén chữ và nén hình. Nén chữ thì ta đã đạt được. :")
Còn việc nén cả folder thì mình nghĩ nên áp dụng đệ quy như sau:
add folder cần nén vào list folder
cổng 1:
nếu list folder = trống thì thoát
mở folder đầu của list
add các folder con trong đó vào folder list
add các file con trong đó vào file list
xóa folder đầu mới mở
quay lại cổng 1
thế là toàn bộ file bạn đã có trong tay.(lưu ý: add folder ở đây là add đường dẫn của nó)
bạn ơi cho mình hỏi vậy nó có nén 2 từ trở lên không?
(tạm gọi là nén cả câu, mặc dù với 2 - 3 lần nén liên tục ta vẫn đc kết quả như vậy như tốn 2 -3 lần xét đi xét lại)
ví dụ trong văn bản là: "không thể, tất nhiên là không thể rồi?"
==> "#1, tất nhiên là #1 rồi?" (với #1: không thể)...
thuật toán có mở rộng tới thế này không nhỉ:
(tạm gọi là tìm kiếm và nén dữ liệu tương đồng)
"anh yêu em, anh rất yêu em" ==> "#1, #1-2-5"
(với #1: anh yêu em, #2 là rất, -5 có nghĩa là sẽ thêm vào kiểu insert #1 là #2)...
sau khi nén ở dạng từ điển xong có khi sẽ được là: "#1 #3 #2 #4 #5 #7 #6"
nếu xét dạng cấu trúc thì sẽ có dạng "lên xuống1 #4 lên xuống2"
"lên xuống 1" và "lên xuống 2" có hình dạng như nhau nhưng cao độ khác nhau ==> mình nghĩ bạn sẽ hiểu ý mình
đối với việc nén dữ liệu văn bản cần xét đến trường hợp nếu có ảnh.
Cần chia thành 2 bộ mã riêng biệt là nén chữ và nén hình. Nén chữ thì ta đã đạt được. :")
Còn việc nén cả folder thì mình nghĩ nên áp dụng đệ quy như sau:
add folder cần nén vào list folder
cổng 1:
nếu list folder = trống thì thoát
mở folder đầu của list
add các folder con trong đó vào folder list
add các file con trong đó vào file list
xóa folder đầu mới mở
quay lại cổng 1
thế là toàn bộ file bạn đã có trong tay.(lưu ý: add folder ở đây là add đường dẫn của nó)
Re: Dự án nén dữ liệu.
nếu nén cả câu như bạn trông có vẻ là tiện hơn , nhưng thực ra lại cần lưu vào 1 biến sao cho có thể chứa được #1 ( như vd của bạn ) là lớn nhất , chưa nói đến các vấn đề sau
- andylam1992
- Thành viên danh dự
- Bài viết: 380
- Ngày tham gia: T.Hai 06/04/2009 12:57 pm
- Đến từ: TP.HCM Q5
- Has thanked: 2 time
- Been thanked: 4 time
- Liên hệ:
Re: Dự án nén dữ liệu.
nén huffman ko khả thi, nó luôn phải kèm theo bảng mã hóa(mỗi file khác nhau có mỗi bảng khác nhau), cho nên như thế sẽ làm cho file nén dư thừa do là ko có 1 bảng mã hóa chung, người dùng thà cài chuơng trình nặng chứ không thích file nén nặng.
lúc trước ông thầy có nói đùa là quả bong bóng, khi ko thổi thì nó nén lại, khi thổi lên thì nó phồng to ra gấp 10 lần cũng có. Tuy là cái này là nén về mặt thể tích, nhưng bik đâu sau này công nghệ phát triển thì những dữ liệu số hóa cũng có thể xếp chồng lên nhau thì sao(1 byte có thể ghi dc 2 số)
lúc trước ông thầy có nói đùa là quả bong bóng, khi ko thổi thì nó nén lại, khi thổi lên thì nó phồng to ra gấp 10 lần cũng có. Tuy là cái này là nén về mặt thể tích, nhưng bik đâu sau này công nghệ phát triển thì những dữ liệu số hóa cũng có thể xếp chồng lên nhau thì sao(1 byte có thể ghi dc 2 số)
不相信未作牺牲竟先可拥有
只相信是靠双手找到我欲求
Cần - Kiệm- Liêm(liêm kiết) - Nghĩa - Chí - Tín
Đang trực tuyến
Đang xem chuyên mục này: Không có thành viên nào trực tuyến. và 1 khách