文本压缩算法

3
我想知道是否有人能介绍一种算法,将Unicode文本压缩至其原始大小的10-20%?我已经阅读了Lempel-Ziv压缩算法,可以将文本大小减小到原始大小的60%,但我听说还有一些具备这种性能的算法。
3个回答

6
如果您只考虑文本压缩,那么第一个使用基于熵的加密的算法是霍夫曼编码。 Huffman Coding 然后是LZW压缩,它使用字典编码来使用先前使用的字母序列分配代码以减小文件大小。 LZW compression 我认为上述两种方法足以高效地对文本数据进行编码,并且易于实现。
注意:不要期望所有文件都能获得良好的压缩效果,如果数据是随机的且没有模式,则没有任何压缩算法可以给您提供任何压缩。压缩百分比不仅取决于使用的算法,还取决于文件中出现的符号。

请问使用这些压缩方法平均可以减少原始文本文件大小的百分之多少? - undefined
哈夫曼编码平均压缩率可达0.5,而LZW在处理书面语文本时平均压缩率可达1/5。 - undefined

3
LZ-like程序员并不适合文本压缩。对于直接使用Unicode的最佳算法是lzma,因为它具有位置对齐选项。(http://www.7-zip.org/sdk.html)但是为了获得最佳压缩效果,建议将Unicode文本转换为字节格式,例如utf8,然后使用已知在文本上具有良好结果的算法,例如BWT(http://libbsc.com)或PPMd(http://compression.ru/ds/ppmdj1.rar)。也可以应用一些预处理来提高文本压缩的效果(请参见http://xwrt.sourceforge.net/)。还有一些比建议的算法比率更高的压缩器(主要是paq派生版本),但它们也慢得多。这里我测试了俄语翻译Witten的“Modeling for text compression”的各种表示形式:

实际上,将其转换为http://www.unicode.org/faq/compression.html中描述的字节表示形式,而不是UTF-8。该文档还建议对较大的Unicode文本使用Burrows-Wheeler压缩算法。 - undefined

2

PAQ 是文本压缩的新冠军...有几种不同的版本,您可以在这里找到相关信息。

我推荐三种版本:

  • ZPAQ - 面向未来的 PAQ 算法容器(旨在使 PAQ 的未来更加轻松)
  • PAQ8PX/PAQ8KX - 最强大的版本,也适用于 EXE 和 WAV 文件。
  • PAQ8PF - 更快(压缩和解压缩),主要用于 TXT 文件。

您需要从源代码自己构建它们,幸运的是有人制作了一个GUI FrontPAQ,将两个最好的二进制文件打包成一个。

一旦您拥有了一个功能强大的二进制文件,使用起来很简单,文档可以在这里找到。

注意:我知道这是一个非常古老的问题,但我希望包含相关的现代数据。我寻找同样的问题,但找到了一个更新更强大的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接