我需要能够在大量压缩文件 (.txt) 中搜索文本。压缩可能会改变为其他东西,甚至成为专有的。
我想避免解压所有文件并压缩(编码)搜索字符串并在压缩文件中搜索。这应该可以通过对所有文件使用相同的码本使用霍夫曼压缩来实现。
我不想重新发明轮子,所以..任何人都知道一个库可以做这样的事情或实现和测试的霍夫曼算法,或者也许是一个更好的主意?
提前致谢
大多数文本文件都是用其中一种压缩的LZ家族 http://en.wikipedia.org/wiki/LZ77_and_LZ78的算法,它结合了字典编码器 http://en.wikipedia.org/wiki/Dictionary_coder与一个熵编码器 http://en.wikipedia.org/wiki/Minimum_redundancy_coding比如霍夫曼。
因为Dictionary Coder依赖于一个不断更新的“字典”,所以它的编码结果依赖于历史(字典中从输入数据到当前符号导出的所有代码),所以不可能跳转到某个位置并开始解码,而无需首先解码所有先前的数据。
在我看来,您可以只使用 zlib 流解码器,它会立即返回解压缩的数据,而无需等待整个文件被解压缩。这不会节省执行时间,但会节省内存。
第二个建议是对英语单词进行霍夫曼编码,并忘记字典编码器部分。每个英语单词都会映射到一个唯一的无前缀代码。
最后,@SHODAN 给出了最明智的建议,就是对文件建立索引,压缩索引并与压缩的文本文件捆绑在一起。要进行搜索,只需解压缩索引文件并查找单词。这实际上是对单词进行霍夫曼编码的改进 - 一旦找到单词的频率(为了最佳地分配前缀代码),您就已经构建了索引,因此您可以保留索引进行搜索。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)