C++ 使用全局词典中的常用短语分别压缩文本的各行
是否有任何开源库或算法可用于查看文件中各行文本中最常见的短语或单词,并创建一个全局词典,然后使用该词典分别压缩文本行?优选的是,如果代码可用的话,将是C或C++。p> 我发现这个问题,我认为是类似的,但没有一个答案,满足我所寻找的:C++ 使用全局词典中的常用短语分别压缩文本的各行,c++,c,encoding,dictionary,compression,C++,C,Encoding,Dictionary,Compression,是否有任何开源库或算法可用于查看文件中各行文本中最常见的短语或单词,并创建一个全局词典,然后使用该词典分别压缩文本行?优选的是,如果代码可用的话,将是C或C++。p> 我发现这个问题,我认为是类似的,但没有一个答案,满足我所寻找的: 这里有三件重要的事情需要认识 用代码替换单词的价值取决于其频率和长度。替换“a”值不了多少钱,即使它经常出现 一旦确定了最常见的单词,就可以通过查找并列出现的两个常见单词来找到短语。(在大多数语法中,单词重复是相当罕见的。) 然而,文本中最大的冗余来源之一实际上是预
这里有三件重要的事情需要认识
我做了更多的研究,我想我已经找到了答案 我在这一页讨论了如何使用助推器来改进压缩 该页面提供了一个指向该研究论文的链接 并且还对用来做压缩的源代码进行了说明
是的,C语言中的一个开源压缩库为此提供了
deflateSetDictionary()
和inflateSetDictionary()
例程。您可以提供多达32K的种子数据,压缩器将在其中查找匹配的字符串。同一本词典的两端都需要驻留。如果要压缩大量具有许多通用性的小块数据,这可以极大地改进压缩。您的“文本行”当然可以称为小块数据。查找相似的字节字符串并创建字典是压缩算法的主要功能。字符串本质上是字节字符串的同义词,末尾是0
。没有双关语的意图,只是意识到。这种技巧非常普遍,被称为“单词袋”。不,“文字袋”放弃订单。这不是这里要问的问题。在我要压缩的文本中,会有重复的表达式或单词集出现得足够频繁。@user102023:我所说的单词重复是“Foo Foo Foo”
。通常在第2步中,当两个单词分别频繁出现时,您会查找单词对“Foo Bar”。顺便说一句,这里有一个隐含的步骤2B。如果你发现“foobar”很常见,那么你应该看看它是否与第三个单词组合出现。