文本压缩算法

时间:2013-11-19 06:15:55

标签: algorithm unicode compression text-compression

我只是想知道是否有人可以向我介绍任何将Unicode文本压缩到其原始大小的10-20%的算法? 实际上我已经阅读了Lempel-Ziv compression算法,它将文本大小减小到原始大小的60%,但我听说有一些算法具有这种性能

3 个答案:

答案 0 :(得分:4)

如果您只考虑文本压缩而不是第一个使用基于熵的加密称为Huffman编码的算法

Huffman Coding

然后有LZW压缩,它使用字典编码来使用以前使用的字母序列来分配代码以减小文件大小。

LZW compression

我认为上述两个版本足以有效地编码文本数据并且易于实现。

注意:不要期望所有文件都有良好的压缩效果,如果数据是随机的,没有模式,那么压缩算法根本不会给你任何压缩。压缩百分比取决于文件中出现的符号,而不仅仅取决于所使用的算法。

答案 1 :(得分:2)

类似LZ的编码器对文本压缩没有任何好处。 直接使用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的“文本压缩建模”:

                             7z    rar4  paq8px69
modeling_win1251.txt  156091 50227 42906 36254
modeling_utf16.txt    312184 52523 50311 38497
modeling_utf8.txt     238883 53793 44231 37681
modeling_bocu.txt     165313 53073 44624 38768
modeling_scsu.txt     156261 50499 42984 36485

它表明更长的输入并不一定意味着更好的整体压缩, SCSU尽管很有用,但并不是unicode文本的最佳代表 (win1251代码页也是一个。)

答案 2 :(得分:1)

PAQ是文本压缩的new reigning champion ...有几种不同的风格,有关它们的信息可以在here中找到。

我推荐三种口味:

  • ZPAQ-用于PAQ算法的面向未来的容器(创建目的是为了使PAQ的未来更容易)
  • PAQ8PX/PAQ8KX-功能最强大,也可以处理EXE和WAV文件。
  • PAQ8PF-更快(压缩和解压缩),并且主要用于TXT文件

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

一旦您有了功能简单的二进制文件,就可以在here中找到文档。

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