unix 有没有办法从文件中存储gzip的字典?

vqlkdk9b  于 2023-08-04  发布在  Unix
关注(0)|答案(2)|浏览(179)

我一直在做一些关于基于压缩的文本分类的研究,我试图找出一种方法来存储编码器(在训练文件上)构建的字典,以便在测试文件上“静态”运行?使用UNIX的gzip实用程序可以做到这一点吗?
例如,我一直在使用sport.txt和atheism.txt的2个“类”文件,因此我想对这两个文件运行压缩并存储它们使用的字典。接下来,我想取一个测试文件(未标记,可能是无神论或运动),通过使用这个test.txt上的预建字典,我可以分析它在该字典/模型下的压缩效果。
谢啦,谢啦

xqnpmsa8

xqnpmsa81#

deflate编码器,如gzip和zlib,不“构建”字典。它们简单地使用之前的32K字节作为与从当前位置开始的字节串的潜在匹配的源。最后32K字节被称为“字典”,但这个名字可能会引起误解。
您可以使用zlib试验预设字典。参见deflateSetDictionary()inflateSetDictionary()函数。在这种情况下,zlib压缩使用32K字节的“字典”作为匹配源,该字典实际上在被压缩的第一个字节之前,但字典本身没有被压缩。启动只能改善前32K字节的压缩。在那之后,预设字典太靠后而无法提供匹配。
gzip不支持预设字典。

dsekswqp

dsekswqp2#

到2023年,你可以轻松地尝试zstd。与gzip相反,zstd构建了一个压缩字典,并提供了生成和存储字典的方法。
下面是一个Python绑定器Python zstandard的示例:https://python-zstandard.readthedocs.io/

import zstandard

ENCODING="UTF-8"

training_data = "my training text"
dictionary = zstandard.ZstdCompressionDict(training_data.encode(ENCODING), dict_type=zstandard.DICT_TYPE_RAWCONTENT)
compressor = zstandard.ZstdCompressor(dict_data=dictionary)
test_data = "my test text"
compressed = compressor.compress(test_data.encode(ENCODING))
compessed_length = len(compressed)

字符串
ftcc项目端到端实现了这种方法,并提供了精度基准。
免责声明:我是ftcc项目的作者。

相关问题