欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于奇偶校驗(yàn)的gbk字符查詢系統(tǒng)及其實(shí)現(xiàn)方法

文檔序號(hào):6336551閱讀:364來源:國知局
專利名稱:基于奇偶校驗(yàn)的gbk字符查詢系統(tǒng)及其實(shí)現(xiàn)方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種漢字字符查詢系統(tǒng),尤其涉及一種基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng);此外,本發(fā)明還涉及該基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng)的實(shí)現(xiàn)方法。
背景技術(shù)
一、GBK編碼的漢字邊界問題GBK編碼是計(jì)算機(jī)中表示漢字字符的最常用方法之一。它的全稱為《漢字內(nèi)碼擴(kuò)展規(guī)范》(GBK),英文名稱Chinese Internal Code Specification,中華人民共和國全國信息技術(shù)標(biāo)準(zhǔn)化技術(shù)委員會(huì)1995年12月1日制訂,國家技術(shù)監(jiān)督局標(biāo)準(zhǔn)化司、電子工業(yè)部科技與質(zhì)量監(jiān)督司1995年12月15日聯(lián)合以技監(jiān)標(biāo)函19952 號(hào)文件的形式,將它確定為技術(shù)規(guī)范指導(dǎo)性文件,發(fā)布和實(shí)施。GBK編碼在GB2312-80標(biāo)準(zhǔn)基礎(chǔ)上的內(nèi)碼擴(kuò)展規(guī)范, 使用了雙字節(jié)編碼方案,其編碼范圍從8140至FEFE (剔除xx7F),共23940個(gè)碼位,共收錄了 21003個(gè)漢字,完全兼容GB2312-80標(biāo)準(zhǔn),支持國際標(biāo)準(zhǔn)IS0/IEC10646-1和國家標(biāo)準(zhǔn) GB13000-1中的全部中日韓漢字,并包含了 BIG5編碼中的所有漢字。GBK編碼的高字節(jié)范圍是0X81-0xFE,低字節(jié)范圍是0x40-7E和0x80_0xFE。GBK漢字編碼在確定漢字邊界時(shí)可能會(huì)遇到問題,主要表現(xiàn)在1. GBK編碼中,部分編碼和ASC-II編碼有重疊,導(dǎo)致ASC字符查找的誤命中問題;2.雙字節(jié)編碼方式,沒有標(biāo)志位,難以確定單個(gè)漢字的起始字節(jié)和終止字節(jié)的位置,導(dǎo)致進(jìn)行單個(gè)漢字的查詢時(shí),無法確定漢字邊界。因此,需要一種GBK編碼的自匹配系統(tǒng),能查找并確定漢字的邊界,從而成功解決上述查詢誤匹配問題。二、GBK漢字邊界不明所導(dǎo)致的問題GBK編碼系統(tǒng)內(nèi),中文漢字采用了雙字節(jié)的編碼方式,即每個(gè)漢字由2個(gè)字節(jié)來表示。例如“靳懷堵水文化文集”這句話,在計(jì)算機(jī)看來,是一段字符串,用16進(jìn)制表示為“BD F9 BB B3 89 40 CB AE CE C4 BB AF CE C4 BC AF”。由于GBK編碼缺乏標(biāo)志位,計(jì)算機(jī)在判斷該段字符串時(shí),難以判斷出漢字的邊界。 由此導(dǎo)致的問題是,在進(jìn)行字符查找時(shí),由于漢字邊界不確定,導(dǎo)致字符匹配錯(cuò)位問題。例如上述字符串中,漢字“堵”,GBK編碼為[89,40]。而編碼40也表示是ASC符號(hào)“@”。因此,當(dāng)符號(hào)‘@,時(shí),會(huì)發(fā)現(xiàn)在字符串“靳懷堵水文化文集”中出現(xiàn)了該符號(hào),與實(shí)際情況不符。除了 ASC字符查找的問題,在漢字查找時(shí)也會(huì)出現(xiàn)問題。這是由于GBK漢字編碼的邊界不明確,也會(huì)導(dǎo)致漢字錯(cuò)位問題。例如漢字字符串“大學(xué)生健康教育”,對(duì)應(yīng)的GBK編碼為“B4 F3 Dl A7 C9FA BD Al BF B5 BD CC D3 FD”,在其中如果查找漢字“笱”時(shí),會(huì)發(fā)現(xiàn)是存在的。由于“笱”的編碼為 [F3,Dl],剛好是漢字“大”的低字節(jié)F3,和“學(xué)”字的高字節(jié)Dl組合而成,從而導(dǎo)致了該錯(cuò)誤。

發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng),該系統(tǒng)能查找并確定漢字的邊界,從而成功解決漢字高低字節(jié)編碼交叉容易導(dǎo)致的查詢誤匹配問題。為此,本發(fā)明還提供該基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng)的實(shí)現(xiàn)方法。為解決上述技術(shù)問題,本發(fā)明提供一種基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng),該系統(tǒng)包括三個(gè)模塊字符基礎(chǔ)查詢模塊、GBK奇偶校驗(yàn)?zāi)K和漢字邊界驗(yàn)證模塊;該字符基礎(chǔ)查詢模塊用于對(duì)讀取的GBK編碼字符串與查詢字符串進(jìn)行基礎(chǔ)查詢, 在GBK編碼字符串中找到滿足查詢字符串出現(xiàn)的位置,并記錄其起始位置和終止位置;該GBK奇偶校驗(yàn)?zāi)K用于對(duì)該字符基礎(chǔ)查詢模塊所得的基礎(chǔ)查詢結(jié)果進(jìn)行編碼校驗(yàn),首先沿起始位置向前依次檢測字節(jié)以判斷步長計(jì)數(shù)器count的奇偶值,然后沿終止位置向后依次檢測字節(jié)以判斷步長計(jì)數(shù)器count的奇偶值;該漢字邊界驗(yàn)證模塊用于根據(jù)該GBK奇偶校驗(yàn)?zāi)K的奇偶值校驗(yàn)結(jié)果來判斷起始位置和終止位置是否處在GBK雙字節(jié)漢字的邊界上。所述字符基礎(chǔ)查詢模塊的查詢方式為從左至右依次掃描GBK編碼字符串,找到滿足查詢字符串出現(xiàn)的位置,并進(jìn)行記錄起始位置為headp0S_k,終止位置為tailp0S_k,其中數(shù)字k表示在當(dāng)前GBK編碼字符串中第k次基礎(chǔ)查詢匹配到的結(jié)果。所述GBK奇偶校驗(yàn)?zāi)K中沿起始位置向前依次檢測字節(jié)以判斷步長計(jì)數(shù)器count 的奇偶值具體采用如下方法首先,將步長計(jì)數(shù)器count初始設(shè)為0 ;然后,沿headp0S_k向前,依次檢測字節(jié)T」,其中i = headposl-l,headposl-2···.,0 ;然后,計(jì)算T_i&0x80是否為0,并根據(jù)T_i&0x80運(yùn)算的數(shù)值進(jìn)行處理邏輯;最后判斷步長計(jì)數(shù)器count的奇偶值,如果count為奇數(shù),則記錄head_valid = 0 ;如果count為偶數(shù),則記錄head_valid = 1。所述GBK奇偶校驗(yàn)?zāi)K中沿終止位置向后依次檢測字節(jié)以判斷步長計(jì)數(shù)器count 的奇偶值具體采用如下方法首先,將步長計(jì)數(shù)器count初始設(shè)為0 ;然后,沿tailp0S_k向后,依次檢測字節(jié)T_i,其中i = tailpos+1, tailposl+2···.;然后,計(jì)算T_i&0x80是否為 0,并根據(jù)T_i&0x80運(yùn)算的數(shù)值進(jìn)行處理邏輯;最后判斷步長計(jì)數(shù)器count的奇偶值,如果 count為奇數(shù),則記錄tail_valid = 0 ;如果count為偶數(shù),則記錄tail_valid = 1。所述漢字邊界驗(yàn)證模塊的驗(yàn)證方法具體為如果head_Valid = 1且tailjalid =1,則當(dāng)前GBK字符的匹配結(jié)果有效,將該次查詢所得的匹配信息headp0S_k,tailpos_ k進(jìn)行記錄;如果head_valid = 0或tail_valid = 0,則當(dāng)前GBK字符的匹配結(jié)果無效,忽略本次匹配結(jié)果,并設(shè)置k = k+l,繼續(xù)返回GBK奇偶校驗(yàn)?zāi)K,重新進(jìn)行下一個(gè)查詢位置的驗(yàn)證工作,直至k為字符基礎(chǔ)查詢模塊的最后一個(gè)匹配結(jié)果才結(jié)束查詢,輸出查詢結(jié)果。此外,本發(fā)明還提供一種基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng)的實(shí)現(xiàn)方法,包括如下步驟(1)讀取GBK編碼的字符串,導(dǎo)入到給定字符串中,以text_str標(biāo)記;(2)讀取查詢字符串,標(biāo)記為query_str ;(3)將query_str和text_str進(jìn)行基礎(chǔ)查詢,方式為從左至右依次掃描text_ str,找到滿足query_Str出現(xiàn)的位置,并進(jìn)行記錄起始位置為headp0S_k,終止位置為 tailp0S_k,其中數(shù)字k表示在當(dāng)前串text_str中第k次基礎(chǔ)查詢匹配到的結(jié)果;
(4)在獲取步驟(3)的基礎(chǔ)查詢結(jié)果headp0S_iaP tailp0S_k之后進(jìn)行編碼校驗(yàn), 具體為步驟A 沿headp0S_k向前依次檢測字節(jié)T_i以判斷步長計(jì)數(shù)器count的奇偶值, 其中,i = headposl-l,headposl-2···.,0 ;步驟 B 沿 tailpos_k 向后依次檢測字節(jié) T_i 以判斷步長計(jì)數(shù)器count的奇偶值,其中i = tailpos+1, tailposl+2-.;(5)根據(jù)步驟⑷的奇偶值校驗(yàn)結(jié)果來判斷headposj和tailposj是否處在GBK 雙字節(jié)漢字的邊界上;(6)輸出GBK字符查詢結(jié)果。在步驟(4)中,所述步驟A具體為1)將步長計(jì)數(shù)器count初始設(shè)為0;2)沿 headpos_k 向前,依次檢測字節(jié) T_i,其中,i = headposl-1, headposl-2—.,0 ;3)計(jì)算 T_ i&0x80是否為0 ;4)根據(jù)T_i&0x80運(yùn)算的數(shù)值進(jìn)行如下處理邏輯如果T_i&0x80等于0, 則記錄head_valid= 1,并終止本步驟后續(xù)流程,直接進(jìn)入步驟B ;如果T_i&0x80不等于0, 則將計(jì)數(shù)器count = coimt+1,再根據(jù)T_i的數(shù)值,進(jìn)行以下兩個(gè)處理子邏輯如果i = 0, 則終止該步驟,并輸出count數(shù)值;如果i > 0,則將T_i設(shè)為T_i-1,并重新執(zhí)行上述步驟 A的運(yùn)算,即繼續(xù)沿本字符串向前檢測力)判斷步長計(jì)數(shù)器count的奇偶值,如果count為奇數(shù),則記錄head_valid = 0 ;如果count為偶數(shù),則記錄head_valid = 1。在步驟中,所述步驟B具體為1)將步長計(jì)數(shù)器count初始設(shè)為0;2)沿 tailpos_k 向后,依次檢測字節(jié) T_i,其中 i = tailpos+1,tailposl+2···· ;3)計(jì)算 T_i&0x80 是否為0 ;4)根據(jù)T_i&0x80運(yùn)算的數(shù)值進(jìn)行如下處理邏輯如果T_i&0x80等于0,則記錄 tail_valid = 1,并終止本步驟后續(xù)流程;如果T_i&0x80不等于0,則將計(jì)數(shù)器count = coimt+1,再根據(jù)T_i的數(shù)值,進(jìn)行以下兩個(gè)處理子邏輯如果i和當(dāng)前字符串teXt_Str的長度相同,則終止該步驟,并輸出count數(shù)值;如果i <當(dāng)前字符串teXt_Str的長度,則將 T_i設(shè)為T_i+1,并重新執(zhí)行上述步驟B的運(yùn)算,即沿本字符串繼續(xù)向后檢測力)判斷步長計(jì)數(shù)器count的奇偶值,如果count為奇數(shù),則記錄tailjalid = 0 ;如果count為偶數(shù), 則記錄 tail_valid = 1。步驟(5)具體為如果head_valid = 1且tail_valid = 1時(shí),則當(dāng)前GBK字符的匹配結(jié)果有效,將該次查詢所得的匹配信息headp0S_k,行記錄;如果head_ valid = 0或tailjalid = 0時(shí),則當(dāng)前GBK字符的匹配結(jié)果無效,忽略本次匹配結(jié)果,并設(shè)置k = k+Ι,繼續(xù)返回步驟,重新進(jìn)行下一個(gè)查詢位置的驗(yàn)證工作。步驟(6)具體為如果k已是步驟(3)的最后一個(gè)匹配結(jié)果,則結(jié)束本次查詢的所有驗(yàn)證工作,將成功匹配的全部符查詢結(jié)果進(jìn)行輸出;如果k不是步驟C3)最后一個(gè)匹配結(jié)果,則設(shè)置k = k+l,繼續(xù)返回步驟G),重新進(jìn)行下一個(gè)查詢位置的驗(yàn)證工作。本發(fā)明的有益效果在于本發(fā)明針對(duì)GBK編碼的字符串,在進(jìn)行字符查詢時(shí),由于漢字高低字節(jié)編碼交叉容易導(dǎo)致的誤匹配問題,提出了一種自匹配的基于奇偶校驗(yàn)的GBK 字符查詢系統(tǒng),該系統(tǒng)由字符基礎(chǔ)查詢模塊、GBK奇偶校驗(yàn)?zāi)K、漢字邊界驗(yàn)證模塊三部分組成,利用漢字雙字節(jié)編碼的特點(diǎn),使用了向前向后雙向奇偶校驗(yàn)的方法,對(duì)字符匹配結(jié)果進(jìn)行逐一驗(yàn)證,該系統(tǒng)的實(shí)踐證明能很好的處理GBK字符查詢的問題,既能剔除高低字節(jié)誤匹配的結(jié)果,又能保留合法匹配的結(jié)果。


圖1是本發(fā)明系統(tǒng)的模塊結(jié)構(gòu)及流程示意圖。
具體實(shí)施例方式如圖1所示,本發(fā)明提出一種自匹配的基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng),該系統(tǒng)包括三個(gè)模塊字符基礎(chǔ)查詢模塊、GBK奇偶校驗(yàn)?zāi)K、漢字邊界驗(yàn)證模塊。通過該三個(gè)模塊相互銜接,可以良好的處理GBK編碼中的字符串查找時(shí)所遇到的字符匹配錯(cuò)位問題。下面舉一實(shí)施例來具體說明該基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng)的實(shí)現(xiàn)方法,其包括如下步驟(見圖1)1.該系統(tǒng)首先讀取GBK編碼的字符串(即讀取GBK匹配文本),導(dǎo)入到給定字符串中,這里以teXt_Str標(biāo)記。并以字節(jié)(Byte)為單位,將該字符串的每一個(gè)字節(jié)依次命名 T_0, T_l, Τ_2, Τ_3, Τ_4......2.讀取查詢字符串,這里標(biāo)記為qUery_Str,同樣以字節(jié)(Byte)為單位進(jìn)行標(biāo)記, 命名為Q_0,Q_l,Q_2, Q_3, Q_4…..3.字符基礎(chǔ)查詢模塊將query_str和text_str進(jìn)行基礎(chǔ)查詢,方式為從左至右依次掃描text_str,找到滿足query_str出現(xiàn)的位置,并進(jìn)行記錄起始位置為headp0S_k,終止位置為tailp0S_ k(其中數(shù)字k表示在當(dāng)前串teXt_Str中第k次基礎(chǔ)查詢匹配到的結(jié)果,即第一次為 headpos_l 禾口 tailpos_l,第二次為 headpos_2 禾口 tailpos_2,以此類推),艮口 text_str 中, 從T_headpos_k至T tailpo_k之間的字符串,和query_str完全相同。4. GBK奇偶校驗(yàn)?zāi)K該模塊在獲取字符基礎(chǔ)查詢模塊所得的基礎(chǔ)查詢結(jié)果headp0S_k和tailp0S_k之后,進(jìn)行編碼校驗(yàn)。具體處理流程為步驟A 1)設(shè)置步長計(jì)數(shù)器count初始為0 ;2)沿 headpos_k 向前,依次檢測字節(jié) T_i (i = headposl-1,headposl-2··· ·,0);3)計(jì)算T_i&0x80是否為0(這里運(yùn)算參數(shù)取0x80的原因?yàn)?,按照GBK編碼的規(guī)貝U,高字節(jié)的編碼范圍大于等于0x80是合法漢字高字節(jié)開始的標(biāo)志)。其中符號(hào)&表示按位進(jìn)行布爾“與”運(yùn)算,與運(yùn)算(And)規(guī)則為0&0 = 0,0&1 = 0,1&0 = 0,1&1 = 1 ;按位與運(yùn)算為,將字節(jié)以二進(jìn)制展開,并對(duì)每一位進(jìn)行與計(jì)算,例如如果T i = 0x9E,則二進(jìn)制表示為 10011110 ;而 0x80 的二進(jìn)制展開為 10000000。此時(shí):T_i&0x80 = 10011110&10000000 =10000000 ;4)根據(jù)T_i&0x80運(yùn)算的數(shù)值,進(jìn)行以下處理邏輯-如果等于0,則記錄head_Valid=1 ;并終止本步驟后續(xù)流程,直接進(jìn)入下面的步驟B ;-如果不等于0,則將計(jì)數(shù)器count= coimt+1,再根據(jù)T i的數(shù)值,進(jìn)行以下兩個(gè)處理子邏輯如果i = 0(即表示已經(jīng)到字符串的首部),則終止該步驟,并輸出count數(shù)值;如果i > 0,則將T_i設(shè)為T_i_l,并重新執(zhí)行上述步驟A的運(yùn)算,即繼續(xù)沿本字符串向前檢測;5)當(dāng)步驟A中以上處理正常完成后,判斷步長計(jì)數(shù)器count的奇偶值-如果count 為奇數(shù),則記錄 head_valid = 0 ;-如果count 為偶數(shù),則記錄 head_valid = 1。步驟B 1)設(shè)置步長計(jì)數(shù)器count初始為0 ;2)沿 tailpos_k 向后,依次檢測字節(jié) T_i(i = tailpos+1,tailposl+2... ·);3)計(jì)算T_i&0x80是否為0 (方法和步驟A相同);4)根據(jù)T_i&0x80運(yùn)算的數(shù)值,進(jìn)行以下處理邏輯-如果等于0,則記錄tailjalid= 1,并終止本步驟后續(xù)流程;-如果不等于0,則將計(jì)數(shù)器count= coimt+1,再根據(jù)T_i的數(shù)值,進(jìn)行以下兩個(gè)處理子邏輯如果i = text_str. length(表示i和當(dāng)前字符串text_str的長度相同,即已經(jīng)到字符串的尾部),則終止該步驟,并輸出count數(shù)值;如果i < text_Str· length,則將T_i設(shè)為T_i+1,并重新執(zhí)行上述步驟的運(yùn)算,即沿本字符串繼續(xù)向后檢測;5)當(dāng)步驟B中以上處理正常完成后,判斷步長計(jì)數(shù)器count的奇偶值-如果count 為奇數(shù),則記錄 tail_valid = 0 ;-如果count 為偶數(shù),則記錄 tail_valid = 1。5.漢字邊界驗(yàn)證模塊將GBK奇偶校驗(yàn)?zāi)K的結(jié)果輸入漢字邊界驗(yàn)證模塊,進(jìn)行處理。根據(jù)head_Valid 和tail_valid的數(shù)值,來判斷headpos_i和tailpos_i是否處在GBK雙字節(jié)漢字的邊界上, 處理邏輯為-如果head_valid= 1且tail_valid = 1時(shí),認(rèn)為當(dāng)前GBK字符的匹配結(jié)果有效,將該次查詢所得的匹配信息headp0S_k,tailpos_k進(jìn)行記錄;-如果head_valid= 0或tail_valid = 0時(shí),認(rèn)為當(dāng)前GBK字符的匹配結(jié)果無效,忽略本次匹配結(jié)果,并設(shè)置k = k+Ι,繼續(xù)返回GBK奇偶校驗(yàn)?zāi)K,重新進(jìn)行下一個(gè)查詢位置的驗(yàn)證工作;6.輸出GBK字符查詢結(jié)果以上判斷完畢后,則循環(huán)進(jìn)行字符串后續(xù)查詢位置的驗(yàn)證,處理邏輯為-如果k已是字符基礎(chǔ)查詢模塊的最后一個(gè)匹配結(jié)果,則結(jié)束本次查詢的所有驗(yàn)證工作,將成功匹配的全部headp0S_k,tailp0S_k信息(即GBK字符查詢結(jié)果)進(jìn)行輸出。-如果k不是字符基礎(chǔ)查詢模塊最后一個(gè)匹配結(jié)果,則設(shè)置k= k+Ι,繼續(xù)返回GBK 奇偶校驗(yàn)?zāi)K,重新進(jìn)行下一個(gè)查詢位置的驗(yàn)證工作。本發(fā)明提出的一種基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng),該系統(tǒng)針對(duì)GBK編碼的字符串,在進(jìn)行字符查詢時(shí),由于漢字高低字節(jié)編碼交叉容易導(dǎo)致的誤匹配問題,提出了一套查詢系統(tǒng),該系統(tǒng)由字符基礎(chǔ)查詢模塊、GBK奇偶校驗(yàn)?zāi)K、漢字邊界驗(yàn)證模塊三部分組成, 利用漢字雙字節(jié)編碼的特點(diǎn),使用了向前向后雙向奇偶校驗(yàn)的方法,對(duì)字符匹配結(jié)果進(jìn)行逐一驗(yàn)證,該系統(tǒng)的實(shí)踐證明能很好的處理GBK字符查詢的問題,既能剔除高低字節(jié)誤匹配的結(jié)果,又能保留合法匹配的結(jié)果。
權(quán)利要求
1.一種基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng),其特征在于,該系統(tǒng)包括三個(gè)模塊字符基礎(chǔ)查詢模塊、GBK奇偶校驗(yàn)?zāi)K和漢字邊界驗(yàn)證模塊;該字符基礎(chǔ)查詢模塊用于對(duì)讀取的GBK編碼字符串與查詢字符串進(jìn)行基礎(chǔ)查詢,在 GBK編碼字符串中找到滿足查詢字符串出現(xiàn)的位置,并記錄其起始位置和終止位置;該GBK奇偶校驗(yàn)?zāi)K用于對(duì)該字符基礎(chǔ)查詢模塊所得的基礎(chǔ)查詢結(jié)果進(jìn)行編碼校驗(yàn), 首先沿起始位置向前依次檢測字節(jié)以判斷步長計(jì)數(shù)器count的奇偶值,然后沿終止位置向后依次檢測字節(jié)以判斷步長計(jì)數(shù)器count的奇偶值;該漢字邊界驗(yàn)證模塊用于根據(jù)該GBK奇偶校驗(yàn)?zāi)K的奇偶值校驗(yàn)結(jié)果來判斷起始位置和終止位置是否處在GBK雙字節(jié)漢字的邊界上。
2.如權(quán)利要求1所述的基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng),其特征在于,所述字符基礎(chǔ)查詢模塊的查詢方式為從左至右依次掃描GBK編碼字符串,找到滿足查詢字符串出現(xiàn)的位置,并進(jìn)行記錄起始位置為headp0S_k,終止位置為tailp0S_k,其中數(shù)字k表示在當(dāng)前GBK 編碼字符串中第k次基礎(chǔ)查詢匹配到的結(jié)果。
3.如權(quán)利要求2所述的基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng),其特征在于,所述GBK奇偶校驗(yàn)?zāi)K中沿起始位置向前依次檢測字節(jié)以判斷步長計(jì)數(shù)器count的奇偶值具體采用如下方法首先,將步長計(jì)數(shù)器count初始設(shè)為0 ;然后,沿headp0S_k向前,依次檢測字節(jié)T_ i,其中 i =headposl-l,headposl-2....,0 ;然后,計(jì)算 T_i&0x80 是否為 0,并根據(jù) T_i&0x80 運(yùn)算的數(shù)值進(jìn)行處理邏輯;最后判斷步長計(jì)數(shù)器count的奇偶值,如果count為奇數(shù),則記錄 head_valid = 0 ;如果 count 為偶數(shù),則記錄 head_valid = 1。
4.如權(quán)利要求2所述的基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng),其特征在于,所述GBK奇偶校驗(yàn)?zāi)K中沿終止位置向后依次檢測字節(jié)以判斷步長計(jì)數(shù)器count的奇偶值具體采用如下方法首先,將步長計(jì)數(shù)器count初始設(shè)為0 ;然后,沿tailp0S_k向后,依次檢測字節(jié) T_i,其中 i = tailpos+l,tailposl+2....;然后,計(jì)算 T_i&0x80 是否為 0,并根據(jù) T_i&0x80 運(yùn)算的數(shù)值進(jìn)行處理邏輯;最后判斷步長計(jì)數(shù)器count的奇偶值,如果count為奇數(shù),則記錄 tail_valid = 0 ;如果 count 為偶數(shù),則記錄 tail_valid = 1。
5.如權(quán)利要求3或4所述的基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng),其特征在于,所述漢字邊界驗(yàn)證模塊的驗(yàn)證方法具體為如果head_valid = 1且tailjalid = 1,則當(dāng)前GBK 字符的匹配結(jié)果有效,將該次查詢所得的匹配信息headp0S_k,行記錄;如果 head_valid = 0或tailjalid = 0,則當(dāng)前GBK字符的匹配結(jié)果無效,忽略本次匹配結(jié)果, 并設(shè)置k = k+Ι,繼續(xù)返回GBK奇偶校驗(yàn)?zāi)K,重新進(jìn)行下一個(gè)查詢位置的驗(yàn)證工作,直至k 為字符基礎(chǔ)查詢模塊的最后一個(gè)匹配結(jié)果才結(jié)束查詢,輸出查詢結(jié)果。
6.一種基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng)的實(shí)現(xiàn)方法,其特征在于,包括如下步驟(1)讀取GBK編碼的字符串,導(dǎo)入到給定字符串中,以text_str標(biāo)記;(2)讀取查詢字符串,標(biāo)記為query_str;(3)將query_str和text_str進(jìn)行基礎(chǔ)查詢,方式為從左至右依次掃描text_str,找到滿足query_str出現(xiàn)的位置,并進(jìn)行記錄起始位置為headp0S_k,終止位置為tailp0S_k, 其中數(shù)字k表示在當(dāng)前串teXt_Str中第k次基礎(chǔ)查詢匹配到的結(jié)果;(4)在獲取步驟(3)的基礎(chǔ)查詢結(jié)果headp0S_k*tailp0S_k2后進(jìn)行編碼校驗(yàn),具體為步驟A 沿headp0S_k向前依次檢測字節(jié)T_i以判斷步長計(jì)數(shù)器count的奇偶值,其中,i = headposl-l,headposl-2···.,0 ;步驟 B 沿 tailpos_k 向后依次檢測字節(jié) T_i 以判斷步長計(jì)數(shù)器count的奇偶值,其中i = tailpos+1, tailposl+2-.;(5)根據(jù)步驟的奇偶值校驗(yàn)結(jié)果來判斷headpos」和tailpos」是否處在GBK雙字節(jié)漢字的邊界上;(6)輸出GBK字符查詢結(jié)果。
7.如權(quán)利要求6所述的基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng)的實(shí)現(xiàn)方法,其特征在于,在步驟(4)中,所述步驟A具體為1)將步長計(jì)數(shù)器count初始設(shè)為0 ;2)沿headp0S_k向前, 依次檢測字節(jié) T_i,其中,i = headposl-1, headposl-2····,0 ;3)計(jì)算 T_i&0x80 是否為 0 ; 4)根據(jù)T_i&0x80運(yùn)算的數(shù)值進(jìn)行如下處理邏輯如果T_i&0x80等于0,則記錄head_valid =1,并終止本步驟后續(xù)流程,直接進(jìn)入步驟B ;如果T_i&0x80不等于0,則將計(jì)數(shù)器count =coimt+1,再根據(jù)T_i的數(shù)值,進(jìn)行以下兩個(gè)處理子邏輯如果i = 0,則終止該步驟,并輸出count數(shù)值;如果i > 0,則將T_i設(shè)為T_i-1,并重新執(zhí)行上述步驟A的運(yùn)算,即繼續(xù)沿本字符串向前檢測;5)判斷步長計(jì)數(shù)器count的奇偶值,如果count為奇數(shù),則記錄head_ valid = 0 ;如果 count 為偶數(shù),則記錄 head_valid = 1。
8.如權(quán)利要求6所述的基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng)的實(shí)現(xiàn)方法,其特征在于,在步驟⑷中,所述步驟B具體為1)將步長計(jì)數(shù)器count初始設(shè)為0 ;2)沿tailp0S_k向后, 依次檢測字節(jié)T_i,其中i = tailp0S+l,tailp0Sl+2….;3)計(jì)算T_i&0x80是否為0 ;4)根據(jù)T_i&0x80運(yùn)算的數(shù)值進(jìn)行如下處理邏輯如果T_i&0x80等于0,則記錄tailjalid = 1,并終止本步驟后續(xù)流程;如果T_i&0x80不等于0,則將計(jì)數(shù)器count = coimt+1,再根據(jù) T_i的數(shù)值,進(jìn)行以下兩個(gè)處理子邏輯如果i和當(dāng)前字符串teXt_Str的長度相同,則終止該步驟,并輸出count數(shù)值;如果i <當(dāng)前字符串teXt_Str的長度,則將T_i設(shè)為T_i+1,并重新執(zhí)行上述步驟B的運(yùn)算,即沿本字符串繼續(xù)向后檢測力)判斷步長計(jì)數(shù)器count的奇偶值,如果count為奇數(shù),則記錄tailjalid = 0 ;如果count為偶數(shù),則記錄tailjalid =1。
9.如權(quán)利要求6所述的基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng)的實(shí)現(xiàn)方法,其特征在于,步驟(5)具體為如果head_Valid = 1且tailjalid = 1時(shí),則當(dāng)前GBK字符的匹配結(jié)果有效,將該次查詢所得的匹配信息1^£1(1 08_1^3£01 08_1^進(jìn)行記錄;如果head_valid = 0或 tailjalid = 0時(shí),則當(dāng)前GBK字符的匹配結(jié)果無效,忽略本次匹配結(jié)果,并設(shè)置k = k+1, 繼續(xù)返回步驟,重新進(jìn)行下一個(gè)查詢位置的驗(yàn)證工作。
10.如權(quán)利要求6所述的基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng)的實(shí)現(xiàn)方法,其特征在于, 步驟(6)具體為如果k已是步驟(3)的最后一個(gè)匹配結(jié)果,則結(jié)束本次查詢的所有驗(yàn)證工作,將成功匹配的全部符查詢結(jié)果進(jìn)行輸出;如果k不是步驟(3) 最后一個(gè)匹配結(jié)果,則設(shè)置k = k+Ι,繼續(xù)返回步驟(4),重新進(jìn)行下一個(gè)查詢位置的驗(yàn)證工作。
全文摘要
本發(fā)明公開了一種基于奇偶校驗(yàn)的GBK字符查詢系統(tǒng),包括字符基礎(chǔ)查詢模塊、GBK奇偶校驗(yàn)?zāi)K和漢字邊界驗(yàn)證模塊;字符基礎(chǔ)查詢模塊用于對(duì)讀取的GBK編碼字符串與查詢字符串進(jìn)行基礎(chǔ)查詢,在GBK編碼字符串中找到滿足查詢字符串出現(xiàn)的位置,并記錄起始位置和終止位置;GBK奇偶校驗(yàn)?zāi)K用于對(duì)字符基礎(chǔ)查詢模塊所得的基礎(chǔ)查詢結(jié)果進(jìn)行編碼校驗(yàn),采用向前向后的雙向奇偶校驗(yàn)方法;漢字邊界驗(yàn)證模塊用于根據(jù)GBK奇偶校驗(yàn)?zāi)K的奇偶值校驗(yàn)結(jié)果判斷起始位置和終止位置是否處在GBK雙字節(jié)漢字的邊界上。此外,本發(fā)明還公開了該系統(tǒng)的實(shí)現(xiàn)方法。本發(fā)明能查找并確定漢字的邊界,從而成功解決漢字高低字節(jié)編碼交叉容易導(dǎo)致的查詢誤匹配問題。
文檔編號(hào)G06F17/30GK102479187SQ20101055548
公開日2012年5月30日 申請(qǐng)日期2010年11月23日 優(yōu)先權(quán)日2010年11月23日
發(fā)明者陳運(yùn)文 申請(qǐng)人:盛樂信息技術(shù)(上海)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
明溪县| 合作市| 报价| 万荣县| 北京市| 郎溪县| 通江县| 沙坪坝区| 阿巴嘎旗| 普宁市| 柳江县| 宿州市| 巴彦淖尔市| 开鲁县| 庆城县| 霍邱县| 灵山县| 宜城市| 北票市| 青阳县| 仙桃市| 洛宁县| 常熟市| 嘉禾县| 通江县| 崇仁县| 嘉鱼县| 寿阳县| 安西县| 安泽县| 乐至县| 永济市| 封开县| 邳州市| 化德县| 绍兴县| 泗阳县| 巍山| 北京市| 合川市| 正镶白旗|