有没有合适的算法把一段文本压缩成更短的文本?

2023-03-21 13:47:08 +08:00
 metalvest

一般压缩都是压缩成二进制,如果进行 base64 转换则会比原来的文本长,字典算法是可以把文本缩短,但又需要额外的长度保存字典。摘要、提取关键词或者使用同义词替换等方法会损失信息或者改变原来的意思。所以有没有其他的办法?短 url 或者网盘不算。

1984 次点击
所在节点    问与答
9 条回复
iBugOne
2023-03-21 13:52:28 +08:00
先压缩再 base64 不就行了
misdake
2023-03-21 13:54:22 +08:00
gzip 再 base64 呗,只要压缩率能抵消掉 base64 增加的那三分之一就行。对于有一定长度的文本内容来说应该很容易。
Rxianbei
2023-03-21 13:55:35 +08:00
emmmm chatgpt 就很适合做文本信息的收集和整理捏
metalvest
2023-03-21 13:57:40 +08:00
@iBugOne
@misdake
会比原来长,你们试试就知道
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 字节
mercury233
2023-03-21 14:16:01 +08:00
我测试了一下,哈利波特 7 的 txt 版,UTF8 格式是 1159 KB ,GB2312 格式是 778 KB ,UTF8 用 rar5 压缩后是 382 KB ,base64 编码后是 516 KB
play78
2023-03-21 14:18:47 +08:00
如果一定要 ascii 码, 那 gzip ,然后 base64. 然后可以参考 base64 ,实现 base85 或 base91 ,https://en.wikipedia.org/wiki/Ascii85
如果文本支持 utf8 , 那 gzip ,然后 base65535 都可以。[🤪]
breeza
2023-03-21 14:24:37 +08:00
插一嘴,一个好玩的东西: https://snufk.in/blog/silly-compression-text.html
metalvest
2023-03-21 15:25:55 +08:00
感谢大家给的思路,在 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("编码后文本和原始文本一样长")~~~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/925820

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX