專利名稱::一種支持ansi編碼的中文文本的壓縮方法
技術領域:
:本發(fā)明涉及數(shù)據(jù)編碼和數(shù)據(jù)壓縮領域,特別是涉及一種支持ANSI編碼的中文文本的壓縮方法。
背景技術:
:數(shù)據(jù)壓縮技術是節(jié)省網(wǎng)絡帶寬及存儲資源、提高數(shù)據(jù)傳輸速度的主要技術手段。數(shù)據(jù)壓縮是指在一定的數(shù)據(jù)存儲空間要求下,將相對龐大的原始數(shù)據(jù),重組為滿足前述空間要求的數(shù)據(jù)集合,使得從該數(shù)據(jù)集合中恢復出來的信息能夠與原始數(shù)據(jù)相一致,或者能夠獲得與原始數(shù)據(jù)一樣的使用品質(zhì)。數(shù)據(jù)之所以能得到壓縮的原因在于數(shù)據(jù)中存在冗余及數(shù)據(jù)所表示的信息之間存在關聯(lián)。數(shù)據(jù)壓縮減少了數(shù)據(jù)存儲所需要的空間,從而間接地減少了處理數(shù)據(jù)所需要的時間及資源耗費。數(shù)據(jù)壓縮技術可分為無損壓縮和有損壓縮兩大類,無損壓縮技術通常又分為基于統(tǒng)計的壓縮技術及基于字典的壓縮技術?;诮y(tǒng)計的壓縮技術根據(jù)字符在數(shù)據(jù)流中的出現(xiàn)頻率對其進行編碼,經(jīng)常出現(xiàn)的字符分配較短的編碼,不常出現(xiàn)的字符分配較長的編碼,代表性技術有霍夫曼(Huffman)編碼。傳統(tǒng)霍夫曼編碼根據(jù)字符出現(xiàn)的頻率構造編碼,是基于字符的(character-based),在編碼過程中沒有產(chǎn)生信息熵的轉(zhuǎn)移,其對自然語言文本的壓縮效果是有限的。當將霍夫曼編碼擴展到基于多個字符時,如基于詞(word-based)或基于音節(jié)(syllable-based)時,霍夫曼編碼的壓縮性能會大幅度提高,這是因為多個字符的組合造成的頻率分布不均衡要比單個字符要大,從而可能獲得更大的壓縮率。對于英文文本,基于字符的霍夫曼編碼的壓縮比能達到1.7左右,而基于單詞的霍夫曼編碼能達到4倍左右的壓縮比。基于詞的霍夫曼編碼不僅能提高壓縮率,同時,由于其在壓縮過程中保留了詞的語義完整性,不像傳統(tǒng)霍夫曼編碼方法將文本分為一個個字節(jié),人為地割裂了文本中單詞的語義,因而在壓縮文本的檢索方面效果更好,速度更快。但是,霍夫曼編碼為變長編碼,絕大多數(shù)碼字不是整數(shù)字節(jié)長度,其輸出結(jié)果不易被其它壓縮算法再處理。對于中文數(shù)據(jù)流來講,具有與英文數(shù)據(jù)流不同的特征1)編碼特征,印歐語系主要采用ASCII編碼,是單字節(jié)編碼;而中文漢字數(shù)量巨大,必須采用多字節(jié)編碼才能表示,表示漢語的編碼主要包括GB2312-80、GBK、Unicode編碼、GB18030隱2000、BIG5等ANSI編碼,因此壓縮算法為保持數(shù)據(jù)流中的語義信息,必須能處理雙字節(jié)編碼。2)構成英文的基本單位為字母,只有26個,而構成中文的基本單位為字,僅GB2312中的漢字就達6763個,因此,每種語言基本單位中所含的信息量是不同的。3)中文字詞頻率分布的不平衡有著與其它語言不同的特點。據(jù)北京語言學院1985年的統(tǒng)計結(jié)果,漢字中前100字的累計字頻已達47.34%,前500字到了79.76%,2000字覆蓋了98.07%。詞組方面,共計出31159不同的詞,其中單音節(jié)詞占12.2%,雙音節(jié)詞73.6%,三音節(jié)詞7.6%,四音節(jié)詞6.4%五以上的占0.2%,平均詞長2.09。前100詞的累計頻率為41.7%,2000詞為82.2%,9000詞為95.85%。表1為經(jīng)統(tǒng)計的中文文本中字符的分布情況,也說明了漢字的這一特點。表1中總字符包括所有漢字、英文字符、空格、標點符號、換行符等,各個列數(shù)據(jù)為按照在文本中出現(xiàn)頻率降序排序后,前若干個字符出現(xiàn)的總次數(shù)占全文所有字符出現(xiàn)的總次數(shù)的比率。測試樣本為ANSI編碼格式的文本文件。表l中文文本中字符的分布情況<table>tableseeoriginaldocumentpage6</column></row><table>在中文壓縮算法的研究方面,目前最普遍的方法是將英文壓縮軟件直接應用到中文數(shù)據(jù)上。另一種方法是擴大壓縮算法運算的基本單位,如將字符比較及字符頻率計算的基本單位擴大到多字節(jié)方式。再一種方法是考慮中文大字符集的特點,對漢字進行重新編碼,形成基于"中文字符"的霍夫曼壓縮算法。如GhimHweeOng和ShellYingHuang在《CompressionofChineseTextFilesUsingaMultipleFour-BitCodingScheme》一文中才艮據(jù)被壓縮文本中漢字的頻率分布,為漢字分配4到20位長的碼字。PhilVines禾口JustinZobel在《CompressionTechniquesforChineseText》一文中實現(xiàn)了一個基于大規(guī)模的漢語語料庫的漢語文本的壓縮算法,該算法壓縮性能很高,平均壓縮比達到2.25(3.56bpc)。公知的,數(shù)據(jù)流中所包含的信息量由熵和算法信息內(nèi)容(KCC)組成,二者的和為常量或近似于常量,對信息的先驗知識了解越多,壓縮效果就越好。因此,壓縮算法應盡可能充分利用數(shù)據(jù)流中的熵和KCC信息,而KCC與語義信息密切相關,在信息熵一定的情況下,對數(shù)據(jù)流中的語義信息理解、利用越多,取得的壓縮效果也就越好。在上述三種中文數(shù)據(jù)流的壓縮方法中,第一種方法直接將中文數(shù)據(jù)單字節(jié)化,以壓縮ASCII編碼數(shù)據(jù)的方式壓縮ANSI編碼的中文數(shù)據(jù),因為ANSI編碼的中文數(shù)據(jù)以雙字節(jié)表示一個漢字,字母數(shù)字等以單字節(jié)來表示,其語義大多以雙字節(jié)之間的關系或單雙字節(jié)之間的關系來表示,所以該方法從物理上割裂了編碼中蘊含的語義信息,不能充分利用中文數(shù)據(jù)流中蘊含的字符級的語義信息,壓縮性能較差。第二種方法單純將基于字節(jié)的壓縮算法擴展為基于字符的壓縮算法,在進行后續(xù)壓縮時,例如應用到霍夫曼編碼時,其將霍夫曼編碼的字符數(shù)從8位256個字符擴展到16位65536個字符,對應的霍夫曼樹的結(jié)點數(shù)目增加了256倍,極大地降低了壓縮速度。最后一種方法,由于其壓縮結(jié)果是變長的比特流,已經(jīng)不具有字符意義(基于字節(jié)),其基于字節(jié)的頻率分布已接近于隨機數(shù)據(jù),不具有進一步壓縮的余地。綜上所述,迫切需要一種針對中文文本在編碼、語義方面的特點,兼具下述效果的中文數(shù)據(jù)流壓縮方法一是能維持并充分利用數(shù)據(jù)流的語義信息,二是充分兼容當前各種壓縮算法或工具。
發(fā)明內(nèi)容本發(fā)明要解決的技術問題是提供一種能維持并充分利用數(shù)據(jù)流的語義信息,并兼容當前各種壓縮算法或工具的支持ANSI編碼的中文文本的壓縮方法。為實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供了一種支持ANSI編碼的中文文本的壓縮方法,包括下列步驟100)根據(jù)待壓縮中文文本中的字符在字符碼表中的位置,將所述待壓縮中文文本中的字符分別用l個或多個字節(jié)進行編碼,其中,所述字符碼表包括根據(jù)所述待壓縮中文文本中的字符的出現(xiàn)頻率的降序所排列的字符;300)將生成的碼字寫入壓縮文件。在上述壓縮方法中,所述待壓縮中文文本中的字符的出現(xiàn)頻率是所述待壓縮中文文本中的字符在所述待壓縮中文文本中的出現(xiàn)頻率,所述壓縮方法在所述步驟100)前還包括步驟a)統(tǒng)計所述待壓縮中文文本中的字符的總個數(shù)w和所述待壓縮中文文本中的字符的出現(xiàn)頻率;b)根據(jù)所述待壓縮中文文本中的字符的出現(xiàn)頻率的降序,生成所述字符碼表。其中,還包括步驟200)根據(jù)待壓縮中文文本中的詞組在詞組碼表中的位置,將所述待壓縮中文文本中的詞組用多個字節(jié)編碼,其中,所述詞組碼表包括根據(jù)詞組在所述待壓縮中文文本中出現(xiàn)頻率的降序所排列的詞組。其中,在所述步驟200)前還包括步驟c)統(tǒng)計所述待壓縮中文文本中詞組的總個數(shù)和所述詞組在所述待壓縮中文文本中出現(xiàn)頻率;d)根據(jù)所述詞組在所述待壓縮中文文本中出現(xiàn)頻率的降序,生成所述詞組碼表。在上述壓縮方法中,對于所述字符的總個數(shù)w小于4337的情況,所述步驟100)包括步驟101)將所述字符碼表中第n個字符采用l字節(jié)編碼,0<"^240;102)將所述字符碼表中第m個字符采用2字節(jié)編碼,240<m^w。在上述壓縮方法中,對于所述字符的總個數(shù)w等于或大于4337的情況,所述步驟IOO)包括步驟101)將所述字符碼表中第n個字符采用l字節(jié)編碼,0<"《240;112)將所述字符碼表中的第m個字符采用2字節(jié)編碼,240<m《2288;113)將所述字符碼表中的第r個字符采用3字節(jié)編碼,2288<Kw。在上述壓縮方法中,所述步驟200)還包括步驟201)將所述詞組碼表中第p個詞組用2字節(jié)編碼,0</^1536;202)將所述詞組碼表中剩余詞組釆用3字節(jié)編碼。在上述壓縮方法中,所述步驟100)還包括121)將用于區(qū)別所述待壓縮中文文本中的字符的出現(xiàn)頻率的流標識寫入所述壓縮文件。在上述壓縮方法中,所述步驟a)還包括al)將所述字符碼表中的所述字符的總個數(shù)w寫入所述壓縮文件。在上述壓縮方法中,所述待壓縮中文文本中的字符的出現(xiàn)頻率來源于漢語頻率字典。其中,還包括步驟210)#4居待壓縮中文文本中的詞組在詞組碼表中的位置,將所述待壓縮中文文本中的詞組用多個字節(jié)編碼,其中,所述詞組碼表包括根據(jù)詞組在所述漢語頻率字典中統(tǒng)計的出現(xiàn)頻率的降序所排列的詞組。在上述壓縮方法中,生成的碼字中標識了所述生成碼字的字節(jié)個數(shù)。在上述壓縮方法中,所述字符包括ASCII碼、擴展ASCII碼及ANSI方式的漢字編^5馬。在上述壓縮方法中,所述步驟c)還包括cl)將所述詞組碼表中的所述詞組的總個數(shù)寫入所述壓縮文件。在上述壓縮方法中,所述步驟100)還包括131)將所述碼表的指針寫入所述壓縮文件。根據(jù)本發(fā)明的另一方面,還提供了一種根據(jù)上述壓縮方法生成的壓縮文件的解壓縮方法,包括下列步驟1)讀所述壓縮文件內(nèi)的數(shù)據(jù),確定碼字所占字節(jié)個數(shù);2)根據(jù)所述碼字所占字節(jié)個數(shù)確定所述碼字;3)根據(jù)所述碼字輸出所述碼表中對應位置的字符,直到解碼所有碼字,完成所述解壓縮。在上述解壓縮方法中,對于所述碼表是根據(jù)壓縮文件內(nèi)的數(shù)據(jù)生成的情況,還包括步驟11)讀取所述碼表長度;12)根據(jù)所述碼表長度,讀取碼表。在上述解壓縮方法中,對于所述碼表是根據(jù)漢語頻率詞典生成的情況,還包括步驟11,)讀取指向所述碼表的指針;12,)根據(jù)所述碼表的指針,讀取碼表。本發(fā)明根據(jù)數(shù)據(jù)流中的各中文字符的頻率分布進行非連續(xù)變長的整數(shù)字節(jié)編碼,保留了數(shù)據(jù)流中字符的頻率分布,最大限度地保持了中文數(shù)據(jù)流的語義特征,并且能與各種壓縮算法、壓縮軟件配合使用,使其壓縮性能提高4%-30%,平均壓縮率最大可達2.80bpc,即2.86的壓縮比。圖l是根據(jù)本發(fā)明一個實施例的編碼方法流程圖2是根據(jù)本發(fā)明一個實施例的壓縮文件格式;圖3是根據(jù)本發(fā)明一個實施例的詞組碼表內(nèi)雙字詞的格式示意圖;圖4是根據(jù)本發(fā)明一個實施例的詞組碼表內(nèi)多字詞的格式示意圖。具體實施例方式為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結(jié)合附圖,對;f艮據(jù)本發(fā)明一個實施例的支持ANSI編碼的中文文本的壓縮方法進一步詳細說明。根據(jù)本發(fā)明一個實施例,依據(jù)數(shù)據(jù)流中的各字符和詞組的頻率分布進行非連續(xù)變長的編碼,其中所述字符包括ASCII編碼、擴展ASCII碼和及ANSI方式的漢字編碼。非連續(xù)編碼是指,根據(jù)數(shù)據(jù)流中的字符和詞組個數(shù),分別分配不同整數(shù)個字節(jié)長度的編碼,從而最大限度保持其語義特征。對待壓縮中文文本進行編碼時,根據(jù)中文文本中字符和詞組的使用頻率的降序生成的字符碼表和詞組碼表,統(tǒng)稱為CRecode碼表,將中文文本中的字符進行編碼。漢語具有與其它語言不同的特征,其中最主要的特點是雖然漢語字詞數(shù)量非常之多,如1994年冷玉龍等編著的《中華字海》,收字數(shù)多達85000字,包含詞組數(shù)目更是驚人,但是,漢語字詞的使用頻率分布極其不平衡。對于一定的碼長來講,其編碼數(shù)是有限的,如ASCII的最大編碼數(shù)為256個字符,而ANSI編碼為2字節(jié),其最大編碼數(shù)為65536個,但是,由于漢字字詞的使用頻率的不均衡性,所以對中文文本壓縮數(shù)據(jù)來講,如果采用2字節(jié)定長編碼顯然存在編碼冗余。壓縮技術從編碼角度來講就是用冗余最小的編碼方式對數(shù)據(jù)進行編碼。根據(jù)本發(fā)明的實施例,編碼方式可分為包含詞組的編碼方式與不含詞組的編碼方式,可由用戶根據(jù)具體的使用環(huán)境來決定,也可根據(jù)壓縮率進行自動選擇。如圖l的流程圖所示,根據(jù)本發(fā)明的一個具體實施例,對于不包含詞組的中文文本,其編碼具體步驟如下掃描中文文本,統(tǒng)計中文文本中字符的總個數(shù)和各個字符的出現(xiàn)頻率,存入字符頻率表中,其中該表由序號,字符編碼和頻率三列組成。對字符頻率表按頻率降序排列并編號。如果總字符數(shù)小于4337時,采用1字節(jié)和2字節(jié)編碼方式,如表2所示,即在字符頻率表中序號為0至239的字符采用l字節(jié)編碼,序號大于239的字符采用2字節(jié)編碼。如果總字符數(shù)等于或大于4337,采用1、2及3字節(jié)編碼方式,如表2所示,即在字符頻率表中序號為0至239的字符采用1字節(jié)編碼,序號為240至2287的字符采用2字節(jié)編碼,序號大于2287的字符采用3字節(jié)編碼。表2不含詞組方式的字符編碼表<table>tableseeoriginaldocumentpage11</column></row><table>根據(jù)本發(fā)明的另一個具體實施例,對于包含詞組的中文文本,其編碼具體步驟如下掃描中文文本,統(tǒng)計中文文本中字符的總個數(shù)和字符及詞組的出現(xiàn)頻率,分別存入字符頻率表和詞組頻率表中,其中所述詞組包括雙字詞、三字詞、甚至可以根據(jù)需要擴展到更多字詞。對字符頻率表及詞組頻率表按頻率降序進行排序并編號。如表3所示,對排序后的字符頻率表中前240字符,采用1字節(jié)編碼方式,對序號在240至2287之間的字符采用2字節(jié)編碼方式,對序號大于2287的字符采用3字節(jié)編碼方式。對排序后的詞組頻率表中前1536個詞組,釆用2字節(jié)編碼方式,對序號大于或等于1536的詞組采用3字節(jié)編碼方式。表3包含詞組方式的字符編碼表<table>tableseeoriginaldocumentpage12</column></row><table>如表2和表3的編碼表所示,在每個所編碼字的前幾位均對所編碼字所采用的編碼字節(jié)數(shù)進行了標識。例如對于包含詞組的方式,碼字"11lllOxxxxxxxxxx"的前6位"111110"表示了該碼字為采用2字節(jié)編碼。本領域技術人員可以理解,除了在生成的碼字中對所編碼字所采用的編碼字節(jié)數(shù)進行標識外,還可以采用其它方法來標識。根據(jù)本發(fā)明的具體實施例,壓縮算法有靜態(tài)及動態(tài)兩種壓縮方式。根據(jù)用戶對壓縮速度及壓縮率的要求,可以選擇相應的壓縮方式。靜態(tài)壓縮方式使用預先生成的根據(jù)漢語頻率字典中統(tǒng)計的字符、詞組使用頻率建立的字符碼表和詞組碼表進行壓縮,其具有壓縮速度快,不需要傳輸碼表的優(yōu)點,其中將指向字符碼表和詞組碼表的指針存儲在壓縮文件中。由于對于不同應用的數(shù)據(jù),其字符和詞組的頻率分布可能不同,從而對應的靜態(tài)碼表也不同,因此,本領域技術人員可以理解,除漢語頻率字典外,還可以根據(jù)其它中文文本建立字符碼表和詞組碼表。動態(tài)壓縮方式根據(jù)待壓縮中文文本動態(tài)統(tǒng)計字符和詞組頻率,動態(tài)生成碼表,并存入壓縮文件中。由于其需要對待壓縮文本進行二遍掃描,相比靜態(tài)壓縮方式速度較慢,但通常壓縮效果要比靜態(tài)方式好。動態(tài)方式由于要保存動態(tài)生成的碼表,在文件較小的情況有可能壓縮率不及靜態(tài)方式。根據(jù)上述預先存儲的碼表或動態(tài)生成的碼表,壓縮待壓縮的中文文本,生成壓縮數(shù)據(jù),并寫入壓縮文件。優(yōu)選的,首先將下列標識寫入壓縮文件,作為文件頭FFFF:壓縮文件標識,16位,用于供解碼器判斷是否為根據(jù)本發(fā)明的方法獲得的壓縮文件。例如輸入為16個連續(xù)的1即OxFFFF表示該壓縮文件是根據(jù)本發(fā)明方法獲得的壓縮文件,用B^2代表壓縮文件的前兩字節(jié),則如果BlB2:^xFFFF,該壓縮文件是根據(jù)本發(fā)明方法獲得的壓縮文件。StreamFlag:流標識,8位,用于區(qū)別壓縮凄t據(jù)的壓縮方式,0x00表示靜態(tài)壓縮方式,0x01表示動態(tài)壓縮方式。CharLEN:字符碼表長度,即字符碼表中字符的個數(shù)。如果StreamFlag為0x00靜態(tài)壓縮方式,則該域為8位,域值為靜態(tài)編碼碼表指針;如果StreamFlag為0x01動態(tài)壓縮方式,則該域為16位。PhraseLEN:詞組碼表長度,16位,如果沒有詞組碼表則域值為0x0000。但本領域普通技術人員可以理解,中文數(shù)據(jù)流大多是由詞組組成,以詞組為單位進行壓縮能夠獲得更大的壓縮率。CharacterDictionary:字符碼表,各個碼字根據(jù)其在數(shù)據(jù)流中出現(xiàn)的頻率由大到小排列,每個碼字是16位。PhraseDictionary:詞組碼表,此項是可選的。若PhraseLEN域值不是0x0000,則表示支持詞組編碼。PhraseDictionary中的詞組也根據(jù)其在數(shù)據(jù)流中出現(xiàn)的頻率由大到小排序。詞組碼表每個碼字的第一字節(jié)為詞組長度類型標識,用于表示該詞組是雙字詞還是多字詞。詞組長度類型標識如果是0x00則表示該詞組是雙字詞,其格式如圖3所示,0x00后是該雙字詞的ANSI編碼;如果是0x01則該詞組是多字詞,該標志后1字節(jié)表示多字詞長度,之后是ANSI編碼格式的多字詞組,其格式如圖4所示。從中文文本起始位置開始,讀入每一字符或詞組,檢索碼表,根據(jù)字符或詞組在碼表中的位置編碼生成壓縮數(shù)據(jù)data,并寫入壓縮文件,直到中文文本的所有字符和詞組均已編碼。其中,所述碼表包括預先存儲的碼表或動態(tài)生成的碼表優(yōu)選的,還將以下標識寫入壓縮文件,作為文件尾部EOF:壓縮lt據(jù)結(jié)束標記,16位。MD5:校驗值,128位,用于校驗壓縮數(shù)據(jù)的完整性。根據(jù)上述壓縮方法生成的壓縮文件格式如圖2所示,包括FFFF:壓縮文件標識;StreamFlag:流標識;CharLEN:字符碼表長度;PhraseLEN:詞組;馬表長度;CharacterDictionary:字符碼表;PhraseDictionary:詞組碼表;Data:壓縮l史據(jù);EOF:壓縮^t據(jù)結(jié)束標記;MD5:校驗值。根據(jù)本發(fā)明的一個具體實施例,對根據(jù)本發(fā)明的壓縮方法生成的壓縮文件進行解壓縮,具體包括下列步驟。首先讀入數(shù)據(jù),根據(jù)數(shù)據(jù)流的前兩字節(jié)的值判斷是否為根據(jù)本發(fā)明方法獲得的壓縮數(shù)據(jù),若不是,則不做任何操作,原樣輸出數(shù)據(jù);否則,根據(jù)下一字節(jié)的流標識判斷是哪種壓縮方式。如果是靜態(tài)壓縮方式,則讀取下一字節(jié)的指針所指向的碼表對壓縮文件中的數(shù)據(jù)(data)進行解碼;如果為動態(tài)壓縮方式,則讀取下面兩字節(jié)的字符碼表長度和兩字節(jié)的詞組碼表長度。根據(jù)碼表長度,讀取字符和詞組碼表,讀入壓縮文件內(nèi)數(shù)據(jù)(data)并根據(jù)碼表進行解壓縮。解壓縮時根據(jù)數(shù)據(jù)的第一字節(jié)的值,確定該碼字的字節(jié)數(shù),然后根據(jù)該碼字輸出碼表中對應的字符,即該字符的ANSI編碼。重復上述過程,直到讀取EOF確定壓縮數(shù)據(jù)均已經(jīng)解碼。優(yōu)選的,根據(jù)MD5判斷壓縮數(shù)據(jù)是否完整。綜上,根據(jù)字符的使用頻率對字符重新編碼,使用頻率最高的n個字符采用l字節(jié)編碼,其中0<"240;根據(jù)總字符數(shù)是否小于4337,確定其它字符分別釆用2字節(jié)或3字節(jié)編碼。對壓縮率的貢獻主要由頻率最高的n個字符來完成,由表l看出,前240個字符的頻率占總字符的70%左右,將其由2字節(jié)重新編碼為l字節(jié),可節(jié)省35%左右的存儲空間,由于前4336個字符所占比例幾乎已是100%,故采用3字節(jié)編碼的字符對壓縮率的負面影響可以忽略不計。上述本發(fā)明方法,以字節(jié)為單位對中文文本進行壓縮和解壓縮,所以可以與其它壓縮方法進行結(jié)合。本發(fā)明的壓縮方法在與霍夫曼算法結(jié)合時,由于本發(fā)明的壓縮方法只是根據(jù)使用頻率對各個字符進行了重編碼,重編碼后的各字符的使用頻率并沒有發(fā)生改變,只是某些字符的編碼由2字節(jié)變成了l字節(jié)或3字節(jié),數(shù)據(jù)流中的頻率分布不平衡狀態(tài)并沒有改變,因此,本發(fā)明的壓縮方法與霍夫曼結(jié)合后,能夠比單純應用霍夫曼算法壓縮效果更好。當本發(fā)明的壓縮方法與LZSS結(jié)合時,本發(fā)明的壓縮方法是一種基于統(tǒng)計的壓縮算法,其與LZSS的作用是互補的,本發(fā)明的壓縮方法的輸出格式或者為單字節(jié)編碼方式,或者為一到三字節(jié)的多字節(jié)混合編碼方式,完整地保留了原數(shù)據(jù)流中蘊含的語義信息,即字符串在上下文的重復信息,因而,本發(fā)明的壓縮方法在與LZSS結(jié)合后能夠取得更好壓縮效果。本發(fā)明的壓縮方法在與PPM、BWT結(jié)合時,相當于對數(shù)據(jù)流進行了一遍預處理,本發(fā)明的壓縮方法的壓縮結(jié)果并不影響產(chǎn)生數(shù)據(jù)流的應用中字符的使用頻率及相對順序,再釆用PPM、BWT壓縮時基本不會對PPM的頻率預測機制及BWT的字符轉(zhuǎn)換機制產(chǎn)生大的影響,因此,以上結(jié)合使數(shù)據(jù)的壓縮效果更優(yōu)。由此可見,由于本發(fā)明的壓縮方法能充分維持數(shù)據(jù)流中蘊含的語義信息,其在與其它算法結(jié)合使用時,可以在保持本發(fā)明的壓縮方法本身所獲得的壓縮效果的前提下,不影響其它算法壓縮性能的發(fā)揮,從而提高了整體壓縮率。對于本發(fā)明的壓縮方法的動態(tài)方式,碼表所占用儲存空間是(字符數(shù)x2)個字節(jié),平均碼表空間在7KB左右。動態(tài)方式需預掃描一遍中文文本,統(tǒng)計字符頻率,按頻率對字符進行排序,最后掃描文件編碼輸出,時間復雜度為0(wlog2w),其中w為字符個數(shù)。本發(fā)明的壓縮方法的靜態(tài)方式只需在編碼過程中檢索碼表,時間復雜度為O(w)。對應本發(fā)明的壓縮方法的解壓縮方法只需要根據(jù)讀入的碼字檢索碼表,進行編碼替換,速度非???,時間復雜度為O(w)。而且,本發(fā)明的壓縮方法支持部分解壓縮。應該注意到并理解,在不脫離后附的權利要求所要求的本發(fā)明的精神和范圍的情況下,能夠?qū)ι鲜鲈敿毭枋龅谋景l(fā)明做出各種修改和改進。因此,要求保護的技術方案的范圍不受所給出的任何特定示范教導的限制。權利要求1.一種支持ANSI編碼的中文文本的壓縮方法,包括下列步驟100)根據(jù)待壓縮中文文本中的字符在字符碼表中的位置,將所述待壓縮中文文本中的字符分別用1個或多個字節(jié)進行編碼,其中,所述字符碼表包括根據(jù)所述待壓縮中文文本中的字符的出現(xiàn)頻率的降序所排列的字符;300)將生成的碼字寫入壓縮文件。2.根據(jù)權利要求1所述的壓縮方法,其特征在于,所述待壓縮中文文本中的字符的出現(xiàn)頻率是所述待壓縮中文文本中的字符在所述待壓縮中文文本中的出現(xiàn)頻率,所述壓縮方法在所述步驟100)前還包括步驟a)統(tǒng)計所述待壓縮中文文本中的字符的總個數(shù)w和所述待壓縮中文文本中的字符的出現(xiàn)頻率;b)根據(jù)所述待壓縮中文文本中的字符的出現(xiàn)頻率的降序,生成所述字符碼表。3.根據(jù)權利要求1所述的壓縮方法,其特征在于,所述待壓縮中文文本中的字符的出現(xiàn)頻率來源于漢語頻率字典。4.根據(jù)權利要求2所述的壓縮方法,其特征在于,還包括步驟200)根據(jù)待壓縮中文文本中的詞組在詞組碼表中的位置,將所述待壓縮中文文本中的詞組用多個字節(jié)編碼,其中,所述詞組碼表包括根據(jù)詞組在所述待壓縮中文文本中出現(xiàn)頻率的降序所排列的詞組。5.根據(jù)權利要求4所述的壓縮方法,其特征在于,在所述步驟200)前還包括步驟c)統(tǒng)計所述待壓縮中文文本中詞組的總個#1和所述詞組在所述待壓縮中文文本中出現(xiàn)頻率;d)根據(jù)所述詞組在所述待壓縮中文文本中出現(xiàn)頻率的降序,生成所述詞組碼表。6.根據(jù)權利要求3所述的壓縮方法,其特征在于,還包括步驟210)根據(jù)待壓縮中文文本中的詞組在詞組碼表中的位置,將所述待壓縮中文文本中的詞組用多個字節(jié)編碼,其中,所述詞組碼表包括根據(jù)詞7.根據(jù)權利^要^^八1至6任一項所述的壓縮方法,其特:在于,生成的碼字中標識了所述生成碼字的字節(jié)個數(shù)。8.根據(jù)權利要求2所述的壓縮方法,其特征在于,對于所述字符的總個數(shù)w小于4337的情況,所述步驟100)包括步驟101)將所述字符碼表中第n個字符采用l字節(jié)編碼,0<"^240;102)將所述字符碼表中第m個字符采用2字節(jié)編碼,240<mSw。9.根據(jù)權利要求2所述的壓縮方法,其特征在于,對于所述字符的總個數(shù)w等于或大于4337的情況,所述步驟100)包括步驟101)將所述字符碼表中第n個字符采用l字節(jié)編碼,0<"^240;112)將所述字符碼表中的第m個字符采用2字節(jié)編碼,240<^2288;113)將所述字符碼表中的第r個字符采用3字節(jié)編碼,228810.根據(jù)權利要求4所述的壓縮方法,其特征在于,所述步驟200)還包括步驟201)將所述詞組碼表中第p個詞組用2字節(jié)編碼,0<;7《1536;202)將所述詞組碼表中剩余詞組采用3字節(jié)編碼。11.根據(jù)權利要求1至3任一項所述的壓縮方法,其特征在于,所述字符包括ASCII編碼、擴展ASCII編碼和及ANSI方式的漢字編碼。12.根據(jù)權利要求1至3任一項所述的壓縮方法,其特征在于,所述步驟100)還包括121)將用于區(qū)別所述待壓縮中文文本中的字符的出現(xiàn)頻率的流標識寫入所述壓縮文件。13.根據(jù)權利要求2所述的壓縮方法,其特征在于,所述步驟a)還包括al)將所述字符碼表中的所述字符的總個數(shù)w寫入所述壓縮文件。14.根據(jù)權利要求5所述的壓縮方法,其特征在于,所述步驟c)還包括cl)將所述詞組碼表中的所述詞組的總個數(shù)寫入所述壓縮文件。15.根據(jù)權利要求3所述的壓縮方法,其特征在于,所述步驟100)還包括131)將所述碼表的指針寫入所述壓縮文件。16.—種對權利要求1或4所述的壓縮方法生成的壓縮文件的解壓縮方法,包括下列步驟1)讀所述壓縮文件內(nèi)的數(shù)據(jù),確定碼字所占字節(jié)個數(shù);2)根據(jù)所述碼字所占字節(jié)個數(shù)確定所述碼字;3)根據(jù)所述碼字輸出所述碼表中對應位置的字符,直到解碼所有碼字,完成所述解壓縮。17.根據(jù)權利要求16所述的解壓縮方法,其特征在于,對于所述碼表是根據(jù)壓縮文件內(nèi)的數(shù)據(jù)生成的情況,還包括步驟11)讀取所述碼表長度;12)根據(jù)所述碼表長度,讀取碼表。18.根據(jù)權利要求16所述的解壓縮方法,其特征在于,對于所述碼表是根據(jù)漢語頻率詞典生成的情況,還包括步驟11,)讀取指向所述碼表的指針;12,)根據(jù)所述碼表的指針,讀取碼表。全文摘要本發(fā)明提供一種支持ANSI編碼的中文文本的壓縮方法以及相應的解壓縮方法,該壓縮方法包括下列步驟根據(jù)待壓縮中文文本中的字符在字符碼表中的位置,將所述待壓縮中文文本中的字符分別用1個或多個字節(jié)編碼,且在生成的碼字中標識所述字節(jié)個數(shù),其中,所述字符碼表包括根據(jù)所述待壓縮中文文本中的字符的出現(xiàn)頻率的降序所排列的字符;將生成的碼字寫入壓縮文件。本發(fā)明最大限度地保持了中文數(shù)據(jù)流的語義特征,并且能與各種壓縮算法、壓縮軟件配合使用。文檔編號H03M7/30GK101350624SQ200810119940公開日2009年1月21日申請日期2008年9月11日優(yōu)先權日2008年9月11日發(fā)明者云曉春,吳廣君,常為領,李書豪,王樹鵬,浩羅申請人:中國科學院計算技術研究所