一般压缩都是压缩成二进制,如果进行 base64 转换则会比原来的文本长,字典算法是可以把文本缩短,但又需要额外的长度保存字典。摘要、提取关键词或者使用同义词替换等方法会损失信息或者改变原来的意思。所以有没有其他的办法?短 url 或者网盘不算。
1
iBugOne 2023-03-21 13:52:28 +08:00
先压缩再 base64 不就行了
|
2
misdake 2023-03-21 13:54:22 +08:00
gzip 再 base64 呗,只要压缩率能抵消掉 base64 增加的那三分之一就行。对于有一定长度的文本内容来说应该很容易。
|
3
Rxianbei 2023-03-21 13:55:35 +08:00
emmmm chatgpt 就很适合做文本信息的收集和整理捏
|
5
misdake 2023-03-21 14:02:55 +08:00
@metalvest 我随便选了这昨天看到的项目的代码文件,https://raw.githubusercontent.com/daafu/sokoban/master/src/game.jai ,用这个工具压缩 https://www.zickty.com/texttogzip/
输入:10574 字节 输出:4140 字节 |
6
mercury233 2023-03-21 14:16:01 +08:00
我测试了一下,哈利波特 7 的 txt 版,UTF8 格式是 1159 KB ,GB2312 格式是 778 KB ,UTF8 用 rar5 压缩后是 382 KB ,base64 编码后是 516 KB
|
7
play78 2023-03-21 14:18:47 +08:00
如果一定要 ascii 码, 那 gzip ,然后 base64. 然后可以参考 base64 ,实现 base85 或 base91 ,https://en.wikipedia.org/wiki/Ascii85
如果文本支持 utf8 , 那 gzip ,然后 base65535 都可以。[🤪] |
8
breeza 2023-03-21 14:24:37 +08:00
插一嘴,一个好玩的东西: https://snufk.in/blog/silly-compression-text.html
|
9
metalvest OP 感谢大家给的思路,在 colab 上分别用 Zstd 和 Brotli 结合 Base65536 试了试,确实可以压得更短。
看能不能用这个思路省一点 token 来保留 GPT 的记忆? ~~~#!pip install zstandard #!pip install base65536 #!pip install brotlicffi import brotlicffi import zstandard # 用于 zstd 算法 import base65536 # 用于 Base65536 编码 text = "一般压缩都是压缩成二进制,如果进行 base64 转换则会比原来的文本长,字典算法是可以把文本缩短,但又需要额外的长度保存字典。摘要、提取关键词或者使用同义词替换等方法会损失信息或者改变原来的意思。所以有没有其他的办法?短 url 或者网盘不算。" text_bytes = text.encode("utf-8") # 使用 utf-8 编码 compressor = zstandard.ZstdCompressor(level=10) # 创建压缩器对象 #compressed_bytes = compressor.compress(text_bytes) # 压缩文本字节 compressed_bytes = brotlicffi.compress(text_bytes) encoded_text = base65536.encode(compressed_bytes) # 编码压缩字节 print(f"原始文本长度:{len(text)}") print(f"编码后文本长度:{len(encoded_text)}") if len(text) > len(encoded_text): print("编码后文本比原始文本短") elif len(text) < len(encoded_text): print("编码后文本比原始文本长") else: print("编码后文本和原始文本一样长")~~~ |