【问题标题】:Huge Compression Difference in RAR archive and Gzip: Is there anything that I am missing?RAR 存档和 Gzip 的巨大压缩差异:有什么我遗漏的吗?
【发布时间】:2012-06-08 03:37:23
【问题描述】:

我有一个大小约为 500MB 的巨大文本文件。我尝试使用 Gzip 从 python 程序和命令行对其进行存档。但是,在这两种情况下,归档文件的大小约为 240MB,而在 Windows 中使用 WinRAR 归档时,归档文件的大小约为 450KB。我在这里缺少什么吗?为什么有这么大的差异,我能做些什么来达到类似的压缩水平?

我也用 Python 标记了它,因为任何与此相关的 Python 代码都会非常有帮助。

这是file的前3行:

$ head 100.txt -n 3
31731610:22783120;
22783120:
45476057:39683372;5879272;54702019;58780534;30705698;60087296;98422023;55173626;5607459;843581;11846946;97676518;46819398;60044103;48496022;35228829;6594795;43867901;66416757;81235384;42557439;40435884;60586505;65993069;76377254;82877796;94397118;39141041;2725176;56097923;4290013;26546278;18501064;27470542;60289066;43986553;67745714;16358528;63833235;92738288;77291467;54053846;93392935;10376621;15432256;96550938;25648200;10411060;3053129;54530514;97316324;

【问题讨论】:

  • 这完全取决于使用的算法以及文件中的数据。
  • 不同的算法,不同的黄油区。很明显,你点击了 WinRAR。
  • @CodeCaster 是的,我知道,文本文件主要由数字和':'组成。我只是想知道是否有可能实现与 WinRAR 和 Gzip 的输出大小差异很大的相同级别的归档。
  • 我们可以查看文件吗?将 .rar 放入公共保管箱或其他东西 - 我很好奇。我想知道 gzip 是否不能很好地处理随机文本,它使用反向引用进行模式匹配,但也许你的文件是独一无二的,因为没有太多的引用。
  • @Tass:我从我的文件中添加了几行。如果您愿意,可以从这里下载文件:link

标签: python compression gzip archive winrar


【解决方案1】:

文件可能高度冗余,重复模式大于 32K。 gzip 的 deflate 只查找 32K 的匹配项,而其他的可以利用更早的历史。

更新:

我刚刚制作了一个 64K 的随机数据块文件,重复了 4096 次 (256 MB)。 gzip(带有 32K 窗口)对冗余视而不见,因此无法对其进行压缩。 gzip 将其扩展为 256.04 MB。 xz(具有 8 MB 窗口的 LZMA)将其压缩为 102 KB。

【讨论】:

  • 那么,我希望在 python 3.3 中使用 LZMA 模块实现这种级别的压缩?
  • 我希望如此。如果没有达到您的预期,您可以尝试将预设参数调整为 6 以上。
【解决方案2】:

WinRAR 和 Gzip 是两个截然不同的压缩程序。它们各自使用不同的算法来压缩数据。以下是维基百科对每种类型的描述:

RAR 第 3 版基于 Lempel-Ziv (LZSS) 和通过部分匹配 (PPM) 压缩进行预测,特别是 Dmitry Shkarin 的 PPMII 的 PPMd 实现。

http://en.wikipedia.org/wiki/RAR#Compression_algorithm

和 Gzip:

它基于 DEFLATE 算法,是 Lempel-Ziv (LZ77) 和 Huffman 编码的组合。

en.wikipedia.org/wiki/Gzip

我的猜测是部分匹配预测和霍夫曼编码的工作方式之间存在某种差异。不过那个文件有非常有趣的属性……这个文件是什么?

【讨论】:

  • 我已经从我的文件中添加了前 3 行,因为您可以看到它大部分是数字、冒号和分号。
  • @NilanjanBasu 好吧,我刚刚尝试使用另一个存档器 7zip,我得到了 215KB ......我停止了 Gzip,因为它在前 30 秒后已经达到了几 MB。非常不寻常... 7zip 使用了许多算法,LZMA、LZMA2、Bzip2、PPMd 和 DEFLATE。看起来部分匹配的预测可能是关键,因为 WinRar 和 7zip 都有它......
  • 在标准设置下,我用 xz 得到 171k。我认为这个文件有点病态,因为每一行看起来很像前一个的截断/移位版本。我认为这对 PPM 非常有利,而对其他任何事情都非常不利。
猜你喜欢
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 2011-05-13
  • 2011-02-05
  • 2010-10-12
  • 1970-01-01
相关资源
最近更新 更多