CN117375627B - 适用于字符串的纯文本格式数据的无损压缩方法和系统 - Google Patents
适用于字符串的纯文本格式数据的无损压缩方法和系统 Download PDFInfo
- Publication number
- CN117375627B CN117375627B CN202311677570.XA CN202311677570A CN117375627B CN 117375627 B CN117375627 B CN 117375627B CN 202311677570 A CN202311677570 A CN 202311677570A CN 117375627 B CN117375627 B CN 117375627B
- Authority
- CN
- China
- Prior art keywords
- variable
- data
- compressed
- character string
- row
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000007906 compression Methods 0.000 title claims abstract description 116
- 230000006835 compression Effects 0.000 title claims abstract description 98
- 238000000034 method Methods 0.000 title claims abstract description 76
- 238000012545 processing Methods 0.000 claims abstract description 42
- 230000008569 process Effects 0.000 claims abstract description 29
- 230000006837 decompression Effects 0.000 claims description 36
- 238000004590 computer program Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 230000006872 improvement Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001351 cycling effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000014616 translation Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/14—Tree-structured documents
- G06F40/146—Coding or compression of tree-structured data
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明提出一种适用于字符串的纯文本格式数据的无损压缩方法和系统,涉及数据处理技术领域。其中,方法包括:定义一个临时变量t,并将待压缩数据中第a行字符串赋值给临时变量t;从待压缩数据中,取出第a+1行字符串赋值给变量s;找到变量s与临时变量t之间相同的前缀,将相同的前缀赋值给变量p;将第a+1行字符串赋值给临时变量t;将第a+1行字符串的开头与变量p相同的部分,替换成变量p的长度值n,作为这一行的压缩结果;重复步骤S2至步骤S5对待压缩数据进行逐行处理,直至待压缩数据的所有字符串全部处理完毕。本发明的待压缩的数据是纯文本格式,压缩后的数据也是纯文本格式;压缩过程简单开销小,适合嵌入到脚本型代码中。
Description
技术领域
本发明属于数据处理技术领域,尤其涉及一种适用于字符串的纯文本格式数据的无损压缩方法和系统。
背景技术
在计算机程序中,常使用纯文本格式的字符串,来保存配置信息。在有些场合的这类配置信息中,邻近的字符串具有相同的前缀,即在两个字符串中,开头的一个或多个字符是相同的。这种在一个字符串的头部,与另一个字符串的头部,完全相同的一个或多个字符,我们称之为相同的前缀。例如“abcxyz”与“abcijk”这两个字符串,它们各自头部都有“abc”,那么“abc”就是这两个字符串之间相同的前缀。
发布web网站代码时,通常会在源代码的文件名后面,附加一串MD5值,以防止与历史版本文件重名。在文件名被附加MD5串后,为了记录文件名改变前后的对应关系,现有的做法通常是用一份纯文本格式的配置数据,来表示这种对应信息。这种配置数据的文件名之间,有相同的前缀,可以视为冗余信息来做针对性的压缩。
具有类似特征的数据,还有多语言词典数据。现有技术方案常用的做法是,以文案所在的项目、模块、页面和功能点,对文案进行分级分类编号,然后记录编号和多语言译文的对应关系。在同一个模块或页面中,常有多个文案需要编号,这些相邻的编号之间,有相同的前缀,即命名空间的概念。
现有的做法虽然能够实现文件的压缩,但是压缩过程较为复杂,并不适合嵌入到脚本型代码中,随源代码一起发布压缩数据。
发明内容
为解决上述技术问题,本发明提出一种适用于字符串的纯文本格式数据的无损压缩方法和系统的技术方案,以解决上述技术问题。
本发明第一方面公开了一种适用于字符串的纯文本格式数据的无损压缩方法,方法包括:
步骤S1、定义一个临时变量t,并将待压缩数据中第a行字符串赋值给临时变量t;
步骤S2、从待压缩数据中,取出第a+1行字符串赋值给变量s;
步骤S3、找到变量s与临时变量t之间相同的前缀,将相同的前缀赋值给变量p;
步骤S4、将第a+1行字符串赋值给临时变量t;
步骤S5、将第a+1行字符串的开头与变量p相同的部分,替换成变量p的长度值n,作为这一行的压缩结果;
步骤S6、重复步骤S2至步骤S5对待压缩数据进行逐行处理,直至待压缩数据的所有字符串全部处理完毕。
根据本发明第一方面的方法,在步骤S5中,n的值用两位三十六进制字符表示。
根据本发明第一方面的方法,当n等于0时,在步骤S5中,第a+1行字符串的压缩结果为在原字符串前面增加00字符。
根据本发明第一方面的方法,在步骤S1中,当a等于0时,将临时变量t赋值为空字符串。
根据本发明第一方面的方法,在步骤S6之后还包括:
步骤S7、对压缩后的待压缩数据进行解压。
根据本发明第一方面的方法,在步骤S7中对压缩后的待压缩数据进行解压的方法包括:
步骤S71、定义一个临时变量y,并将临时变量y赋值为空字符串;
步骤S72、从待解压数据中,取出压缩后的第a+1行字符串,赋值给变量x;
步骤S73、将变量x的前两个字符以数值的形式赋予变量m,m的值表示第a+1行字符串与第a行字符串相同前缀的长度;
步骤S74、取出临时变量y的前m个字符,替换掉变量x的前两个字符,作为这一行的解压缩结果;
步骤S75、将步骤S74的解压缩结果赋值给临时变量y,用于解压缩下一行;
步骤S76、重复步骤S72至步骤S75对待解压数据进行逐行处理,直至待解压数据全部处理完毕。
根据本发明第一方面的方法,在步骤S7中,当a等于0时,直接将首行的前两个字符删除作为首行的解压缩结果。
本发明第二方面公开了一种适用于字符串的纯文本格式数据的无损压缩系统;系统包括:
第一处理模块,被配置为,定义一个临时变量t,并将待压缩数据中第a行字符串赋值给临时变量t;
第二处理模块,被配置为,从待压缩数据中,取出第a+1行字符串赋值给变量s;
第三处理模块,被配置为,找到变量s与临时变量t之间相同的前缀,将相同的前缀赋值给变量p;
第四处理模块,被配置为,将第a+1行字符串赋值给临时变量t;
第五处理模块,被配置为,将第a+1行字符串的开头与变量p相同的部分,替换成变量p的长度值n,作为这一行的压缩结果;
第六处理模块,被配置为,重复第二处理模块至第五处理模块中的无损压缩方法,对待压缩数据进行逐行处理,直至待压缩数据的所有字符串全部处理完毕。
综上,本发明提出的方案:待压缩的数据是纯文本格式,压缩后的数据也是纯文本格式;压缩过程简单开销小,压缩结果是纯文本,适合嵌入到脚本型代码中,随源代码一起发布压缩数据;前缀字符串长度可用两位36进制数表示,直接由JavaScript内置库函数支持,所能表示的前缀长度值最多可达1295。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为根据本发明实施例的一种适用于字符串的纯文本格式数据的无损压缩方法的压缩过程流程图;
图2为根据本发明实施例的一种适用于字符串的纯文本格式数据的无损压缩方法的解压过程流程图;
图3为根据本发明实施例的最好情况的下每行字符串的字符个数与压缩率的关系图;
图4为根据本发明实施例的最坏情况的下每行字符串的字符个数与压缩率的关系图;
图5为根据本发明实施例的一种适用于字符串的纯文本格式数据的无损压缩系统的结构图;
图6为根据本发明实施例的一种电子设备的结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例只是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本发明可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
实施例1:
本实施例公开了一种适用于字符串的纯文本格式数据的无损压缩方法。
该方法针对邻近的字符串具有相同的前缀,即在两个字符串中,开头的一个或多个字符是相同的情况进行文本的无损压缩。
当多个字符串之间,有相同的前缀时,这些相同的字符就是一种冗余信息,用简短的符号来代表这些相同的字符,就能实现压缩。例如以下三行文本格式的字符串:
(1)项目名/模块名/文件名甲;
(2)项目名/模块名/文件名乙;
(3)项目名/模块名/文件名丙。
每个字符串的开头部分,都是“项目名/模块名/文件名”,这个相同的前缀重复出现了3次,如果用符号“z”来代表这个相同的前缀,则原始数据可以表示为:
(1)z甲;
(2)z乙;
(3)z丙;
这就实现了压缩,解压缩过程则反之,把符号“z”还原成那个相同的前缀“项目名/模块名/文件名”即可。
本实施例的适用于字符串的纯文本格式数据的无损压缩方法包括:
步骤S1、定义一个临时变量t,并将待压缩数据中第a行字符串赋值给临时变量t(即,定义一个临时变量并赋值为空字符串,得到临时变量t,此时临时变量t的值是空字符串);需要说明的是,当a等于0时,将临时变量t赋值为空字符串。
步骤S2、从待压缩数据中,取出第a+1行字符串赋值给变量s(即,从待压缩数据中,取出下一行字符串,赋值给变量s);
步骤S3、找到变量s与临时变量t之间相同的前缀,将相同的前缀赋值给变量p(即,找到字符串变量s与临时变量t之间相同的前缀,并将该相同的前缀赋值给变量p,得到字符串变量p,此时p与s的开头部分字符相同);
步骤S4、将第a+1行字符串赋值给临时变量t(即,将s的值赋值给t,此时对于下一行待压缩的字符串来讲,t的值等于其前一行字符串的原始值);
步骤S5、将第a+1行字符串的开头与变量p相同的部分,替换成变量p的长度值n,作为这一行的压缩结果(即,将字符串s的开头与字符串p相等的那一部分,替换成p的长度值n,作为这一行的压缩结果);n的值用两位三十六进制字符表示。需要说明的是,当n等于0时,在步骤S5中,待压缩字符串的压缩结果为在原字符串前面增加00字符。
步骤S6、重复步骤S2至步骤S5对待压缩数据进行逐行处理,直至待压缩数据的所有字符串全部处理完毕。
步骤S7、对压缩后的待压缩数据进行解压。
在本实施例中,步骤S7中对压缩后的待压缩数据进行解压的方法包括:
步骤S71、定义一个临时变量y,并将临时变量y赋值为空字符串(即,定义一个临时变量并赋值为空字符串,得到临时变量y,此时y的值是空字符串);
步骤S72、从待解压数据中,取出压缩后的第a+1行字符串,赋值给变量x(即,从待解压数据中,取出下一行字符串,赋值给变量x);
步骤S73、将变量x的前两个字符以数值的形式赋予变量m,m的值表示第a+1行字符串与第a行字符串相同前缀的长度(即,将s的前两个字符看作数值赋予变量m,m的值表示相同前缀的长度);
步骤S74、取出临时变量y的前m个字符,替换掉变量x的前两个字符,作为这一行的解压缩结果(即,取出y的前m个字符,替换掉s的前两个字符,作为这一行的解压缩结果);需要说明的是当a等于0时,直接将首行的前两个字符删除作为首行的解压缩结果。
步骤S75、将步骤S74的解压缩结果赋值给临时变量y,用于解压缩下一行(即,将步骤S74的解压缩结果赋值给临时变量y,用于解压缩下一行);
步骤S76、重复步骤S72至步骤S75对待解压数据进行逐行处理,直至待解压数据全部处理完毕。
图1为根据本发明实施例的一种适用于字符串的纯文本格式数据的无损压缩方法的流程图,如图1所示,具体地,结合本实施例对一种适用于字符串的纯文本格式数据的无损压缩方法进行详细描述:
一、定义一个临时变量并赋值为空字符串,得到变量t,此时t的值是空字符串;
在此之前,要准备好待压缩的纯文本格式数据,这些数据是将要用本压缩方法处理的对象,不属于本发明的一部分。为了描述方便,我们将待压缩数据用变量strList表示,它代表一个数组,数组的每一项都是一定长度的纯文本字符串,字符串的长度在0至1290之间。这个设定只是为了描述方便,本压缩方法同样适用于能以行为单位分段的流式纯文本数据。
二、从待压缩数据中,取出下一行字符串,赋值给变量s,得到待压缩的字符串;
因为待压缩数据是数组(或者以行为单位分段的数据),所以压缩过程是一个循环处理每一项(或每一行)的过程,每一次循环将依次处理一项待压缩的字符串。首次执行这一步时,从前面的strList数组中取出第一项(即首项)赋值给变量s,则s的值即为待压缩的字符串。在后续的循环处理中,将依次从strList数组中取出下一项字符串赋值给变量s。
三、找到字符串s与临时变量t之间相同的前缀,赋值给变量p,得到字符串p,此时p与s的开头部分字符相同;
执行到这一步时,变量s和变量t的值都是字符串,将这两个字符串一上一下分两行放在一起来看,按从左往右(或称为从前往后)的顺序依次对比每一个字符,就能找到这两者之间相同的前缀,也就是两者头部完全相同的那部分。
比如说s的值是“abcxyz”,t的值是“abcijk”,将这两个字符串一上一下分两行放在一起如下(注意,为了方便观察,以下故意拉开了字符与字符之间的间距):
a b c x y z
a b c i j k
以上两行字符串,从左往右依次对比每一个字符,可以发现在两行之间,由前3个字符组成的字符串是相同的,即头部的“abc”3个字符,是这两行之间相同的前缀。将这个相同的前缀赋值给变量p,在这个例子中此时p的值即为abc这3个字符。
注意以下几种特殊情况:
1.如果s和t完全相同,则p也与这两者完全相同;
2.如果s和t从开头首个字符起就不相同,则p的值为空字符串;
3.当压缩刚开始时,处理第一项待压缩的字符串时,t为空字符串,所以p的值也为空字符串,即相同的前缀的长度为0;
4.如果s和t的首字符不相同,其它部分无论是否相同,p都为空字符串。
四、将s的值赋值给t,此时对于下一行待压缩的字符串来讲,t的值等于其前一行字符串的原始值;
到这一步时,临时变量t在本次循环中的作用已经达成,即用于寻找p的值,而此时,待压缩字符串s尚未实现压缩,其值仍为压缩前的原始值。这一步将这个待压缩字符串的原始值,赋值给临时变量t,则从这一步开始,对于下一次循环来讲,t的值即为前一项待压缩字符串的原始值。所以当进入下一次循环时,第三步中用于寻找p的两个字符串,即对应于待压缩数据中相邻两项待压缩字符串。
五、将字符串s的开头与p相等的那一部分,替换成p的长度值,作为这一行的压缩结果;
因为在第四步中,已经将s的值赋予变量t,所以在这一步修改s的值不会影响到变量t的值。取字符串p的长度值赋予变量n,在第三步给的例子中,p的值为abc这3个字符,其对应的n值即为3。变量n的值,用十进制来看是3,用十六进制来看是3,用三十六进制来看是3,将一位数补全成两位数则要表示为03,后文均采用固定的两位三十六进制来表示p的长度值。将字符串s的前n个字符,替换成n值对应的两位三十六进制字符,即得到这一行字符串的压缩结果。仍以第三步中的例子来看,s的原始值是“abcxyz”,p的值为abc这3个字符,n的值为3,用两位三十六进制字符来表示即为03,将s的前3个字符abc,替换成03这两个字符,得到“03xyz”即为这一行的压缩结果。
注意以下几种特殊情况:
1.如果p的值为空字符串,则对应n的值为0,即p的长度为0;
2.如果n的值为0,仍要用两位三十六进制字符来表示,即为00;
3.n的值为0时,要将s的前0个字符替换成00;
4.在压缩过程刚开始时,临时变量t的值为空字符串,找到相同的前缀p必定是空字符串,对应n的值就是0,用两位三十六进制字符来表示即为00,故首个待压缩字符串的压缩结果,相当于在原字符串前面增加了00两个字符。
六、重复执行第二至五步,直到待压缩数据全部处理完;
每次循环内完成第二至五步后,能得到一行待压缩字符串的压缩结果,临时变量t的值也得到更新,其新值为这一行字符串在压缩之前的原始值,并将在下一次循环内用来与下一项待压缩的字符串做对比,以寻找相邻两项待压缩字符串之间相同的前缀。
需要说明的是,压缩过程中,特别采用两位三十六进制字符来表示长度值,是对一般情况下压缩率与操作难度的综合考虑结果,并非只能用两位三十六进制字符。采用更多的位数或更高的进制数,能适应不同特点的待压缩数据,以获得更好的压缩率。例如三位十进制数,或者两位九十六进制数,都可以,只要能用常规的单字节文本字符表示出来即可,以保证压缩结果的纯文本特性。
参见图2,解压缩过程正好是压缩的逆过程,也是六步主流程,下面补充一些操作细节与注意事项,以下是对解压缩过程的详细描述:
一、定义一个临时变量并赋值为空字符串,得到变量y,此时y的值是空字符串;
在此之前,要准备好待解压的纯文本格式数据,这些数据是将要解压缩的对象,不属于本发明的一部分。为了描述方便,我们将待压缩数据用变量strList表示,它代表一个数组,数组的每一项都是一定长度的纯文本字符串,字符串的长度在0至1290之间。这个设定只是为了描述方便,对于以行为单位分段的流式纯文本数据,也能用这个方法解压缩。
二、从待解压数据中,取出下一行字符串,赋值给变量x,得到待解压的字符串;
因为待解压缩数据是数组,所以解压缩过程是一个循环处理每一项的过程,每一次循环将依次处理一项待解压缩的字符串。首次执行这一步时,从前面的strList数组中取出第一项赋值给变量x,则x的值即为待解压缩的字符串。在后续的循环处理中,将依次从strList数组中取出下一项字符串赋值给变量m。
三、将x的前两个字符看作数值赋予变量m,m的值表示相同前缀的长度;
这里是解压缩过程,故x的值是一个压缩后的字符串,其开头的前两个字符,是一个两位三十六进制。将这两个字符按三十六进制取值,将结果赋值给变量m。沿用前面压缩过程的例子,则x的值是“03xyz”这样一个字符串,其前两个字符03表示一个两位三十六进制,对应m的值即为3。
四、取出y的前m个字符,替换掉x的前两个字符,作为这一行的解压缩结果;
变量y的值是字符串,虽然在解压缩刚开始时y的值为空字符串,但在循环每次到达第五步时,y的值将更新为前一项的解压缩结果。由于y的值是前一项已经解压缩的字符串,即压缩前的原始值,故而取出y的前m个字符,得到长度为m的字符串,将这个字符串赋值给变量q。再把x的前两个字符替换成q所表示的字符串,即得到这一项的解压缩结果。
注意以下几种特殊情况:
1.当解压缩过程刚开始时,临时变量y的值为空字符串,从中取出前m个字符仍然得到空字符串;
2.在压缩结果中,首项的开头两个字符必定是00,这是由压缩过程决定的;
3.当x的前两个字符为00时,表示它与前一项字符串之间没有相同的前缀,或者相同的前缀长度为0;
4.从临时变量y这个字符串中,取出前0个字符,得到的是空字符串;
5.将x的前两个字符替换成空字符串,相当于删除了x的前两个字符。
五、将第四步的解压缩结果赋值给临时变量y,用于解压缩下一行;
这一步需要注意的是,解压缩过程刚开始时,首个待解压缩字符串是如何被解压缩的。后续循环解压缩每一项时,临时变量y的值,总是保存着前一项已经解压缩的字符串。由压缩过程的特点可知,首个待解压缩字符串,其前两个字符必定是00,即表示要从y中取出前0个字符,用以替换掉其前两个字符。也就是说,在解压缩首项时,相当于直接删除其前两个字符,即得到解压缩后的字符串。
六、重复执行第二至五步,直到待解压数据全部处理完;
本实施例的压缩过程和解压缩过程的伪代码,按前面的详细描述不难写出,在此不做详细介绍。
进一步地,下面结合具体实例对本实施例的方法进行解说:
压缩过程:
用以下表格中的三行字符串,作为待压缩数据:
压缩开始前,先给临时变量赋值为空字符串,然后开始遍历待压缩数据,每次处理其中一行字符串,循环的轮次和每次循环中的处理过程,在表格中记录如下:
注:为了便于理解,上表中用十进制数表示相同的前缀长度,其中每个汉字计长度为2,实际压缩时用两位三十六进制数表示长度值,能获得更好的压缩率。
每一轮循环结束前,将待压缩字符串赋值给临时变量,从上表来看,即临时变量的值(首行除外)总是等于其左上一列一行那一格的值。
经过3轮次的循环,最终得到压缩结果表示如下:
相比于压缩前的数据,首行增加了两个字符,其余行都得到了压缩。
解压缩过程:
上表为前述实例的压缩结果,将其作为待解压缩的数据。
解压缩开始前,先给临时变量赋值为空字符串,然后开始遍历待解压缩数据,每次处理其中一行字符串,循环的轮次和每次循环中的处理过程,在表格中记录如下:
注:同压缩实例,为便于理解,用两位十进制数表示长度,每个汉字计长度为2。
最后一列即为该轮次的解压缩结果。
每一轮循环结束前,将解压缩的结果赋值给临时变量,从上表来看,即临时变量的值(首行除外)总是等于上一行最后一列那一格的值。
经过3轮次的循环,最终得到解压缩结果表示如下:
至此,已完整还原出前述压缩实例中的原始数据,实现了无损压缩和解压缩。
压缩率和复杂度分析:
实测压缩率可超过50%,时间复杂度可以看作O(r),空间复杂度可以看作O(1)。式中字母O为表示复杂度的特定记号,类似于表示函数的写法F(x)中的F字母,式中的字母r表示待处理的数据量。当选取一定的度量单位(如字节、行)时,r表示有多少个单位的待处理数据,其取值一般是有限大小的自然数。
压缩围绕原始数据的特征展开,实际待压缩字符串之间,相同的前缀字符越长,压缩率越高。按常用存储、传输纯文本数据的编码方式UTF-8来看(大多数汉字用3个字节表示),以下实例的压缩率约为35%(即压缩后为压缩前数据量的35%)。
压缩过程的时间复杂度,主要取决于查找相同的前缀这个子过程(此子过程不属于本发明的组成部分,可按实际需要调整和优化)。把每行待压缩数据的长度记作w,在示例中此子过程的复杂度是O(w)。而这个子过程容易优化到O(logw),log表示对w值取对数,再考虑到实际情况w的值多在20~200之间,对总体时间复杂度的影响大致是O(20r)至O(200r)之间,改进后可控制在O(5r)至O(8r)之间,故总体压缩过程时间复杂度可以看作O(r)。
解压过程的时间复杂度,主要取决于底层复制字符串的开销,参考压缩过程的分析来看,对整体复杂度影响不大,故总体解压缩时间复杂度可以看作O(r)。
关于空间复杂度,这个实例中所有数据(包括压缩前和压缩后)都在内存中处理,空间复杂度为O(r)。但是,所有数据都放在内存并不是本方法所必须的,待压缩数据与压缩结果数据都可以被流式处理,只需将相邻两行待处理数据读入内存即可,又考虑实际每行数据的长度不大,所以总体空间复杂度可以看作O(1)。
为方便计算,后文将待压缩数据的行数记作r,每行字符串的字符个数记作w。结合实际情况,r一般不大于10万,w一般不大于200。理论压缩率极限产生在以下两种情况:
最好情况的压缩率由下式计算,当r=100000,w=200时,压缩率可高达2.5%:
将公式绘制成图,纵轴表示压缩率,横轴表示w值,颜色表示r的三个代表值。
从图3可以看出,在最好情况下,r值对压缩率的影响不如w值明显,即相邻两行待压缩字符串相同的前缀串的长度,是影响整体压缩率的主要因素。
最坏情况的压缩率由下式计算,当r=100000,w=2时,压缩率将低至140%:
将公式绘制成图,纵轴表示压缩率,横轴表示w值,颜色表示r的三个代表值。
从图4可以看出,在最坏情况下,压缩率总是大于100%,r值对压缩率的影响很小,每行待压缩文本越短,压缩率越差。主要原因是,最差情况下总是要用固定的两个字符“00”,表示相邻两行文本没有相同的前缀。
综上,本发明提出的方案:
1、压缩过程简单开销小,压缩结果是纯文本,适合嵌入到脚本型代码中,随源代码一起发布压缩数据。
2、解压过程简单开销小,可以随压缩数据一并发布解压缩源代码,不需要专用的外置解压装置。
3、前缀字符串长度用两位36进制数表示,直接由JavaScript内置库函数支持,所能表示的前缀长度值,远超两位十进制的99(最多可达1295)。
实施例2:
本发明公开了一种适用于字符串的纯文本格式数据的无损压缩系统。图5为根据本发明实施例的一种适用于字符串的纯文本格式数据的无损压缩系统的结构图;如图5所示,所述系统100包括:
第一处理模块101,被配置为,定义一个临时变量t,并将待压缩数据中第a行字符串赋值给临时变量t;
第二处理模块102,被配置为,从待压缩数据中,取出第a+1行字符串赋值给变量s;
第三处理模块103,被配置为,找到变量s与临时变量t之间相同的前缀,将相同的前缀赋值给变量p;
第四处理模块104,被配置为,将第a+1行字符串赋值给临时变量t;
第五处理模块105,被配置为,将第a+1行字符串的开头与变量p相同的部分,替换成变量p的长度值n,作为这一行的压缩结果;n的值用两位三十六进制字符表示。
第六处理模块106,被配置为,重复第二处理模块至第五处理模块中的无损压缩方法,对待压缩数据进行逐行处理,直至待压缩数据的所有字符串全部处理完毕。
根据本发明第二方面的系统,所述第一处理模块101具体被配置为,当a等于0时,将临时变量t赋值为空字符串。
根据本发明第二方面的系统,所述第五处理模块105具体被配置为,当n等于0时,待压缩字符串的压缩结果为在原字符串前面增加00字符。
实施例3:
本发:公开了一种电子设备。电子设备包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时,实现本发明公开实施例1中任一项的一种适用于字符串的纯文本格式数据的无损压缩方法中的步骤。
图6为根据本发明实施例的一种电子设备的结构图,如图6所示,电子设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、近场通信(NFC)或其他技术实现。该电子设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该电子设备的输入装置可以是显示屏上覆盖的触摸层,也可以是电子设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图6中示出的结构,仅仅是与本公开的技术方案相关的部分的结构图,并不构成对本申请方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
实施例4:
本发明公开了一种计算机可读存储介质。计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时,实现本发明的实施例1中任一项的一种适用于字符串的纯文本格式数据的无损压缩方法中的步骤。
请注意,以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
本说明书中描述的主题及功能操作的实施例可以在以下中实现:数字电子电路、有形体现的计算机软件或固件、包括本说明书中公开的结构及其结构性等同物的计算机硬件、或者它们中的一个或多个的组合。本说明书中描述的主题的实施例可以实现为一个或多个计算机程序,即编码在有形非暂时性程序载体上以被数据处理装置执行或控制数据处理装置的操作的计算机程序指令中的一个或多个模块。可替代地或附加地,程序指令可以被编码在人工生成的传播信号上,例如机器生成的电、光或电磁信号,该信号被生成以将信息编码并传输到合适的接收机装置以由数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备、或它们中的一个或多个的组合。
本说明书中描述的处理及逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机执行,以通过根据输入数据进行操作并生成输出来执行相应的功能。所述处理及逻辑流程还可以由专用逻辑电路—例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)来执行,并且装置也可以实现为专用逻辑电路。
适合用于执行计算机程序的计算机包括,例如通用和/或专用微处理器,或任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的基本组件包括用于实施或执行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘或光盘等,或者计算机将可操作地与此大容量存储设备耦接以从其接收数据或向其传送数据,抑或两种情况兼而有之。然而,计算机不是必须具有这样的设备。此外,计算机可以嵌入在另一设备中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏操纵台、全球定位系统(GPS)接收机、或例如通用串行总线(USB)闪存驱动器的便携式存储设备,仅举几例。
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、媒介和存储器设备,例如包括半导体存储器设备(例如EPROM、EEPROM和闪存设备)、磁盘(例如内部硬盘或可移动盘)、磁光盘以及CD ROM和DVD-ROM盘。处理器和存储器可由专用逻辑电路补充或并入专用逻辑电路中。
虽然本说明书包含许多具体实施细节,但是这些不应被解释为限制任何发明的范围或所要求保护的范围,而是主要用于描述特定发明的具体实施例的特征。本说明书内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。
由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (8)
1.一种适用于字符串的纯文本格式数据的无损压缩方法,其特征在于,所述方法包括:
步骤S1、定义一个临时变量t,并将待压缩数据中第a行字符串赋值给临时变量t;
步骤S2、从待压缩数据中,取出第a+1行字符串赋值给变量s;
步骤S3、找到所述变量s与临时变量t之间相同的前缀,将所述相同的前缀赋值给变量p;
步骤S4、将所述第a+1行字符串赋值给所述临时变量t;
步骤S5、将所述第a+1行字符串的开头与所述变量p相同的部分,替换成所述变量p的长度值n,作为这一行的压缩结果;
步骤S6、重复步骤S2至步骤S5对所述待压缩数据进行逐行处理,直至待压缩数据的所有字符串全部处理完毕。
2.根据权利要求1所述的一种适用于字符串的纯文本格式数据的无损压缩方法,其特征在于,在所述步骤S5中,所述n的值用两位三十六进制字符表示。
3.根据权利要求2所述的一种适用于字符串的纯文本格式数据的无损压缩方法,其特征在于,当n等于0时,在所述步骤S5中,所述第a+1行字符串的压缩结果为在原字符串前面增加00字符。
4.根据权利要求1至3中任一项所述的一种适用于字符串的纯文本格式数据的无损压缩方法,其特征在于,在所述步骤S1中,当a等于0时,将所述临时变量t赋值为空字符串。
5.根据权利要求1至3中任一项所述的一种适用于字符串的纯文本格式数据的无损压缩方法,其特征在于,在所述步骤S6之后还包括:
步骤S7、对压缩后的所述待压缩数据进行解压。
6.根据权利要求5所述的一种适用于字符串的纯文本格式数据的无损压缩方法,其特征在于,在所述步骤S7中对压缩后的所述待压缩数据进行解压的方法包括:
步骤S71、定义一个临时变量y,并将所述临时变量y赋值为空字符串;
步骤S72、从待解压数据中,取出压缩后的所述第a+1行字符串,赋值给变量x;
步骤S73、将所述变量x的前两个字符以数值的形式赋予变量m,m的值表示所述第a+1行字符串与第a行字符串相同前缀的长度;
步骤S74、取出所述临时变量y的前m个字符,替换掉所述变量x的前两个字符,作为这一行的解压缩结果;
步骤S75、将所述步骤S74的解压缩结果赋值给所述临时变量y,用于解压缩下一行;
步骤S76、重复步骤S72至步骤S75对所述待解压数据进行逐行处理,直至所述待解压数据全部处理完毕。
7.根据权利要求6所述的一种适用于字符串的纯文本格式数据的无损压缩方法,其特征在于,当a等于0时,直接将首行的前两个字符删除作为首行的解压缩结果。
8.一种适用于字符串的纯文本格式数据的无损压缩系统,其特征在于,所述系统包括:
第一处理模块,被配置为,定义一个临时变量t,并将待压缩数据中第a行字符串赋值给临时变量t;
第二处理模块,被配置为,从待压缩数据中,取出第a+1行字符串赋值给变量s;
第三处理模块,被配置为,找到所述变量s与临时变量t之间相同的前缀,将所述相同的前缀赋值给变量p;
第四处理模块,被配置为,将所述第a+1行字符串赋值给所述临时变量t;
第五处理模块,被配置为,将所述第a+1行字符串的开头与所述变量p相同的部分,替换成所述变量p的长度值n,作为这一行的压缩结果;
第六处理模块,被配置为,重复所述第二处理模块至所述第五处理模块中的配置,对所述待压缩数据进行逐行处理,直至待压缩数据的所有字符串全部处理完毕。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311677570.XA CN117375627B (zh) | 2023-12-08 | 2023-12-08 | 适用于字符串的纯文本格式数据的无损压缩方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311677570.XA CN117375627B (zh) | 2023-12-08 | 2023-12-08 | 适用于字符串的纯文本格式数据的无损压缩方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117375627A CN117375627A (zh) | 2024-01-09 |
CN117375627B true CN117375627B (zh) | 2024-04-05 |
Family
ID=89406333
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311677570.XA Active CN117375627B (zh) | 2023-12-08 | 2023-12-08 | 适用于字符串的纯文本格式数据的无损压缩方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117375627B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6628211B1 (en) * | 2002-03-19 | 2003-09-30 | Unisys Corporation | Prefix table implemented data compression method and apparatus |
CN102150369A (zh) * | 2008-09-12 | 2011-08-10 | 汤姆森特许公司 | 无损压缩前缀后缀码的方法、解压缩在压缩的前缀后缀码中编码的表示整数或码元的比特序列的方法、和载有压缩的前缀后缀码的存储介质或信号 |
CN108768403A (zh) * | 2018-05-30 | 2018-11-06 | 中国人民解放军战略支援部队信息工程大学 | 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器 |
CN108880556A (zh) * | 2018-05-30 | 2018-11-23 | 中国人民解放军战略支援部队信息工程大学 | 基于lz77的无损数据压缩方法、误码修复方法及编码器和解码器 |
CN111030702A (zh) * | 2019-12-27 | 2020-04-17 | 哈尔滨理工大学 | 一种文本压缩方法 |
CN111367595A (zh) * | 2018-12-25 | 2020-07-03 | 阿里巴巴集团控股有限公司 | 数据处理方法、程序运行方法、装置及处理设备 |
CN112380833A (zh) * | 2020-11-20 | 2021-02-19 | 深圳得理科技有限公司 | 一种逐句段对比的相似文本查找方法及装置 |
CN115395961A (zh) * | 2022-08-19 | 2022-11-25 | 华中科技大学 | 基于联合中间件的数据无损压缩及加密传输方法 |
CN115577374A (zh) * | 2022-10-18 | 2023-01-06 | 睿云联(厦门)网络通讯技术有限公司 | 一种基于md5的加密融合存储方法、设备及介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7593949B2 (en) * | 2006-01-09 | 2009-09-22 | Microsoft Corporation | Compression of structured documents |
EP2499743A1 (en) * | 2009-11-13 | 2012-09-19 | Universität Paderborn | Indexing compressed data |
US9031997B2 (en) * | 2011-10-25 | 2015-05-12 | International Business Machines Corporation | Log file compression |
US11405053B2 (en) * | 2020-08-25 | 2022-08-02 | Nvidia Corporation | Parallel decompression of compressed data streams |
-
2023
- 2023-12-08 CN CN202311677570.XA patent/CN117375627B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6628211B1 (en) * | 2002-03-19 | 2003-09-30 | Unisys Corporation | Prefix table implemented data compression method and apparatus |
CN102150369A (zh) * | 2008-09-12 | 2011-08-10 | 汤姆森特许公司 | 无损压缩前缀后缀码的方法、解压缩在压缩的前缀后缀码中编码的表示整数或码元的比特序列的方法、和载有压缩的前缀后缀码的存储介质或信号 |
CN108768403A (zh) * | 2018-05-30 | 2018-11-06 | 中国人民解放军战略支援部队信息工程大学 | 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器 |
CN108880556A (zh) * | 2018-05-30 | 2018-11-23 | 中国人民解放军战略支援部队信息工程大学 | 基于lz77的无损数据压缩方法、误码修复方法及编码器和解码器 |
CN111367595A (zh) * | 2018-12-25 | 2020-07-03 | 阿里巴巴集团控股有限公司 | 数据处理方法、程序运行方法、装置及处理设备 |
CN111030702A (zh) * | 2019-12-27 | 2020-04-17 | 哈尔滨理工大学 | 一种文本压缩方法 |
CN112380833A (zh) * | 2020-11-20 | 2021-02-19 | 深圳得理科技有限公司 | 一种逐句段对比的相似文本查找方法及装置 |
CN115395961A (zh) * | 2022-08-19 | 2022-11-25 | 华中科技大学 | 基于联合中间件的数据无损压缩及加密传输方法 |
CN115577374A (zh) * | 2022-10-18 | 2023-01-06 | 睿云联(厦门)网络通讯技术有限公司 | 一种基于md5的加密融合存储方法、设备及介质 |
Non-Patent Citations (1)
Title |
---|
无损压缩算法LZW前缀编码优化及应用;鄢海舟等;计算机工程;20170331;第43卷(第3期);299-303 * |
Also Published As
Publication number | Publication date |
---|---|
CN117375627A (zh) | 2024-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8988257B2 (en) | Data compression utilizing variable and limited length codes | |
US8572131B2 (en) | Techniques for more efficient usage of memory-to-CPU bandwidth | |
CN112615628B (zh) | 硬件友好地数据压缩 | |
US10116325B2 (en) | Data compression/decompression device | |
EP3120266B1 (en) | Ozip compression and decompression | |
US9378126B2 (en) | Decompression apparatus and decompression method | |
US8933828B2 (en) | Using variable encodings to compress an input data stream to a compressed output data stream | |
US8106799B1 (en) | Data compression and decompression using parallel processing | |
JPH0568893B2 (zh) | ||
US10757227B2 (en) | Security-oriented compression | |
US11424761B2 (en) | Multiple symbol decoder | |
US9100042B2 (en) | High throughput decoding of variable length data symbols | |
KR20170040343A (ko) | 적응형 레이트 압축 해시 프로세싱 디바이스 | |
WO2024149207A1 (zh) | 数据处理方法和装置、介质和计算机设备 | |
US9479195B2 (en) | Non-transitory computer-readable recording medium, compression method, decompression method, compression device, and decompression device | |
CN117375627B (zh) | 适用于字符串的纯文本格式数据的无损压缩方法和系统 | |
Yuan et al. | Test data compression for system-on-a-chip using count compatible pattern run-length coding | |
US9054730B2 (en) | Method and system for LZW based decompression | |
CN108809320B (zh) | 一种基于lz77的数据压缩方法、设备及终端 | |
US10037148B2 (en) | Facilitating reverse reading of sequentially stored, variable-length data | |
US11909423B2 (en) | Compression circuit, storage system, and compression method | |
JP3038233B2 (ja) | データ圧縮及び復元装置 | |
US20160210304A1 (en) | Computer-readable recording medium, information processing apparatus, and conversion process method | |
CN115905209A (zh) | 编码方法及装置 | |
CN114070325A (zh) | 一种文本数据的压缩方法、装置、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |