一种基于语义分析的数据压缩算法

文档序号:7542798阅读:824来源:国知局
一种基于语义分析的数据压缩算法
【专利摘要】本发明公开了一种基于语义分析的数据压缩算法,是一般受限语言文本文件的压缩方法,并针对C语言源文件文本压缩问题,利用C语言的语法格式的严格性,以C语言基本元素为文本压缩的基本元素,通过采用哈夫曼编码方法进行编码,给出了一种C语言文本压缩方法——基于语义分析的文本压缩方法。实验表明:该方法的压缩比比原始的哈夫曼文本压缩提高了将近1.5倍。
【专利说明】一种基于语义分析的数据压缩算法
【技术领域】
[0001]本发明属于计算机【技术领域】,涉及一种基于语义分析的数据压缩算法。
【背景技术】
[0002]文本数据作为传递信息的媒体和手段有着十分重要的作用,并且在许多领域都有着广泛的应用。然而用以表示这些文本文件的数据量很大,使得存储成本很高,不能最大限度的发挥存储器的作用,很好的适应现今网络环境下进行高速通信的需求。数据压缩技术是通信和计算机等学科领域中的一项关键技术之一,它通过一定的技术、方法对数据进行压缩,使大容量的文件可以存储在很小的存储空间中,对于网络资源共享、信息交换、高速通信等有着非常重要的意义,并且数据压缩技术在现阶段已经广泛运用于学习工作、生活生产之中。但是随着社会的进步,科技的发展,我们遇到的文件越来越大,从而引发一系列问题的出现,需要的存储器容量越来越大,信息交流时,需要的时间很长,因此,压缩技术的优化改进和新的压缩技术的提出将一直是研发工作的重点之一。
[0003]在文本压缩方面采用最多的方法是哈夫曼编码,哈夫曼编码是可变字长编码(VLC)的一种。哈夫曼于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫作哈夫曼编码。哈夫曼编码的具体细节,可以参考《信息论与编码》。
[0004]即使目前被广泛运用并且具有很高的压缩比的基于哈弗曼编码的数据压缩技术,也存在一些不足之处,由于此压缩技术对文本文件的所有的字符进行同等的压缩,忽略了关键字和特殊语句等的特殊性和一些语句的规律性,因而在理论上这种压缩技术的压缩比还有一定的改进余地。

【发明内容】

[0005]为了解决现有技术中存在的技术问题,本发明提供了一种基于语义分析的数据压缩算法,主要根据文本语义,忽略次要字符,以字符串为基本单位,采用哈夫曼编码的思想对字符串进行编码,在保证实现无损压缩的情况下,进一步提高其压缩比,并通过实验得到的实验结果,证明了这种基于语义分析的数据压缩算法具有更高的数据压缩比。其技术方案如下:
[0006]一种基于语义分析的数据压缩算法,包括以下步骤:
[0007]I)打开要进行压缩的C语言文本文件,按照C语言对于文本的分类,依次获取各个关键元素,忽略次要元素,并保存在一个双向链表LinkSrc中;
[0008]2)遍历链表LinkSrc,统计各个元素出现的次数,以该元素的基本信息为节点,新建立成一个双向链表LinkRate ;
[0009]3)以链表LinkRate中的节点做为叶子节点,组成一颗哈夫曼树,树根为LinkRoot ;
[0010]4)将LinkRoot中的叶子节点复制并保存为一个数组Code,记录叶子节点对应的哈夫曼编码;
[0011]5)遍历LinkSrc,将其中的内容转换为数组Code中对应的哈夫曼编码,保存到对应的压缩文件中;
[0012]6)将哈夫曼树保存到文件中,该文件名对应于相应的源文件;
[0013]7)利用上述方法的逆运算实现解码,由于在压缩时省略了一些次要内容,所以在解压的过程中,需要将忽略掉的内容进行恢复。
[0014]进一步优选,所述文本的分类包括关键字、变量、常量、字符串、字符、注释。
[0015]进一步优选,所述基本信息包括类型、频度、内容、长度、编码。
[0016]与现有技术相比,本发明的有益效果:本发明压缩比提高了将近1.5倍。当文本中内容是具有一定意义的符号,并且格式要求严格,结构清晰,元素的重复性比较大,此时采用基于语义分析压缩算法要比哈夫曼压缩算法效果要好。
【专利附图】

【附图说明】
[0017]图1是本发明基于语义分析的数据压缩算法流程图;
[0018]图2是本发明基于语义分析的数据压缩算法与哈夫曼编码对比结果图,其中图2(a)是C语言源文件。图2(b)是哈夫曼编码的结果,图2 (C)是基于语义分析的数据压缩算法的结果。
【具体实施方式】
[0019]下面结合附图和具体实施例进一步说明本发明的技术方案。
[0020]参照图1,一种基于语义分析的数据压缩算法,包括以下步骤:
[0021]I)打开要进行压缩的C语言文本文件,按照C语言对于文本的分类(关键字、变量、常量、字符串、字符、注释等),依次获取各个关键元素,忽略次要元素,并保存在一个双向链表LinkSrc中;
[0022]2)遍历链表LinkSrc,统计各个元素出现的次数,以该元素的基本信息(类型、频度、内容、长度、编码等)为节点,新建立成一个双向链表LinkRate ;
[0023]3)以链表LinkRate中的节点做为叶子节点,组成一颗哈夫曼树,树根为LinkRoot ;
[0024]4)将LinkRoot中的叶子节点复制并保存为一个数组Code,记录叶子节点对应的哈夫曼编码;
[0025]5)遍历LinkSrc,将其中的内容转换为数组Code中对应的哈夫曼编码,保存到对应的压缩文件中;
[0026]6)将哈夫曼树保存到文件中,该文件名对应于相应的源文件;
[0027]7)利用上述方法的逆运算实现解码,由于在压缩时省略了一些次要内容,所以在解压的过程中,需要将忽略掉的内容进行恢复。
[0028]实验选取一个大小为0.571KB的C语言源文件(如图2 (a))作文原始文件,然后分别按照基于语义分析的数据压缩算法与哈夫曼编码进行对比,得到如下图2(b)和图2(c)所示结果。
[0029]经过哈夫曼编码压缩源文件后所得到的压缩文件理论大小为0.361KB,压缩比为1.582:1,而经过基于语义分析的数据压缩算法的压缩所得到的压缩文件理论大小为0.148KB,压缩比为 3.858:lo
[0030]当文本中内容是具有一定意义的符号,并且格式要求严格,结构清晰,元素的重复性比较大,此时采用基于语义分析压缩算法要比哈夫曼压缩算法效果要好。
[0031]基于上述理由,此种方法可以推广应用到一般受限语言文本压缩中,比如一般的计算机编程语目。
[0032]以上所述,仅为本发明最佳实施方式,任何熟悉本【技术领域】的技术人员在本发明披露的技术范围内,可显而易见地得到的技术方案的简单变化或等效替换均落入本发明的保护范围内。
【权利要求】
1.一种基于语义分析的数据压缩算法,其特征在于,包括以下步骤: 1)打开要进行压缩的C语言文本文件,按照C语言对于文本的分类,依次获取各个关键元素,忽略次要元素,并保存在一个双向链表LinkSrc中; 2)遍历链表LinkSrc,统计各个元素出现的次数,以该元素的基本信息为节点,新建立成一个双向链表LinkRate ;3)以链表LinkRate中的节点做为叶子节点,组成一颗哈夫曼树,树根为LinkRoot; 4)将LinkRoot中的叶子节点复制并保存为一个数组Code,记录叶子节点对应的哈夫曼编码; 5)遍历LinkSrc,将其中的内容转换为数组Code中对应的哈夫曼编码,保存到对应的压缩文件中; 6)将哈夫曼树保存到文件中,该文件名对应于相应的源文件; 7)利用上述方法的逆运算实现解码,在解压的过程中,将忽略掉的内容进行恢复。
2.根据权利要求1所述的基于语义分析的数据压缩算法,其特征在于,所述文本的分类包括关键字、变量、常量、字符串、字符、注释。
3.根据权利要求1所述的基于语义分析的数据压缩算法,其特征在于,所述基本信息包括类型、频度、内容、长度、编码。
【文档编号】H03M7/30GK103731154SQ201310533958
【公开日】2014年4月16日 申请日期:2013年11月1日 优先权日:2013年11月1日
【发明者】洪歧 申请人:陕西理工学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1