首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中压缩英文短字符串?

在Python中压缩英文短字符串?
EN

Stack Overflow用户
提问于 2011-11-08 15:52:59
回答 5查看 1.3K关注 0票数 1

我想在内存中容纳长度小于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%。

我更喜欢使用现有的代码,而不是实现压缩算法。

EN

回答 5

Stack Overflow用户

发布于 2011-11-08 18:02:50

我不想把字典和每个字符串一起存储,因为那样会有很高的开销。

因此,构建包含所有所需内容的单个字符串,并使用任何解决方案一次性压缩所有内容。这也解决了“头太大”的问题。

您可以通过多种方式完成此操作。可能最简单的方法是创建字符串列表的repr();或者您可以使用pickleshelvejson模块来创建某种其他类型的序列化形式。

票数 2
EN

Stack Overflow用户

发布于 2011-11-08 16:04:34

把所有的单词编成一本字典。然后,将所有单词转换为与字典中的偏移量相对应的数字。如果需要,您可以使用第一位来表示单词是大写的。

票数 1
EN

Stack Overflow用户

发布于 2011-11-08 16:12:26

使用标准库中的zipfile怎么样?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8047384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档