一种用于短小自然语言的压缩算法的制作方法

文档序号:7514588阅读:243来源:国知局

专利名称::一种用于短小自然语言的压缩算法的制作方法
技术领域
:本发明涉及一种用于短小自然语言的压缩算法,主要用于对手机短信息(SMS),聊天对话等的压縮。
背景技术
:在无损压縮领域,基于字典原理的LZ(Lempel-Ziv)压縮算法以其快速有效的压缩效果成为许多通用压縮工具如AR丄RKZIP、Gzip、Winrar等的技术实现的核心算法。基于字典的LZ系列编码包括LZ77算法、LZSS算法、LZ78算法、LZW算法等几种基本算法,LZ78和LZW是通用数据压縮的主流。LZ78和LZW两种算法的编译码方法较为复杂,实现起来较为困难,不适合在单片机、手机上实现。游程编码是针对一些文本数据的特点所设计的,这种算法通过统计待压缩数据中的重复字符、去除文本中的冗余字符或字节中的冗余位,从而达到减少数据文件所占的存储空间的目的。压縮处理的流程类似于空白压縮,区别仅在于要在压縮指示字符之后加上一个字符,用于表明压縮对象。随后是该字符的重复次数。由于该算法是针对文件的某些特点所设计的,所以应用起来具有一定的局限性。哈夫曼编码也称前缀编码,它是根据每个字符出现的频率而进行编码的,要求任一字符的编码都不是其它任一字符编码的前缀且字符编码的总长度为最短。它主要应用于通信及数据的传送以及对信息的压縮处理等方面,哈夫曼编码的基础是依据字符出现的频率值而构造一棵哈夫曼树,从而实现最短的编码表示最常用的数据块或出现频率最高的数据。上述算法在针对短小文本的效果都不好,经过测试LZ算法对小于200Byte的文本几乎没有效果,而且算法复杂,在单片机、手机等计算能力不强的计算机上不容易实现,游程编码局限性很大,传统的哈夫曼编码因为要记录字典,对于小文本的压縮可能比原来的文本还大。
发明内容本发明的技术解决问题是克服了现有压縮算法的不足,提供一种针对短小自然语言文本的无损压缩算法,该算法的比现有压縮算法的压縮比高。本发明的技术解决方案一种用于短小自然语言的压縮算法,步骤如下:第一步,对自然语言中每一个字出现的次数进行大量统计,一般在30'多万次以上统计,并计算出每一个字出现的字频,得到字频采样表;第二步,基于第一步中获得的字频,将自然语言分为高频字符、低频字符和ASCII码字符,对属于累积频率总和为a的高频字符、属于其它频率总和为1-a,看作一个字符d)的低频字符、看作一个字符W的ASCII码字符组合在一起进行编码,得到初步的编码结果;所述的编码采用哈夫曼编码方法,a的取值范围为95%-99%;第三步,调整参数a,使得初步的固定编码的结果小于16个bit,得到最后的固定编码结果表,即固定编码字典;第四步,基于第三步得到的固定编码结果表,对输入的短小自然语言采用重编码的方式实现压縮,得到压縮后的二进制串B;第五步,根据第三步得到的固定编码结果表,对第四步己压縮的二进制串进行还原,实现解压縮,还原为自然语言。所述第四步对短小自然语言重编码方法如下a.对于一个需要编码的短小自然语言中的字符A,査找该字符A是否属于频率总和为a的自然语言,如果属于,则A编码为A对应的二进制串;b.如果该字A属于其它频率总和为1-a的自然语言,则编码为字符O对应二进制串加上该字A的原码;c.如果A为ASCII码,则编码为ASCII码对应的二进制串B加上该字A的7位ASCII码。所述第五步中还原为自然语言的方法如下d.对每一次从待解码的二进制串B中读入一个比特,插入至二进制串C中,直到二进制串C在固定编码中有对应的结果;e.如果二进制串C对应的字符为①,则还原为从B中继续读出的原码;f.如果二进制串C对应的字符为甲,则从B中继续读出7bit,还原为ASCII码。本发明的原理本发明主要运用统计学原理,在自然语言中研究对象的全体(总体)为所有字符的结合,如汉语中总体为汉字、符号、拉丁文字的集合的并集。设自然语言的符号集合为X={Xl,x2,x3……,xn},如汉语中汉字、符号、拉丁文字的集合的并集。Xi为X中的一个字符,XjGX;x的分布函数为F(xk)=fk,且|;乂=1;一个短小自JI语言文本即是对X的抽样,假设一次自然语言为U^^,U2,U3……,Um.假设Xi的编码后长度为li,假设求文本编码后的长度为LL(U)为自然语言LH,U2,U3……,Um编码后的长度,E(L(U))-E(L(U!,U2,U3……,Um))-腦l;a;x/,),为了达到L(u)的期望最小,即l;(乂x/,.)最小,只需要对总体x的每个字符(XlX2,X3……,Xj以频率(f^2,f3……,fj进行哈夫曼编码。对于分布函数F(Xk)中的参数f!,f2,f3……,fn的求得,可采用频率估计法,对大量的抽样进行频率估计,即
发明内容中的第一步。本发明与现有技术相比的优点在于-(1)现有的压缩算法压縮后的文本显示或隐示包含了编码字典;而本发明将编码字典固定(即权利要求1的步骤(3)所述),不包含在编码后的文本中,因此在压縮文本小于800Byte的情况下,比现在通用的LZ算法压縮比高(高多少,最好给出具体的数值比较),减小了占用的存储空间,所以针对短小的自然语言文本比现有算法有优势,在单片机手机上易于实现,可用于短信息的压縮,聊天对话的压缩等。(2)此外,本发明的压缩方法合理的处理了不常见字和汉字中夹杂符号的情况,使得算法实用性增强,另外也使得字典不至于太大。压縮算法实质为简单的査找替换操作,运算简单,计算需要资源少。(3)另外,本发明的方法在被解压二进制串中不包含编码字典的情况下利用固定编码字典还原文本,使得文本在比较短小的时候仍然具有一定压縮比,进一步达到了压縮短小文本的目的。图1为本发明方法的实现流程图2为本发明中的压縮的流程图3为本发明中的还原为自然语言的流程图4为本发明和LZ算法的对比,依次改变数据量对比压縮比;图5为本发明的一个应用场景,一个用J2ME实现的手机短信压縮程序的使用效果。具体实施例方式本发明在手机上实现了一个短信息压缩程序,短信息服务(ShortMessageService简称SMS),是通过手机发送和接收有限长度的文本信息的功能。根据GSM无线数字蜂窝通信系统网络规范,一条短信息可以包含160个英文字母(7bit编码)或70个中文汉字Unicode编码。短信息在发送前先压縮在收到后进行解压縮。开发环境使用SUN公司的J2ME技术实现。首先进行字频的统计,对于手机的应用场景,采样总体为所有汉字、标点;符号、拉丁字母等。本发明对344209个字进行统计,为了使得采样更加具有通用性,根据应用特点分类采样了一些小说、新闻、短信等文字。并对出现的概率进行了计算,得到字频采样表,表1列出字频前10的汉字。表l<table>tableseeoriginaldocumentpage6</column></row><table>然后根据统计的词频对字符进行编码,生成固定编码字典。基于上一步中获得的字频,将自然语言分为高频字符、低频字符和ASCII码字符。首先选出统计结果中属于累积频率总和为a的高频字符,并将其它频率总和为1-a的字符算为一个汉字,助记符为O,对应字频为1-a,将所有ASCII码字符算为一个汉字,助记符为^,它的字频为所有ASCII码的字频总和。将选出的高频字和对应的频率和^、少合在一起迸行编码,编码算法使用哈夫曼编码,即按照哈夫曼算法对于每个字符的字频生成哈夫曼树,调整参数a使得编码二进制串的结果小于16个b'rt。经过调整后,实例中编码的汉字为2368个,a取值为98%。进行编码后使得每个汉字有一个二进制串对应,此对应关系为一张编码表,即固定编码字典。如"的"对应的二进制0110化,①对应二进制011101b。该编码字典只生成一次,结果保存在文件中,最后字典文件大小为11.8kByte,因为字典不大,方便在手机中使用。表2列出词频前10的汉字的原码和对应的二进制。表2<table>tableseeoriginaldocumentpage6</column></row><table>我60讓00x'CED2是6001000OxCAC7不6000101OxB2BB人71111101OxC8CB有7moioiOxD3D0大70100110OxB4F3好70100100OxBAC3在70100010OxD崔了7ooimiOxC1CB压缩和解压縮即根据固定编码字典对需要压縮的文字编码和解码的过程。本发明该过程在手机中实现,实现过程运用了SUN公司的J2ME技术。压缩即编码过程中,对于一个需要压縮字A,如果A为ASCII码则编码为W加上A的7位ASCII码。否则在固定编码表中查找A是否属于累积频率总和为a的高频字符,如果不属于,编码为①对应二进制加上A的原码。如果属于,直接编码为A对应的二进制串。例如在本发明实现中①的编码为bO"10,W的编码为bO""。A如果拉丁字母'a'的情况下,'a,的ASCII码为b1100001,则编码为b01111+b1100001即b011"110。001。A如果为生僻字"航","航"的GB2312码为OxBABD即b1011101010111101。因为GB2312的每一个汉字的编码对应二进制的第一个bit必定为1,因此只用记录去掉两个bit的剩下14个bit,因此A字编码为O对应二进制串加上A的原码bO"101+bO111O1OD""01即b01110101110100111101。这种情况下,虽然编码后结果会增大。但出现这种生僻字的概率是很小的,因此这样编码也是科学的。A如果为"我"字,则直接编码为"我"对应二进制串b010000。图2为压縮过程的流程图。对于解压縮(解码)的过程为,每次从待解压字串B中读入一个比特到另一个二进制串C,直到二进制串C在编码表中有对应的字符。如果对应的字符不是O和V,解码为所对应的字符的码。如果对应的字符是O,则继续读出14个二进制,该二进制前每7位加上共两个二进制1还原为原码。如果对应的字符是^,继续读7个bit,还原为ASCII码。例如解压程序收到二进制串0100000010001111对其进行解压縮,过成如下先读一位2进制'0'到C,查找字典。并没有和'0'对应的汉字。于是读下一个2进制,C变为'01',査找字典。没有和'01'对应的汉字。一直读下去一直到C为'010000,时,'我'字和其进行对应。解压出'我'字。C清空。同理解压出'是'字。这样就实现了解压缩。对于读到C为01111,则继续向后读取7位,前面加0变为8位,还原为ASCII码。对于读到011101即继续向后读取14位,加上两个1变为16位,还原为汉字。图3'鬼示了解压縮过程的流程。本发明不但适用于中文的压缩,也可以适用于日语、韩语等国语言。还可以支持拉丁语系的文字(如英语、德语、法语等)。对于日语、韩语等类似中文的语言,其处理方式如实施例和中文一样。对于拉丁语系的文字(如英语、德语、法语等),本发明可针对常用的词进行编码,对于常用词以外的词,可采用类似处理不常用汉字的方法,运用原码表示。本发明不但可以在手机短信上运用,还可以在实时聊天工具中使用(如QQ、MSN中),聊天过程使用大量的短小自然语言,如将这些数据在发送前客户端先进行压缩接收客户端收到和再解压显示。这样在传输过程中会一定程度的降低网络的带宽占用,也使得服务器的计算负载有所减轻,还起到了一定的加密作用。本发明的性能测试为了对比该发明相比现有算法在一定范围内的优越性,选取了流行的采用LZ算法的压缩软件winrar和本发明算法进行对比。选取了大小从1Byte到3kByte大小不等的样本文本,记录压缩前的文本大小和压縮后的文本大小,计算压缩比。对比结果如图4所示。由图可以看出,本算法的压缩比和被压缩的文本长度无关,据统计,本发明对于汉字的平均压缩比为1.47。而LZ算法的压缩比随着文本长度的增加而增加在样本文本小于500Byte时压缩比为1,也就是基本没有压縮效果。经测试本发明在被压縮数据小于800Byte时比现有LZ算法更有优势。图5为本发明的应用场景一个用J2ME实现的手机短信压缩程序的使用效果。一条短信息可以包含70个中文(16bit编码),通过使用本发明后平均一条短信可以包含105个汉字,增加单条信息包含的信息量。本发明未详细阐述的部分属本领域技术人员公知技术。权利要求1、一种用于短小自然语言的压缩算法,其特征在于步骤如下第一步,对自然语言中每一个字出现的次数进行30多万次以上统计,并计算出每一个字出现的字频,得到字频采样表;第二步,基于第一步中获得的字频,将自然语言分为高频字符、低频字符和ASCII码字符,对属于累积频率总和为α的高频字符、属于其它频率总和为1-α,看作一个字符Φ的低频字符、看作一个字符Ψ的ASCII码字符组合在一起进行编码,得到初步的编码结果;所述的编码采用哈夫曼编码方法,a的取值范围为95%-99%;第三步,调整参数a,使得初步的固定编码的结果小于16个bit,得到最后的固定编码结果表,即固定编码字典;第四步,基于第三步得到的固定编码结果表,对输入的短小自然语言采用重编码的方式实现压缩,得到压缩后的二进制串B;第五步,根据第三步得到的固定编码结果表,对第四步已压缩的二进制串进行还原,实现解压缩,还原为自然语言。2、根据权利要求1所述的用于短小自然语言的压缩算法,其特征在于所述第四步中对短小自然语言重编码方法如下(1)对于一个需要编码的短小自然语言中的字符A,查找该字符A是否属于频率总和为a的自然语言,如果属于,则A编码为A对应的二进制串;(2)如果该字A属于其它频率总和为1-a的自然语言,则编码为字符①对应二进制串加上该字A的原码;(3)如果A为ASCII码,则编码为ASCII码对应的二进制串B加上该字A的7位ASCII码。3、根据权利要求1所述的用于短小自然语言的压縮算法,其特征在于所述第五步中还原为自然语言的方法如下(1)对每一次从待解码的二进制串B中读入一个比特,插入至二进制串C中,直到二进制串C在固定编码中有对应的结果;(2)如果二进制串C对应的字符为O,则还原为从B中继续读出的原码;(3)如果二进制串C对应的字符为W,则从B中继续读出7bit,还原为ASCII码;全文摘要一种用于短小自然语言的压缩算法(1)对自然语言中每一个字出现的次数进行大量统计,并计算出每一个字出现的字频;(2)用得到的字频,将自然语言分为高频字符、低频字符和ASCII码字符,对属于累积频率总和为α的高频字符、属于其它频率总和为1-α,看作一个字符Φ的低频字符、看作一个字符Ψ的ASCII码字符组合在一起进行编码,得到初步的编码结果,α的取值范围为97%-99%;(3)调整参数α,使得初步的固定编码的结果小于16个bit,得到最后的固定编码结果表;(4)对输入的短小自然语言采用重编码的方式实现压缩,得到压缩后的二进制串;(5)对第四步已压缩的二进制串进行还原,实现解压缩,还原为自然语言。本发明对于自然语言文本的压缩比在1.5左右且和文本的长度无关,在压缩文本小于800Byte的情况下,比现在通用的LZ算法压缩比高。文档编号H03M7/30GK101534124SQ20081023975公开日2009年9月16日申请日期2008年12月16日优先权日2008年12月16日发明者杨硕磊,赵沁平,郝爱民,攀魏申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1