專利名稱:一種用于中文字符串匹配的位向量方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于字符串匹配的位向量方法。
背景技術(shù):
模糊字符串匹配在入侵檢測、移動短消息過濾、文本編輯、信息查詢、自動索引、計(jì)算生物學(xué)、信息提取等領(lǐng)域均有重要應(yīng)用,已經(jīng)成為計(jì)算機(jī)算法設(shè)計(jì)的一個(gè)重要課題。它解決的問題是給定一個(gè)字符串,一個(gè)模式串,要找出字符串中所有與模式串相似的部分。
解決模糊字符串匹配的經(jīng)典方法是一種基于生成動態(tài)矩陣的方法,自從1980年P(guān).Sellers發(fā)表該方法以來,許多人對之進(jìn)行了改進(jìn)。這些改進(jìn)當(dāng)中,有一種非常有效的方法就是位向量方法。
當(dāng)今計(jì)算機(jī)中,整數(shù)字長一般為32或64,因此,可將32或64次的比特運(yùn)算用一次整數(shù)運(yùn)算來完成,從而將運(yùn)算速度提高32或64倍。位向量方法正是利用了這一點(diǎn),在模式串長度小于整數(shù)字長的情況下,提高了字符串匹配的性能。
現(xiàn)有位向量方法位向量方法適用于,它用到一個(gè)與字符集等長的整數(shù)數(shù)組,這樣每個(gè)字符都有一個(gè)整數(shù)與之相對應(yīng)。位向量方法的描述如下1)將漢字用兩個(gè)字節(jié)來表示;2)把這兩個(gè)字節(jié)合起來作為一個(gè)16比特的大整數(shù)來處理,所以,每個(gè)漢字都對應(yīng)一個(gè)大整數(shù),對應(yīng)所有漢字的整數(shù)構(gòu)成一個(gè)數(shù)組;3)將該數(shù)組所有整數(shù)清為0;4)從頭到尾掃描整個(gè)模式串,對其中的每個(gè)字符,做如下操作設(shè)該字符在模式串中所處位置為p,將該字符對應(yīng)的整數(shù)的第p個(gè)比特置1;5)用正在處理字符串中的字符在整數(shù)數(shù)組中對應(yīng)的整數(shù)進(jìn)行匹配。
漢字都是用兩個(gè)字節(jié)表示的。在GB2312中,對每個(gè)漢字對應(yīng)的兩個(gè)字節(jié)做了明確規(guī)定。比如,“陳晨的爸爸”所包含的4個(gè)漢字對應(yīng)的兩個(gè)字節(jié)分別是(以下是16進(jìn)制)陳B3 C2晨B3 BF的B5 C4爸B0 D6所以,“陳晨的爸爸”在計(jì)算機(jī)中就是B3 C2 B3 BF B5 C4 B0 D6 B0 D6
現(xiàn)有位向量方法把這兩個(gè)字節(jié)合起來作為一個(gè)16比特的大整數(shù)(0~65535)來處理,所以,每個(gè)漢字都對應(yīng)一個(gè)大整數(shù),比如“陳”=B3C2=46018“晨”=B3BF=46015“的”=B5C4=46532“爸”=B0D6=45270這樣,要把中文字符串轉(zhuǎn)化成位向量,就需要長達(dá)65536的一個(gè)數(shù)組M。
因?yàn)樾枰粋€(gè)和字符集等長的整數(shù)數(shù)組,而漢字有10000多個(gè),因此,當(dāng)應(yīng)用于中文字符匹配時(shí),需要10000整數(shù)的空間。如果整數(shù)由4個(gè)字節(jié)組成,則需要40K字節(jié)的空間。
在國外,由于拉丁文屬于小字符集,這個(gè)問題不明顯。但若考慮的是中文字符串的匹配,因漢字多于1萬個(gè),所需空間也在40K字節(jié)以上,這個(gè)問題顯得比較突出。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是為了克服了現(xiàn)有位向量方法在應(yīng)用于中文時(shí)需要大量空間的缺點(diǎn),提出了一種新的位向量方法。
在計(jì)算機(jī)中,一個(gè)漢字用兩個(gè)字節(jié)來表示,在本文中稱為低字節(jié)和高字節(jié)。本方法用到兩個(gè)長為256的整數(shù)數(shù)組,稱為低字節(jié)數(shù)組和高字節(jié)數(shù)組。這樣,每個(gè)漢字的低字節(jié)都和低字節(jié)數(shù)組中的一個(gè)整數(shù)對應(yīng),高字節(jié)也和高字節(jié)數(shù)組中的一個(gè)整數(shù)對應(yīng)。
本發(fā)明的新位向量方法為,對在計(jì)算機(jī)中用兩個(gè)字節(jié)表示的漢字(1)將兩個(gè)字節(jié)分別對應(yīng)一個(gè)高字節(jié)整數(shù)和一個(gè)低字節(jié)整數(shù)進(jìn)行處理,所有漢字對應(yīng)的高字節(jié)整數(shù)和低字節(jié)整數(shù)分別構(gòu)成一個(gè)高字節(jié)數(shù)組和低字節(jié)數(shù)組;(2)將低字節(jié)數(shù)組和高字節(jié)數(shù)組中的所有整數(shù)全部清為0;(3)從頭到尾掃描整個(gè)中文模式串,對其中的每個(gè)漢字做如下操作,設(shè)某漢字在中文模式串中所處位置為p,則首先,將該漢字的低字節(jié)對應(yīng)的低字節(jié)數(shù)組中的整數(shù)的第p比特置1;其次,將該漢字的高字節(jié)對應(yīng)的高字節(jié)數(shù)組中的整數(shù)的第p比特置1;(4)用正在處理字符串中的字符在兩個(gè)整數(shù)數(shù)組中對應(yīng)的整數(shù)進(jìn)行匹配。
本位向量方法只需要兩個(gè)長為256的整數(shù)數(shù)組,如果整數(shù)是4個(gè)字節(jié),共需2K字節(jié)空間,是原有位向量方法的5%。
與原有位向量方法相比,由于采取了將漢字的兩個(gè)字節(jié)分別處理的技術(shù)措施,大大減少了所需的空間。
圖1為本發(fā)明中的對字符串處理的流程圖;
圖2是字符串“陳晨的爸爸”經(jīng)原有位向量方法處理后對應(yīng)的整數(shù)數(shù)組。
圖3是字符串“陳晨的爸爸”經(jīng)本發(fā)明的位向量方法處理后對應(yīng)的兩個(gè)整數(shù)數(shù)組。
具體實(shí)施例方式
在本發(fā)明中,把漢字作為兩個(gè)小整數(shù)(0~255)來處理。一個(gè)漢字對應(yīng)一個(gè)高字節(jié)整數(shù)、一個(gè)低字節(jié)整數(shù)。以“陳晨的爸爸”為例“陳”高字節(jié)整數(shù)=B3=179,低字節(jié)整數(shù)C2=194“晨”高字節(jié)整數(shù)=B3=179,低字節(jié)整數(shù)BF=191“的”高字節(jié)整數(shù)=B5=181,低字節(jié)整數(shù)C4=196“爸”高字節(jié)整數(shù)=B0=176,低字節(jié)整數(shù)D6=214這樣,要把中文字符串轉(zhuǎn)化成位向量,只需要兩個(gè)長為256的數(shù)組HM、LM(見圖3)。
設(shè)有中文字符串p,和兩個(gè)長為256的整數(shù)數(shù)組LM,HM。本位向量方法可以這樣實(shí)現(xiàn)<pre listing-type="program-listing"> NewPreprocess(p,LM,HM) Begin For i=1 to 256 Do Begin LM[i]=0; HM[i]=0; End For i=1 to m Do Begin LM[low(pi)](i)=1; HM[high(pi)](i)=1; End End</pre>其中,low(pi)表示p中第i個(gè)字符的低位字節(jié)。
圖2給出了字符串“陳晨的爸爸”經(jīng)原有位向量方法處理的結(jié)果。
圖3中給出了字符串“陳晨的爸爸”經(jīng)本位向量方法處理的結(jié)果??梢钥吹剑瓣悺睂?yīng)的兩個(gè)整數(shù)的與為“00011”&“00001”=”00001”。即“陳”在計(jì)算機(jī)中為“B3C2”,用本發(fā)明的位向量方法處理后,高字節(jié)B3對應(yīng)“00011”,低字節(jié)C2對應(yīng)“00001”,這兩個(gè)數(shù)進(jìn)行逐位與(&)操作,得到“00001”。而“00001”就是“陳”用現(xiàn)有技術(shù)中的位向量方法處理后得到的結(jié)果。二者結(jié)果一致。
同樣地,
“晨”對應(yīng)的是“00011”&“00010”=“00010”。
“的”對應(yīng)的是“00100”&“00100”=“00100”。
“爸”對應(yīng)的是“11000”&“11000”=“11000”。
對比附圖2,說明兩種方法的效果是完全一樣的。
下面對圖2和圖3中的部分對應(yīng)關(guān)系進(jìn)行說明。
在圖2中,“陳”=B3C2(16進(jìn)制)=46018(10進(jìn)制)。
“陳”在字符串“陳晨的爸爸”里是第一個(gè)字符,所以第一個(gè)比特為1,其他為0。
“晨”=B3BF(16進(jìn)制)=46015(10進(jìn)制),對應(yīng)“00010”,是因?yàn)椤瓣悺痹谧址瓣惓康陌职帧崩锸堑诙€(gè)字符,所以第二個(gè)比特為1,其他為0。
又如,“爸”=B0D6(16進(jìn)制)=45270(10進(jìn)制),對應(yīng)“11000”,是因?yàn)椤鞍帧痹谧址瓣惓康陌职帧崩锸堑谒摹⑽鍌€(gè)字符,所以第四、五個(gè)比特為1,其他為0。
在圖3中,C2在LM中對應(yīng)“00001”,等價(jià)于說字符串“陳晨的爸爸”的第一個(gè)字符的低字節(jié)為C2;B0在HM中對應(yīng)“11000”,等價(jià)于說字符串“陳晨的爸爸”的第四、五個(gè)字符的高字節(jié)為B0;B3在HM中對應(yīng)“00011”,等價(jià)于說字符串“陳晨的爸爸”的第一、二個(gè)字符的高字節(jié)為B3;
權(quán)利要求
1.一種用于中文字符串匹配的位向量方法,對在計(jì)算機(jī)中用兩個(gè)字節(jié)表示的漢字(1)將兩個(gè)字節(jié)分別對應(yīng)一個(gè)高字節(jié)整數(shù)和一個(gè)低字節(jié)整數(shù)進(jìn)行處理,所有漢字對應(yīng)的高字節(jié)整數(shù)和低字節(jié)整數(shù)分別構(gòu)成一個(gè)高字節(jié)數(shù)組和低字節(jié)數(shù)組;(2)將低字節(jié)數(shù)組和高字節(jié)數(shù)組中的所有整數(shù)全部清為0;(3)從頭到尾掃描整個(gè)中文模式串,對其中的每個(gè)漢字做如下操作,設(shè)某漢字在中文模式串中所處位置為p,則首先,將該漢字的低字節(jié)對應(yīng)的低字節(jié)數(shù)組中的整數(shù)的第p比特置1;其次,將該漢字的高字節(jié)對應(yīng)的高字節(jié)數(shù)組中的整數(shù)的第p比特置1;(4)用正在處理字符串中的字符在兩個(gè)整數(shù)數(shù)組中對應(yīng)的整數(shù)進(jìn)行匹配。
全文摘要
一種用于中文字符串匹配的位向量方法,對在計(jì)算機(jī)中用兩個(gè)字節(jié)表示的漢字將兩個(gè)字節(jié)分別對應(yīng)一個(gè)高字節(jié)整數(shù)和一個(gè)低字節(jié)整數(shù)進(jìn)行處理,所有漢字對應(yīng)的高字節(jié)整數(shù)和低字節(jié)整數(shù)分別構(gòu)成一個(gè)高字節(jié)數(shù)組和低字節(jié)數(shù)組;將兩個(gè)字節(jié)數(shù)組中的所有整數(shù)全部清為0;掃描整個(gè)中文模式串,對其中的每個(gè)漢字做如下操作,設(shè)某漢字在中文模式串中所處位置為p,則將該漢字的低字節(jié)對應(yīng)的低字節(jié)數(shù)組中的整數(shù)的第p比特置1并將該漢字的高字節(jié)對應(yīng)的高字節(jié)數(shù)組中的整數(shù)的第p比特置1;用正在處理字符串中的字符在兩個(gè)整數(shù)數(shù)組中對應(yīng)的整數(shù)進(jìn)行匹配。由于采取了將漢字的兩個(gè)字節(jié)分別處理的技術(shù)措施,大大減少了所需的空間。
文檔編號G06F9/45GK1542614SQ03113380
公開日2004年11月3日 申請日期2003年5月1日 優(yōu)先權(quán)日2003年5月1日
發(fā)明者陳開渠, 趙潔, 彭志威 申請人:中興通訊股份有限公司