2

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

4

3 回答 3

5

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

霍夫曼编码

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

LZW 压缩

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

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

于 2013-11-19T06:54:00.593 回答
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
建模_win1251.txt 156091 50227 42906 36254
建模_utf16.txt 312184 52523 50311 38497
建模_utf8.txt 238883 53793 44231 37681
建模_bocu.txt 165313 53073 44624 38768
建模_scsu.txt 156261 50499 42984 36485

它表明更长的输入并不一定意味着更好的整体压缩,SCSU 虽然有用,但并不是 unicode 文本的最佳表示(win1251 代码页也是其中之一)。

于 2013-11-19T08:32:27.350 回答
1

PAQ是文本压缩的新卫冕冠军...有几种不同的风格,有关它们的信息可以在这里找到。

我推荐三种口味:

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

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

一旦你有了一个易于使用的功能二进制文件,就可以在此处找到文档。

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

于 2018-08-15T20:44:57.887 回答