新四季網

文本文件數據壓縮的無損變換的製作方法

2023-09-17 01:32:25 4

專利名稱:文本文件數據壓縮的無損變換的製作方法
技術領域:
本發明涉及計算機領域文本文件的一種壓縮方法,特別是文本文件數據壓縮的無損變換。
人類社會已進入了資訊時代,對於浩如煙海的數據必須進行有效的壓縮,才能減少數據的存儲容量,節約數據傳輸時間,提高人類資源利用率,獲得更大的經濟效益。經過科技工作者幾十年的不懈努力,數據壓縮的理論和方法不斷成熟和完善,有效實用的壓縮方法不斷產生。1952年霍夫曼(D.A.Huffman)給出了最優變長碼的構造方法,由此方法編寫的軟體已廣泛應用於數據通訊,計算機文件壓縮等。1976年,裡斯桑內(J.Rissanen)給出了算術編碼(Arithemtic Coding)。1977年到1978年,J acob Ziv和Abraham Lempel在IEEE Transaction on Information Theory上發表了論文《順序數據壓縮的一個通用方法》(AUniversal Alogrithem for Seqential DataCompression),及續篇《通過可變換比率編碼的獨立順序的壓縮》(Copression of Individual viaVariable--Rato Coding),開創了基於字典壓縮的先河。在這些數據壓縮理論的指導下,人們先後編寫了許多實用的壓縮軟體,如arj.exe,pkzip.exe,lzss.exe,arith.exe等。儘管以上方法是非常有效和實用的,但其壓縮並未達到理論上的極限,而且也沒有利用中文文本的特點,此外,目前計算機上常用的中西文編輯軟體(如WPS,EDIT)等都沒有實時壓縮功能,常常是在需傳輸時或永久保存時才壓縮,實際上多佔了存貯空間。
本發明的目的是,利用中文文本文件的特點,提出一種文本文件數據壓縮的W-變換,它可有效地對中文文本文件實施壓縮,進一步提高中西文文本文件的壓縮比。
本發明的目的是這樣實現的,文本文件數據壓縮的W-變換是一個基於字典的變換。眾所周知,國標漢字庫(GB2312-80)是用16位來對漢字編碼的,這種編碼只是為兼顧中西文而設計的,其冗餘空間是很大的。由於漢字文本的特點,往往不是單個漢字出現,而是前後關聯的,為利用這種前後關聯性,本發明人選擇了漢字文本中最常用雙字詞為一字典,每個雙字詞用16位來編碼,因此只要文本中出現雙字詞,W-變換後對此就有壓縮。
其具體實現方法如下,1).對於源碼為ASCII碼的,其源碼高位置1,2).對於源碼為換行符即其ASCII碼為0D,0A的,將其變換後,置為0x81H,3).對於漢字「的」,變換後將其置為0x82H,4).對於不能組成中文詞組的單字和圖形符號, 將其劃分為頁,每頁256個漢字,對其變換後,其編碼第一字節是頁碼+1,編碼第二字節該頁在漢字庫中的偏移地址,5).對於能組成中文詞組的雙字詞組,是將詞組劃分為頁,每頁256個詞組,變換後的編碼第一字節是頁碼+4)中所述的單字劃分為頁後所佔的總頁碼,編碼第二字節是其在漢字庫中的偏移地址。
本發明的積極效果如下,
這種編碼方法,對ASCII碼來說,實際上只用了7位,高位1是解碼時的標誌;對漢字符號或雙字詞,由於最大頁碼小於127,實際上只用了17位編碼,第16位上的「0」也是一個解碼時的標緻。這樣解碼時先讀一個字節,高位是1,輸出ASCII碼,或換行符,或漢字「的」;如果高位是0,讀下一字節,頁碼小於40,輸出單字或符號,否則輸出雙字。可見,解碼程序速度非常快。
以下結合實施例對本發明作進一步說明,其變換方法見下表
發明人應用Turbo C 2.01為本發明編制的文本文件數據壓縮的W-變換程序如下,編碼程序<![CDATA[/* W-transform c-code *//* Wang Gouan 1997, 10*/#include "stdio.h"#include "stdlib.h"#include "string.h"#include "alloc.h"char *pt1;char *pt2;char ch[4];FILE *fp1, *fp2, *fp3;int main(int argc,char *argv[]){void iuittab1(char *pt1,FILE *fp3); void inittab2(char *pt2,FILE *fp3); int outputword(FILE *fp2,char *ch); int c; int flag; int i=0; if(argc<2) { printf(" Useagewtf inputfile outfile") exit (0);} if((fp1=fopen (argv[1],"rb") )<0) [printf("can’t open input file"); exit(0);} if((fp2=fopen (argv[2],"wb") )<0) {printf("can’t open output file"); exit(0);} if((fp3=fopen("wordtab. bin","rb"))<0) {printf("can’t open wordtab. bin file") exit(0);} if((pt1=malloc(20304))!=NULL) {inittab1(pt1,fp3); } else { printf("memery alloc error!");exit(0); } if((pt2=malloc(25126))!=NULL) inittab2(pt2,fp3); else {printf("memery alloc error!");exit(0);}flag=0;while((c=getc(fp1))!=EOF){ch[flag]=(char)c;  flag=flag+1;  if(flag==4){   flag=outputword(fp2,ch);   i++;   if(i==255){printf(".");i=0;}   }   }  if(flag>0)fputc(0x80,fp2);  switch(flag){  case 0break;  case 1   fputc(ch
,fp2);   break;  case 2 fputc(ch
,fp2)   fputc(ch[1],fp2)   break;  case 3 fputc(ch
,fp2)   fputc(ch[1],fp2)   fputc(ch[2],fp2)   break;   }  fclose(fp1);  fclose(fp2);  fclose(fp3);  free(pt1);  free(pt2);return(0);  }  void inittab1(char *p,FILE *fp3)  {  char ch[3];  int i;  int ct;  int of=0;  int tof;  for (i=0;i<20304;i++)  p[i]=0;  i=0;  while(i<2467) {  fread (ch,3,1,fp3);  i++;  tof=of;  of=of+(int)ch[2];  ct=(int)(ch
-160-16)*94+(int)(ch[1]-160-1);  ct=ct*3;  pt1[ct]=ch[2];  pt1[ct+1]=(char)(tof/256);  pt1[ct+2]=(char)(tof%256);  }  }void inittab2(char *pt2,FILE *fp3)   {   char ch [2];   int i=0;   fseek(fp3,7402L,0);   while(fread(ch,2,1,fp3)>0) {   pt2[i]=ch
;   i++;   pt2[i]=ch[1];   i++;   }   }int outputword(FILE *fp2,char *ch)int flag;   unsigned int p;   unsigned int length,dist;   int i;   unsigned int offset;   unsigned int bm; if((ch
==0x0d)(ch[1]==0x0a))   {   fputc (0x81,fp2);   ch
=ch[2];   ch[1]=ch[3];   return(2);   }  if(ch
<0xa0) {   fputc((ch
|0x80),fp2);   ch
=ch[1];   ch[1]=ch[2];   ch[2]=ch[3];   return(3);}  if(((ch
-0xa0)<16)||((ch
-0xa0)>78)) {   bm=(ch
-0xa0-1)*94+(ch[1]-0xa0-1   fputc((char)(bm/256+1),fp2);   fputc((char)(bm%256),fp2);   ch
=ch[2];   ch[1]=ch[3];   return(2);   }   if((ch
==181)(ch[1]==196))   {   fputc(0x82,fp2);   ch
=ch[2];   ch[1]=ch[3];   return(2);   }p=(unsigned int)(ch
-0xa0-16)*94+(unsigned int)(ch[1]-0xa0-1)p=p*3;length=(unsigned int)(pt1[p+1]) *256+(char)pt1[p+2];dist=pt1[p];if(dist>0) {   length=(length)*2;   dist=dist*2;   i=0;while((i<dist)(pt2[length+i]!=ch[2])||(pt2[length+i-1]!=ch[3]))   i=i+2;   if(i<dist)   { offset=(length+1+i)/2;   fputc((char)(offset/256+40),fp2);   fputc((char)(offset%256),fp2);   return(0);}   }   bm=(ch
-0xa0-1)*94+(ch[1]-0xa0-1);   fputc((char)(bm/256+1),fp2);   fputc((char)(bm%256),fp2);   ch
=ch[2];    ch[1]=ch[3];   return(2);   }]]>程序說明(1).編碼(W-變換)程序中用到了一個數據文件(Wordtab.bin),長度為32528位元組,其結構如下第一部分共7402位元組。(即2467*3+1),每三個字節為一變量第一、二字節為漢字內碼,所選漢字為所有雙字詞的第一個字(不重複,共2467個),第三字節為該漢字所組成的詞組個數;最後一個字節為一分隔符(0xFFH)。
第二部分共25126個字節。依次存儲雙字詞字典中第二個漢字的內碼。
指針pt1指向第一個緩存區,長度為72*94*3=20304位元組,即從16區到87區的漢字每字分配三個字節的單元,如果該字屬於雙字詞的第一字,則這三個字節的第一個字節置該字能組成雙字詞的個數(dist),第二、三字節為16位無符號整數,存儲該字組成雙字詞的第二個字在pt2中的偏移地址(length);否則,三個字節全為0°指針pt2指向第二個內存區,長度為12563*2=15126位元組,依次存放雙字詞的第二個字。
應用pt1和pt2的目的是要加快查找速度當輸入文件讀到一個漢字後,由內碼計算出它在pt1中的偏移地址p,如果pt1[p]等於0,則該字不組成詞組,直接按編碼方法輸出;否則,該字可能組成詞組,再讀第二個漢字,用第二個漢字與pt2[length]到pt2[length+dist]之間的串進行比較,如果查到,輸出詞組編碼,否則輸出第一個字,返回。可見,由於dist平均長度為5,這就大大縮短了查找速度,提高了程序運行速度。
應用本程序對文本文件壓縮後的實驗結果這裡選擇了5個文本文件作為實驗例文。其中shy1.txt是W-變換的雙字詞字典文件,其壓縮效果最好,比arj.exe提高了20%左右。shy.txt是一個中英文及表格混排文件。其它三個文件分別為新聞,股評或論文等。比較結果如下表。
(見下頁)
W-變換與Huff1,Arj,Pkzip之比較
注表中所用百分比為(源文件長-壓縮後文件長)/源文件長*100/100
權利要求
1.一種文本文件數據壓縮的W-變換,實現其的方法特徵在於,1).對於源碼為ASCII碼的,其源碼高位置1,2).對於源碼為換行符即其ASCII碼為0D,0A的,將其變換後,置為0x81H,3).對於漢字「的」,變換後將其置為0x82H,4).對於不能組成中文詞組的單字和圖形符號,將其劃分為頁,每頁256個漢字,對其變換後,其編碼第一字節是頁碼+1,編碼第二字節該頁在漢字庫中的偏移地址,5).對於能組成中文詞組的雙字詞組,是將詞組劃分為頁,每頁256個詞組,變換後的編碼第一字節是頁碼+4)中所述的單字劃分為頁後所佔的總頁碼,編碼第二字節是其在漢字庫中的偏移地址。
全文摘要
本發明涉及一種文本文件數據壓縮的W-變換,其方法特徵是,對於源碼為ASCII碼的,其源碼高位置1,對於不能組成中文詞組的單字和圖形符號,將其劃分為頁,對其變換後,其編碼第一字節:是頁碼+1,編碼第二字節:該頁在漢字庫中的偏移地址,對於能組成中文詞組的雙字詞組,是將詞組劃分為頁,每頁變換後的編碼是採用頁碼和其在漢字庫中的偏移地址。應用本發明可大大提高對中西文文本文件的壓縮比。
文檔編號H03M7/30GK1191355SQ9710854
公開日1998年8月26日 申請日期1997年12月8日 優先權日1997年12月8日
發明者王國安 申請人:王國安

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀