我想在内存中容纳长度小于20个字符的80M字符串,并尽可能少地使用内存。
我想要一个压缩库,我可以从Python驱动,这将允许我压缩短(<20个字符)的英文字符串。我有大约8000万的内存,我希望它们能放在尽可能少的内存中。
我想要最大程度的无损压缩。CPU时间不是瓶颈。
我不希望字典与每个字符串一起存储,因为这将是很高的开销。
我想压缩到原始尺寸的20%以下。这是合理的,因为英语熵的上限是1.75bit (Brown et al,1992,http://acl.ldc.upenn.edu/J/J92/J92-1002.pdf) = 22%的压缩( 1.75 /8)。
编辑:
我不能使用zlib,因为头太大了。(如果我有一个以20字节开头的字符串,就不能有好的压缩头。根据Roland Illing,zlib header = 200字节。我没有仔细检查过,但我知道它比20更大。)
Huffman编码听起来不错,除了它是基于单个标记的,并且不能做ngram(多字符)。
smaz有一个糟糕的字典,并且压缩到只有50%。
我更喜欢使用现有的代码,而不是实现压缩算法。
发布于 2011-11-08 18:02:50
我不想把字典和每个字符串一起存储,因为那样会有很高的开销。
因此,构建包含所有所需内容的单个字符串,并使用任何解决方案一次性压缩所有内容。这也解决了“头太大”的问题。
您可以通过多种方式完成此操作。可能最简单的方法是创建字符串列表的repr();或者您可以使用pickle、shelve或json模块来创建某种其他类型的序列化形式。
发布于 2011-11-08 16:04:34
把所有的单词编成一本字典。然后,将所有单词转换为与字典中的偏移量相对应的数字。如果需要,您可以使用第一位来表示单词是大写的。
发布于 2011-11-08 16:12:26
使用标准库中的zipfile怎么样?
https://stackoverflow.com/questions/8047384
复制相似问题