專利名稱::一種用于短小自然語言的壓縮算法的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種用于短小自然語言的壓縮算法,主要用于對手機短信息(SMS),聊天對話等的壓縮。
背景技術(shù):
:在無損壓縮領(lǐng)域,基于字典原理的LZ(Lempel-Ziv)壓縮算法以其快速有效的壓縮效果成為許多通用壓縮工具如AR丄RKZIP、Gzip、Winrar等的技術(shù)實現(xiàn)的核心算法?;谧值涞腖Z系列編碼包括LZ77算法、LZSS算法、LZ78算法、LZW算法等幾種基本算法,LZ78和LZW是通用數(shù)據(jù)壓縮的主流。LZ78和LZW兩種算法的編譯碼方法較為復(fù)雜,實現(xiàn)起來較為困難,不適合在單片機、手機上實現(xiàn)。游程編碼是針對一些文本數(shù)據(jù)的特點所設(shè)計的,這種算法通過統(tǒng)計待壓縮數(shù)據(jù)中的重復(fù)字符、去除文本中的冗余字符或字節(jié)中的冗余位,從而達到減少數(shù)據(jù)文件所占的存儲空間的目的。壓縮處理的流程類似于空白壓縮,區(qū)別僅在于要在壓縮指示字符之后加上一個字符,用于表明壓縮對象。隨后是該字符的重復(fù)次數(shù)。由于該算法是針對文件的某些特點所設(shè)計的,所以應(yīng)用起來具有一定的局限性。哈夫曼編碼也稱前綴編碼,它是根據(jù)每個字符出現(xiàn)的頻率而進行編碼的,要求任一字符的編碼都不是其它任一字符編碼的前綴且字符編碼的總長度為最短。它主要應(yīng)用于通信及數(shù)據(jù)的傳送以及對信息的壓縮處理等方面,哈夫曼編碼的基礎(chǔ)是依據(jù)字符出現(xiàn)的頻率值而構(gòu)造一棵哈夫曼樹,從而實現(xiàn)最短的編碼表示最常用的數(shù)據(jù)塊或出現(xiàn)頻率最高的數(shù)據(jù)。上述算法在針對短小文本的效果都不好,經(jīng)過測試LZ算法對小于200Byte的文本幾乎沒有效果,而且算法復(fù)雜,在單片機、手機等計算能力不強的計算機上不容易實現(xiàn),游程編碼局限性很大,傳統(tǒng)的哈夫曼編碼因為要記錄字典,對于小文本的壓縮可能比原來的文本還大。
發(fā)明內(nèi)容本發(fā)明的技術(shù)解決問題是克服了現(xiàn)有壓縮算法的不足,提供一種針對短小自然語言文本的無損壓縮算法,該算法的比現(xiàn)有壓縮算法的壓縮比高。本發(fā)明的技術(shù)解決方案一種用于短小自然語言的壓縮算法,步驟如下:第一步,對自然語言中每一個字出現(xiàn)的次數(shù)進行大量統(tǒng)計,一般在30'多萬次以上統(tǒng)計,并計算出每一個字出現(xiàn)的字頻,得到字頻采樣表;第二步,基于第一步中獲得的字頻,將自然語言分為高頻字符、低頻字符和ASCII碼字符,對屬于累積頻率總和為a的高頻字符、屬于其它頻率總和為1-a,看作一個字符d)的低頻字符、看作一個字符W的ASCII碼字符組合在一起進行編碼,得到初步的編碼結(jié)果;所述的編碼采用哈夫曼編碼方法,a的取值范圍為95%-99%;第三步,調(diào)整參數(shù)a,使得初步的固定編碼的結(jié)果小于16個bit,得到最后的固定編碼結(jié)果表,即固定編碼字典;第四步,基于第三步得到的固定編碼結(jié)果表,對輸入的短小自然語言采用重編碼的方式實現(xiàn)壓縮,得到壓縮后的二進制串B;第五步,根據(jù)第三步得到的固定編碼結(jié)果表,對第四步己壓縮的二進制串進行還原,實現(xiàn)解壓縮,還原為自然語言。所述第四步對短小自然語言重編碼方法如下a.對于一個需要編碼的短小自然語言中的字符A,査找該字符A是否屬于頻率總和為a的自然語言,如果屬于,則A編碼為A對應(yīng)的二進制串;b.如果該字A屬于其它頻率總和為1-a的自然語言,則編碼為字符O對應(yīng)二進制串加上該字A的原碼;c.如果A為ASCII碼,則編碼為ASCII碼對應(yīng)的二進制串B加上該字A的7位ASCII碼。所述第五步中還原為自然語言的方法如下d.對每一次從待解碼的二進制串B中讀入一個比特,插入至二進制串C中,直到二進制串C在固定編碼中有對應(yīng)的結(jié)果;e.如果二進制串C對應(yīng)的字符為①,則還原為從B中繼續(xù)讀出的原碼;f.如果二進制串C對應(yīng)的字符為甲,則從B中繼續(xù)讀出7bit,還原為ASCII碼。本發(fā)明的原理本發(fā)明主要運用統(tǒng)計學(xué)原理,在自然語言中研究對象的全體(總體)為所有字符的結(jié)合,如漢語中總體為漢字、符號、拉丁文字的集合的并集。設(shè)自然語言的符號集合為X={Xl,x2,x3……,xn},如漢語中漢字、符號、拉丁文字的集合的并集。Xi為X中的一個字符,XjGX;x的分布函數(shù)為F(xk)=fk,且|;乂=1;一個短小自JI語言文本即是對X的抽樣,假設(shè)一次自然語言為U^^,U2,U3……,Um.假設(shè)Xi的編碼后長度為li,假設(shè)求文本編碼后的長度為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進行哈夫曼編碼。對于分布函數(shù)F(Xk)中的參數(shù)f!,f2,f3……,fn的求得,可采用頻率估計法,對大量的抽樣進行頻率估計,即
發(fā)明內(nèi)容中的第一步。本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點在于-(1)現(xiàn)有的壓縮算法壓縮后的文本顯示或隱示包含了編碼字典;而本發(fā)明將編碼字典固定(即權(quán)利要求1的步驟(3)所述),不包含在編碼后的文本中,因此在壓縮文本小于800Byte的情況下,比現(xiàn)在通用的LZ算法壓縮比高(高多少,最好給出具體的數(shù)值比較),減小了占用的存儲空間,所以針對短小的自然語言文本比現(xiàn)有算法有優(yōu)勢,在單片機手機上易于實現(xiàn),可用于短信息的壓縮,聊天對話的壓縮等。(2)此外,本發(fā)明的壓縮方法合理的處理了不常見字和漢字中夾雜符號的情況,使得算法實用性增強,另外也使得字典不至于太大。壓縮算法實質(zhì)為簡單的査找替換操作,運算簡單,計算需要資源少。(3)另外,本發(fā)明的方法在被解壓二進制串中不包含編碼字典的情況下利用固定編碼字典還原文本,使得文本在比較短小的時候仍然具有一定壓縮比,進一步達到了壓縮短小文本的目的。圖1為本發(fā)明方法的實現(xiàn)流程圖2為本發(fā)明中的壓縮的流程圖3為本發(fā)明中的還原為自然語言的流程圖4為本發(fā)明和LZ算法的對比,依次改變數(shù)據(jù)量對比壓縮比;圖5為本發(fā)明的一個應(yīng)用場景,一個用J2ME實現(xiàn)的手機短信壓縮程序的使用效果。具體實施例方式本發(fā)明在手機上實現(xiàn)了一個短信息壓縮程序,短信息服務(wù)(ShortMessageService簡稱SMS),是通過手機發(fā)送和接收有限長度的文本信息的功能。根據(jù)GSM無線數(shù)字蜂窩通信系統(tǒng)網(wǎng)絡(luò)規(guī)范,一條短信息可以包含160個英文字母(7bit編碼)或70個中文漢字Unicode編碼。短信息在發(fā)送前先壓縮在收到后進行解壓縮。開發(fā)環(huán)境使用SUN公司的J2ME技術(shù)實現(xiàn)。首先進行字頻的統(tǒng)計,對于手機的應(yīng)用場景,采樣總體為所有漢字、標(biāo)點;符號、拉丁字母等。本發(fā)明對344209個字進行統(tǒng)計,為了使得采樣更加具有通用性,根據(jù)應(yīng)用特點分類采樣了一些小說、新聞、短信等文字。并對出現(xiàn)的概率進行了計算,得到字頻采樣表,表1列出字頻前10的漢字。表l<table>tableseeoriginaldocumentpage6</column></row><table>然后根據(jù)統(tǒng)計的詞頻對字符進行編碼,生成固定編碼字典。基于上一步中獲得的字頻,將自然語言分為高頻字符、低頻字符和ASCII碼字符。首先選出統(tǒng)計結(jié)果中屬于累積頻率總和為a的高頻字符,并將其它頻率總和為1-a的字符算為一個漢字,助記符為O,對應(yīng)字頻為1-a,將所有ASCII碼字符算為一個漢字,助記符為^,它的字頻為所有ASCII碼的字頻總和。將選出的高頻字和對應(yīng)的頻率和^、少合在一起迸行編碼,編碼算法使用哈夫曼編碼,即按照哈夫曼算法對于每個字符的字頻生成哈夫曼樹,調(diào)整參數(shù)a使得編碼二進制串的結(jié)果小于16個b'rt。經(jīng)過調(diào)整后,實例中編碼的漢字為2368個,a取值為98%。進行編碼后使得每個漢字有一個二進制串對應(yīng),此對應(yīng)關(guān)系為一張編碼表,即固定編碼字典。如"的"對應(yīng)的二進制0110化,①對應(yīng)二進制011101b。該編碼字典只生成一次,結(jié)果保存在文件中,最后字典文件大小為11.8kByte,因為字典不大,方便在手機中使用。表2列出詞頻前10的漢字的原碼和對應(yīng)的二進制。表2<table>tableseeoriginaldocumentpage6</column></row><table>我60讓00x'CED2是6001000OxCAC7不6000101OxB2BB人71111101OxC8CB有7moioiOxD3D0大70100110OxB4F3好70100100OxBAC3在70100010OxD崔了7ooimiOxC1CB壓縮和解壓縮即根據(jù)固定編碼字典對需要壓縮的文字編碼和解碼的過程。本發(fā)明該過程在手機中實現(xiàn),實現(xiàn)過程運用了SUN公司的J2ME技術(shù)。壓縮即編碼過程中,對于一個需要壓縮字A,如果A為ASCII碼則編碼為W加上A的7位ASCII碼。否則在固定編碼表中查找A是否屬于累積頻率總和為a的高頻字符,如果不屬于,編碼為①對應(yīng)二進制加上A的原碼。如果屬于,直接編碼為A對應(yīng)的二進制串。例如在本發(fā)明實現(xiàn)中①的編碼為bO"10,W的編碼為bO""。A如果拉丁字母'a'的情況下,'a,的ASCII碼為b1100001,則編碼為b01111+b1100001即b011"110。001。A如果為生僻字"航","航"的GB2312碼為OxBABD即b1011101010111101。因為GB2312的每一個漢字的編碼對應(yīng)二進制的第一個bit必定為1,因此只用記錄去掉兩個bit的剩下14個bit,因此A字編碼為O對應(yīng)二進制串加上A的原碼bO"101+bO111O1OD""01即b01110101110100111101。這種情況下,雖然編碼后結(jié)果會增大。但出現(xiàn)這種生僻字的概率是很小的,因此這樣編碼也是科學(xué)的。A如果為"我"字,則直接編碼為"我"對應(yīng)二進制串b010000。圖2為壓縮過程的流程圖。對于解壓縮(解碼)的過程為,每次從待解壓字串B中讀入一個比特到另一個二進制串C,直到二進制串C在編碼表中有對應(yīng)的字符。如果對應(yīng)的字符不是O和V,解碼為所對應(yīng)的字符的碼。如果對應(yīng)的字符是O,則繼續(xù)讀出14個二進制,該二進制前每7位加上共兩個二進制1還原為原碼。如果對應(yīng)的字符是^,繼續(xù)讀7個bit,還原為ASCII碼。例如解壓程序收到二進制串0100000010001111對其進行解壓縮,過成如下先讀一位2進制'0'到C,查找字典。并沒有和'0'對應(yīng)的漢字。于是讀下一個2進制,C變?yōu)?01',査找字典。沒有和'01'對應(yīng)的漢字。一直讀下去一直到C為'010000,時,'我'字和其進行對應(yīng)。解壓出'我'字。C清空。同理解壓出'是'字。這樣就實現(xiàn)了解壓縮。對于讀到C為01111,則繼續(xù)向后讀取7位,前面加0變?yōu)?位,還原為ASCII碼。對于讀到011101即繼續(xù)向后讀取14位,加上兩個1變?yōu)?6位,還原為漢字。圖3'鬼示了解壓縮過程的流程。本發(fā)明不但適用于中文的壓縮,也可以適用于日語、韓語等國語言。還可以支持拉丁語系的文字(如英語、德語、法語等)。對于日語、韓語等類似中文的語言,其處理方式如實施例和中文一樣。對于拉丁語系的文字(如英語、德語、法語等),本發(fā)明可針對常用的詞進行編碼,對于常用詞以外的詞,可采用類似處理不常用漢字的方法,運用原碼表示。本發(fā)明不但可以在手機短信上運用,還可以在實時聊天工具中使用(如QQ、MSN中),聊天過程使用大量的短小自然語言,如將這些數(shù)據(jù)在發(fā)送前客戶端先進行壓縮接收客戶端收到和再解壓顯示。這樣在傳輸過程中會一定程度的降低網(wǎng)絡(luò)的帶寬占用,也使得服務(wù)器的計算負載有所減輕,還起到了一定的加密作用。本發(fā)明的性能測試為了對比該發(fā)明相比現(xiàn)有算法在一定范圍內(nèi)的優(yōu)越性,選取了流行的采用LZ算法的壓縮軟件winrar和本發(fā)明算法進行對比。選取了大小從1Byte到3kByte大小不等的樣本文本,記錄壓縮前的文本大小和壓縮后的文本大小,計算壓縮比。對比結(jié)果如圖4所示。由圖可以看出,本算法的壓縮比和被壓縮的文本長度無關(guān),據(jù)統(tǒng)計,本發(fā)明對于漢字的平均壓縮比為1.47。而LZ算法的壓縮比隨著文本長度的增加而增加在樣本文本小于500Byte時壓縮比為1,也就是基本沒有壓縮效果。經(jīng)測試本發(fā)明在被壓縮數(shù)據(jù)小于800Byte時比現(xiàn)有LZ算法更有優(yōu)勢。圖5為本發(fā)明的應(yīng)用場景一個用J2ME實現(xiàn)的手機短信壓縮程序的使用效果。一條短信息可以包含70個中文(16bit編碼),通過使用本發(fā)明后平均一條短信可以包含105個漢字,增加單條信息包含的信息量。本發(fā)明未詳細闡述的部分屬本領(lǐng)域技術(shù)人員公知技術(shù)。權(quán)利要求1、一種用于短小自然語言的壓縮算法,其特征在于步驟如下第一步,對自然語言中每一個字出現(xiàn)的次數(shù)進行30多萬次以上統(tǒng)計,并計算出每一個字出現(xiàn)的字頻,得到字頻采樣表;第二步,基于第一步中獲得的字頻,將自然語言分為高頻字符、低頻字符和ASCII碼字符,對屬于累積頻率總和為α的高頻字符、屬于其它頻率總和為1-α,看作一個字符Φ的低頻字符、看作一個字符Ψ的ASCII碼字符組合在一起進行編碼,得到初步的編碼結(jié)果;所述的編碼采用哈夫曼編碼方法,a的取值范圍為95%-99%;第三步,調(diào)整參數(shù)a,使得初步的固定編碼的結(jié)果小于16個bit,得到最后的固定編碼結(jié)果表,即固定編碼字典;第四步,基于第三步得到的固定編碼結(jié)果表,對輸入的短小自然語言采用重編碼的方式實現(xiàn)壓縮,得到壓縮后的二進制串B;第五步,根據(jù)第三步得到的固定編碼結(jié)果表,對第四步已壓縮的二進制串進行還原,實現(xiàn)解壓縮,還原為自然語言。2、根據(jù)權(quán)利要求1所述的用于短小自然語言的壓縮算法,其特征在于所述第四步中對短小自然語言重編碼方法如下(1)對于一個需要編碼的短小自然語言中的字符A,查找該字符A是否屬于頻率總和為a的自然語言,如果屬于,則A編碼為A對應(yīng)的二進制串;(2)如果該字A屬于其它頻率總和為1-a的自然語言,則編碼為字符①對應(yīng)二進制串加上該字A的原碼;(3)如果A為ASCII碼,則編碼為ASCII碼對應(yīng)的二進制串B加上該字A的7位ASCII碼。3、根據(jù)權(quán)利要求1所述的用于短小自然語言的壓縮算法,其特征在于所述第五步中還原為自然語言的方法如下(1)對每一次從待解碼的二進制串B中讀入一個比特,插入至二進制串C中,直到二進制串C在固定編碼中有對應(yīng)的結(jié)果;(2)如果二進制串C對應(yīng)的字符為O,則還原為從B中繼續(xù)讀出的原碼;(3)如果二進制串C對應(yīng)的字符為W,則從B中繼續(xù)讀出7bit,還原為ASCII碼;全文摘要一種用于短小自然語言的壓縮算法(1)對自然語言中每一個字出現(xiàn)的次數(shù)進行大量統(tǒng)計,并計算出每一個字出現(xiàn)的字頻;(2)用得到的字頻,將自然語言分為高頻字符、低頻字符和ASCII碼字符,對屬于累積頻率總和為α的高頻字符、屬于其它頻率總和為1-α,看作一個字符Φ的低頻字符、看作一個字符Ψ的ASCII碼字符組合在一起進行編碼,得到初步的編碼結(jié)果,α的取值范圍為97%-99%;(3)調(diào)整參數(shù)α,使得初步的固定編碼的結(jié)果小于16個bit,得到最后的固定編碼結(jié)果表;(4)對輸入的短小自然語言采用重編碼的方式實現(xiàn)壓縮,得到壓縮后的二進制串;(5)對第四步已壓縮的二進制串進行還原,實現(xiàn)解壓縮,還原為自然語言。本發(fā)明對于自然語言文本的壓縮比在1.5左右且和文本的長度無關(guān),在壓縮文本小于800Byte的情況下,比現(xiàn)在通用的LZ算法壓縮比高。文檔編號H03M7/30GK101534124SQ20081023975公開日2009年9月16日申請日期2008年12月16日優(yōu)先權(quán)日2008年12月16日發(fā)明者楊碩磊,趙沁平,郝愛民,攀魏申請人:北京航空航天大學(xué)