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

模式匹配索引查找方法

文檔序號(hào):6461810閱讀:295來(lái)源:國(guó)知局
專利名稱:模式匹配索引查找方法
技術(shù)領(lǐng)域
語(yǔ)言處理、人工智能、圖象識(shí)別、信息查詢、信息過(guò)濾、基因比對(duì)等眾多領(lǐng)域使用“模式匹配”技術(shù),與“模式匹配”接近的技術(shù)是“相似比較”不考慮兩個(gè)“模式”的“基元”的結(jié)構(gòu),只判斷一個(gè)“模式”包含、可能包含、不包含另一個(gè)“模式”的“基元”。“相似比較”符合人類認(rèn)知規(guī)律,其有效算法有“質(zhì)數(shù)代換字符串檢索技術(shù)”和“位標(biāo)記字符串檢索技術(shù)”。本發(fā)明在“位標(biāo)記字符串檢索技術(shù)”基礎(chǔ)上,提出減少標(biāo)記所用的bit數(shù)n、選擇部分“基元”進(jìn)行標(biāo)記或進(jìn)行不均衡分組標(biāo)記、對(duì)數(shù)據(jù)庫(kù)記錄或記錄的其它篩選值組織存貯,進(jìn)一步提高“相似比較”的查找速度;按同樣的原理,也可以用“質(zhì)數(shù)代換字符串檢索技術(shù)”實(shí)現(xiàn),或把“位標(biāo)記”同“質(zhì)數(shù)代換”方法結(jié)合起來(lái)實(shí)現(xiàn)。“模式匹配”是通用的術(shù)語(yǔ),“索引”指“相似比較”能快速為“模式匹配”確定一個(gè)范圍,但不是絕對(duì)準(zhǔn)確的定位,稱為“模式匹配索引查找方法”,以便業(yè)界了解。
聲明本發(fā)明對(duì)“基因比對(duì)”開(kāi)放使用,保留其它方面的所有權(quán)利。

背景技術(shù)
“模式匹配”應(yīng)用廣泛,字符串模式匹配主要有兩類方法1、BF算法的改進(jìn)方法“KMP”和“BM”;2、“位向量方法”。
本人在中國(guó)申請(qǐng)?zhí)?00410067258.X、國(guó)際申請(qǐng)?zhí)朠CT/CN200

/001493的專利申請(qǐng)文件中,提出以質(zhì)數(shù)代換字符元,可以得到字符串S所有字符元相應(yīng)的質(zhì)數(shù)的乘積,稱為F值,如果Fa不能被Fb整除,則Fa所代表的若干個(gè)字符串Sa不包含F(xiàn)b所代表的若干個(gè)字符串Sb。如果Fa能被Fb整除,則Fa所代表的若干個(gè)字符串Sa包含或可能包含F(xiàn)b所代表的若干個(gè)字符串Sb的所有字符元,稱為“質(zhì)數(shù)代換字符串檢索技術(shù)”;測(cè)試表明,“質(zhì)數(shù)代換”方法比“模式匹配”快1-2倍。
本人在中國(guó)申請(qǐng)?zhí)?00510023383.5、國(guó)際申請(qǐng)?zhí)朠CT/CN2005/001642的專利申請(qǐng)文件中,提出分全部字符元為n組,并用一個(gè)數(shù)據(jù)的n個(gè)均為0的bit,記為W,來(lái)標(biāo)記組成字符串的字符元信息;如果字符串S的一個(gè)字符元P1屬于第n組,則將W相應(yīng)的第n個(gè)bit標(biāo)記為1,類似地,根據(jù)S其它字符元P2、P3、P4…所屬的組對(duì)W進(jìn)行標(biāo)記,完成全部字符元標(biāo)記后的W,記錄有S的信息,稱為S的“位值”;通過(guò)對(duì)Sa的Wa與Sb的Wb進(jìn)行比較,可以判斷Sb不包含、包含或可能包含檢索關(guān)鍵詞Sb的所有字符元,稱為“位標(biāo)記字符串檢索技術(shù)”;一般來(lái)說(shuō),“位標(biāo)記”方法比“模式匹配”快1個(gè)數(shù)量級(jí)。
相對(duì)“KMP”“BM”、“位向量方法”等“模式匹配”方法來(lái)說(shuō),質(zhì)數(shù)代換和位標(biāo)記檢索方法的特點(diǎn)是1、檢索是通過(guò)對(duì)主串和子串的“總”的質(zhì)數(shù)乘積值、位值進(jìn)行“一次性比較”,判斷主串不包含或可能包含子串的全部字符元,能提高速度。2、只考慮主串是否包含子串的“字符元”,不考慮主串與子串相應(yīng)字符的“距離”和“秩序”是否相同,是“相似比較”。在“位標(biāo)記”基礎(chǔ)上,可以再用“BM”和“位向量方法”等方法得到“模式匹配”的結(jié)果。不過(guò),如果在“相似比較”的基礎(chǔ)上進(jìn)行“語(yǔ)法分析”,比“模式匹配”更符合語(yǔ)言規(guī)律,其原理適合信息處理的各個(gè)領(lǐng)域。
就漢語(yǔ)語(yǔ)音輸入來(lái)說(shuō),目前主要使用的是N元統(tǒng)計(jì)模型和分詞方法,兩者準(zhǔn)確率不能滿足應(yīng)用需要。本人提出預(yù)先建立漢語(yǔ)的“參考句型數(shù)據(jù)庫(kù)”,運(yùn)用“位標(biāo)記”“質(zhì)數(shù)代換”技術(shù)為“拼音串”從數(shù)據(jù)庫(kù)查找“參考句型”的語(yǔ)言處理方法,能夠快速處理語(yǔ)言的“跨音節(jié)協(xié)同現(xiàn)象”和“無(wú)序協(xié)同現(xiàn)象”,使基于參考句型的語(yǔ)言處理方法具有可行性。
本發(fā)明在“位標(biāo)記”“質(zhì)數(shù)代換”基礎(chǔ)上,提出對(duì)數(shù)據(jù)庫(kù)進(jìn)行“規(guī)劃存貯”“選擇標(biāo)記”,進(jìn)一步提高查找速度,VC編程,在賽揚(yáng)800的cpu中,一般0.01-0.5秒能從400萬(wàn)條記錄找到目標(biāo)記錄,使基于參考句型的語(yǔ)言處理方法在中低檔cpu上也有可行性。


發(fā)明內(nèi)容
計(jì)算機(jī)應(yīng)用已經(jīng)從最初單純的數(shù)值計(jì)算發(fā)展為主要是數(shù)據(jù)處理,進(jìn)一步的趨勢(shì)是智能信息處理,信息處理智能化需要理解人類的認(rèn)知規(guī)律,并提出有效的算法。下面首先說(shuō)明人類認(rèn)知領(lǐng)域中的“協(xié)同現(xiàn)象”,以及運(yùn)用“質(zhì)數(shù)代換字符串檢索技術(shù)”“位標(biāo)記字符串檢索技術(shù)”處理“協(xié)同現(xiàn)象”的可行性,再說(shuō)明在“位標(biāo)記檢索技術(shù)”“質(zhì)數(shù)代換檢索技術(shù)”基礎(chǔ)上,提高查找速度的各種方法以及如何綜合運(yùn)用這些方法。
1、信息協(xié)同現(xiàn)象與“相似比較”算法 漢語(yǔ)有400多個(gè)無(wú)調(diào)音節(jié),常用漢字有5000-7000個(gè),平均每個(gè)音節(jié)對(duì)應(yīng)10多個(gè)常用漢字,有的音節(jié)對(duì)應(yīng)上百個(gè)漢字。單獨(dú)給出一個(gè)音節(jié)“xue”、或“sheng”,我們不能確定其意義及所指的漢字,但“xuesheng”兩個(gè)音節(jié)連用,則意為“學(xué)生”,這里“xue”與“sheng”起了“互證”作用,稱為語(yǔ)言的“協(xié)同現(xiàn)象”。漢語(yǔ)2個(gè)音節(jié)排列數(shù)約為400*400=160,000,《現(xiàn)代漢語(yǔ)詞典》所收60,000條“語(yǔ)詞”不完全是雙音節(jié)詞語(yǔ),但漢語(yǔ)雙音節(jié)中一方面存在“有音無(wú)義”現(xiàn)象,如“rexiang”;一方面存在“同音多詞”現(xiàn)象,如音為“shixian”的詞語(yǔ)有“實(shí)現(xiàn)、事先、失陷、視線、時(shí)限、時(shí)鮮、時(shí)賢”,音為“l(fā)ixiang”的詞語(yǔ)有“理想、里巷”。不過(guò),如果有人說(shuō)“shixianlixiang”,我們會(huì)理解為“實(shí)現(xiàn)理想”,而不會(huì)理解為“視線里巷”,這里“shixian”與“l(fā)ixiang”起了“互證”作用??傊?,音節(jié)越多,語(yǔ)義越確定。對(duì)于漢語(yǔ)來(lái)說(shuō),三音節(jié)、四音節(jié)中,“同音多詞”或“同音多義”的概率越來(lái)越少,并且出現(xiàn)大量“有音無(wú)義”現(xiàn)象。正是由于三音節(jié)中“有音無(wú)義”的概率大,如果他人談話中提及一個(gè)三音節(jié)的陌生人名,如“l(fā)ifuhao”,我們多數(shù)時(shí)候能判斷出這是一個(gè)人的名字,而不是詞語(yǔ)。
既然三音節(jié)、四音節(jié)中,“同音多義”的概率越來(lái)越少,如將單音節(jié)詞語(yǔ)、雙音節(jié)詞語(yǔ),按語(yǔ)義搭配組成三、四字乃至五字以上的短語(yǔ)、句型,給出相應(yīng)的拼音,建立數(shù)據(jù)庫(kù),由于音、義一一對(duì)應(yīng)性好,根據(jù)這種數(shù)據(jù)庫(kù)進(jìn)行音字轉(zhuǎn)換,就能提高準(zhǔn)確率。設(shè)語(yǔ)音轉(zhuǎn)換或拼音輸入的T為“shixianlixiangxuyaonuli”,用正向最大匹配法進(jìn)行分詞,可以在數(shù)據(jù)庫(kù)找到拼音串“shixianlixiang”,其相應(yīng)的漢字串為“實(shí)現(xiàn)理想”,將T處理為“實(shí)現(xiàn)理想xuyaonuli”,可以避免用“shixian”“l(fā)ixiang”分別處理時(shí)的選詞錯(cuò)誤。
當(dāng)然,語(yǔ)言不是這么簡(jiǎn)單。如果有人說(shuō)“shixianweidalixiang”,我們會(huì)理解為“實(shí)現(xiàn)偉大理想”,而不是“時(shí)賢偉大里巷”,說(shuō)明語(yǔ)言的“協(xié)同現(xiàn)象”是可以“跨音節(jié)”的;如果有人說(shuō)“l(fā)ixiangyijingshixian”,我們會(huì)理解為“理想已經(jīng)實(shí)現(xiàn)”,而不是“理想意境視線”,說(shuō)明語(yǔ)言的“協(xié)同現(xiàn)象”是可以一定程度上“無(wú)序”的。但是,通常的分詞索引查找方法不能發(fā)現(xiàn)“shixianweidalixiang”、“l(fā)ixiangyijingshixian”同數(shù)據(jù)庫(kù)“shixianlixiang”有內(nèi)在聯(lián)系,也就是對(duì)“跨音節(jié)協(xié)同現(xiàn)象”“無(wú)序協(xié)同現(xiàn)象”無(wú)效。當(dāng)然,對(duì)字符串進(jìn)行逐字符比較,也能發(fā)現(xiàn)兩者之間存在包含關(guān)系,但數(shù)據(jù)庫(kù)大記錄多時(shí),響應(yīng)速度不能滿足需要。
所以,本人提出用“質(zhì)數(shù)代換字符串檢索技術(shù)”進(jìn)行語(yǔ)言分析,語(yǔ)言文字處理中的基本單位有音素、音節(jié)、字母、漢字、詞匯等,我們稱質(zhì)數(shù)代換的基本單位為“字符元”,記為P,字符串S的P的相應(yīng)質(zhì)數(shù)乘積記為F,如果Fa能被Fb整除,則Sa包含Sb的全部字符元。該方法把主串與子串之間字符的“串行比較”變成相應(yīng)質(zhì)數(shù)的“并行相除”,減少了讀取數(shù)據(jù)的時(shí)間,在一定范圍內(nèi),速度比模式匹配快1-2倍。整除判斷“不考慮字符元秩序”,但可以在“整除判斷”的基礎(chǔ)上再分析字符元的結(jié)構(gòu),適合處理語(yǔ)言的“跨音節(jié)協(xié)同現(xiàn)象”“無(wú)序協(xié)同現(xiàn)象”。當(dāng)然,“質(zhì)數(shù)代換檢索技術(shù)”的速度也不夠快,但可以用“位標(biāo)記字符串檢索技術(shù)”進(jìn)行句型初選。
語(yǔ)言分析數(shù)據(jù)庫(kù)中可以有提煉出來(lái)的句子、詞語(yǔ)搭配、短語(yǔ)、詞組、詞語(yǔ)等,概略地稱為“基本句型”,其數(shù)據(jù)庫(kù)稱為“基本句型數(shù)據(jù)庫(kù)”,記為jxk。從jxk中篩選出來(lái)的,字符元被關(guān)鍵詞T包含的句型稱為“參考句型”。對(duì)“參考句型”進(jìn)行分析比較后,確定用來(lái)處理T的句型稱為“基礎(chǔ)句型”。選擇“參考句型”做“基礎(chǔ)句型”,優(yōu)先選擇字符元多的句型,簡(jiǎn)稱為“長(zhǎng)詞優(yōu)先”。語(yǔ)言處理中,除了“長(zhǎng)詞優(yōu)先”的原則外,應(yīng)綜合考慮語(yǔ)法、頻率、聯(lián)想、語(yǔ)調(diào)、重音、停頓、聲調(diào)等多方面因素。語(yǔ)言是復(fù)雜的,在參考句型的基礎(chǔ)上,可給出文體信息、引文信息、關(guān)聯(lián)信息等,提高轉(zhuǎn)換音標(biāo)串為文字串的準(zhǔn)確率。
“協(xié)同現(xiàn)象”不僅存在于語(yǔ)言理解中,也存在于視覺(jué)認(rèn)知領(lǐng)域。但圖象比語(yǔ)言更豐富,可以首先對(duì)圖象進(jìn)行各種預(yù)處理,再按某種規(guī)則識(shí)別圖象的“圖元”,按“圖元”進(jìn)行質(zhì)數(shù)代換、位標(biāo)記,實(shí)現(xiàn)對(duì)圖象的快速查找和初步比較,與語(yǔ)言處理相似,在此基礎(chǔ)上,可再對(duì)“圖象”的結(jié)構(gòu),也就是“圖元的語(yǔ)法”進(jìn)行分析比較。生物的基因也是協(xié)同發(fā)揮作用,可以用相同方法處理,當(dāng)然,發(fā)現(xiàn)基因之間具體的協(xié)同作用是生物學(xué)家的工作。基因是遺傳信息的單位,類似地,其它信息處理中,也可以根據(jù)需要?jiǎng)澐殖龈鞣N“信息元”,進(jìn)行“質(zhì)數(shù)代換”“位標(biāo)記”,實(shí)現(xiàn)快速查找和初步比較。本文件統(tǒng)稱“字符元”、“圖元”、“基因”“信息元”為“相似比較”“模式匹配”的“基元”,下面圍繞語(yǔ)言處理來(lái)說(shuō)明“索引查找”的原理,其它應(yīng)用可以參考實(shí)現(xiàn)。
2.小字符集的“鏈?zhǔn)綐?biāo)記”、長(zhǎng)字符串的“鏈?zhǔn)角蟹帧薄扒蟹纸M合”處理 “模式匹配索引查找方法”是“質(zhì)數(shù)代換”“位標(biāo)記字符串檢索技術(shù)”的從屬技術(shù),“位標(biāo)記字符串檢索技術(shù)”的要點(diǎn)有 (1)標(biāo)記可以用“1”標(biāo)記,也可以用“0”標(biāo)記,本文件均指“1”標(biāo)記。
(2)設(shè)以數(shù)據(jù)的n個(gè)bit進(jìn)行標(biāo)記,如果用“1”標(biāo)記,由于“重疊”,m個(gè)字符元的S標(biāo)記后,位值可能有1、2、3…m個(gè)bit為“1”,其平均概率mb可用下式計(jì)算
(3)設(shè)標(biāo)記所用位數(shù)為n,字符串S有m個(gè)字符元,標(biāo)記后有mb個(gè)bit為“1”,檢索關(guān)鍵詞T有k個(gè)字符元,標(biāo)記后有kb個(gè)bit為“1”。準(zhǔn)確計(jì)算字符串位標(biāo)記的篩選概率,應(yīng)該用mb和kb計(jì)算,但mb與m、kb與k是正相關(guān)的,粗略地,可以直接用m和k進(jìn)行計(jì)算,其值越小,篩選效果越好 影響篩選概率的三個(gè)因素中,用戶檢索時(shí)所用關(guān)鍵詞T的長(zhǎng)度k,數(shù)據(jù)庫(kù)S的長(zhǎng)度m是“不可控制”的,可控制的因素是標(biāo)記所用的位數(shù)n。我們可以設(shè)想,如果max(m,k)=n,意味著Wn或Wt值全部bit為“1”,那么用Wt與Wn進(jìn)行比較沒(méi)有篩選作用;因此,必須讓n值大于m和k,但是n值越大,存貯位值的空間需求越多。一般來(lái)說(shuō),使n≈2max(m,k)是適當(dāng)?shù)?,設(shè)數(shù)據(jù)庫(kù)字符串平均長(zhǎng)度有70個(gè)字符元,如果是32位cpu,可用4個(gè)無(wú)符號(hào)長(zhǎng)整數(shù)n=128標(biāo)記。對(duì)于漢字這樣的“大字符集”來(lái)說(shuō),容易處理,相應(yīng)地將漢字分為128組,如果字符串S的某個(gè)字符元屬于第i組,則將第i個(gè)bit置為1。正檢索時(shí),將T的位值Wt1同S的位值Ws1進(jìn)行比較;若Wt1 & Ws1=Wt1,繼續(xù)比較Wt2和Ws2,否則放棄;若Wt2 & Ws2=Wt2,繼續(xù)比較Wt3和Ws3;若Wt3 & Ws3=Wt3,繼續(xù)比較Wt4和Ws4,滿足條件的記錄進(jìn)入R1,再用字符元逐位比較得到R2。其中某項(xiàng)Wt=0時(shí),恒有0 & Ws=0,該項(xiàng)比較不起篩選作用,不必進(jìn)行;起篩選作用的是Wt>0的項(xiàng),就漢語(yǔ)來(lái)說(shuō),T通常2-6個(gè)字符元,如果隨意分組,可能平均分布在4個(gè)Wt中,為減少比較的項(xiàng)數(shù),可以將含“高頻字符元”的組,適當(dāng)集中在Ws1和Ws2中,則T標(biāo)記后,“1”的bit比較集中在Wt1、Wt2,以減少比較次數(shù),稱為“高頻配組”。在“字符元”數(shù)量為數(shù)百個(gè)、頻率不均衡的數(shù)據(jù)庫(kù)可以提高性能,如果“字符元”很多、頻率低或比較均衡,該方法未必有效。
但拼音文字屬于“小字符集”,英語(yǔ)僅有26或52個(gè)字符,直接以1個(gè)字母對(duì)應(yīng)1個(gè)bit,當(dāng)字符串m>60時(shí),標(biāo)記大量重疊,難以達(dá)到篩選目的,可以采用“鏈?zhǔn)綐?biāo)記”26個(gè)字母有676種排列aa、ab、_ac、…zy、zz,統(tǒng)計(jì)分析得到各種排列的頻率,設(shè)數(shù)據(jù)庫(kù)字符串平均為70個(gè)字母,用4個(gè)無(wú)符號(hào)長(zhǎng)整數(shù)標(biāo)記,則n有128個(gè)bit,將676種排列按頻率均衡分為128組。設(shè)字符串為“changjiang”,按ch、ha、an、ng、gj、ji、ia、an、ng所屬的組i,將相應(yīng)第i個(gè)bit置為“1”,得到“changjiang”的位值。檢索時(shí),將S的位值Ws1、Ws2、Ws3、Ws4,同T的位值相應(yīng)的項(xiàng)Wt1、Wt2、Wt3、Wt4進(jìn)行比較,全部滿足條件的記錄進(jìn)入R1,再用字符串逐位比較得到R2。如果考慮字符串中的符號(hào)和空格,則有更多的排列。對(duì)于很長(zhǎng)的文本,也可考慮將“鏈?zhǔn)綐?biāo)記”的字符元設(shè)為3個(gè)字母的排列aab、aab、aac、…zzy、zzz,統(tǒng)計(jì)頻率,分組標(biāo)記檢索。
從另一方面考慮,也可以將長(zhǎng)的字符串,切分為短的“句子”,分別標(biāo)記,但切分沒(méi)有明確的標(biāo)準(zhǔn),為保證檢索時(shí)不發(fā)生遺漏,可以“鏈?zhǔn)角蟹帧?,設(shè)字符串為 qmbezskjtcytcdefjazysfkysdklasdflkqerqoifgqxsgipqwetxfgchpzrsdfcv 如果以n=64標(biāo)記,則m以32為宜,設(shè)“鏈接長(zhǎng)度”r=12,則字符串切分為 qmbezskjtcytcdefjazysfkysdklasdf sfkysdklasdflkqerqoifgqxsgipqwet fgqxsgipqwetxfgchpzrsdfcv 應(yīng)用中可根據(jù)情況設(shè)定n、m、r的大小?;虮葘?duì),可以把先把長(zhǎng)DNA序列“鏈?zhǔn)角蟹帧睘椤熬渥印?,再進(jìn)行“鏈?zhǔn)綐?biāo)記”?!版?zhǔn)角蟹帧辈粌H可用于處理數(shù)據(jù)庫(kù)的長(zhǎng)字符串,也可用于處理語(yǔ)音輸入逆檢索中長(zhǎng)的T。漢語(yǔ)句式比較短,通常小于15個(gè)字符元,所以用n=32進(jìn)行標(biāo)記處理是適當(dāng)?shù)?,但書面語(yǔ)中也有下面的長(zhǎng)句 zhongguojingjidechixukuaisuzengzhangyizhishixifangjingjixuejiesuojinjinledaodemituan. 該句有28個(gè)音節(jié),即28個(gè)P,對(duì)于32位的cpu,直接進(jìn)行質(zhì)數(shù)代換需要很大的整數(shù)數(shù)據(jù)類型,位標(biāo)記則篩選效果很差,所以要進(jìn)行切分處理。自然語(yǔ)言的停頓大體按意群進(jìn)行,但計(jì)算機(jī)未必能很好地按停頓進(jìn)行切分,采用“鏈?zhǔn)角蟹帧笨梢员苊膺@樣的問(wèn)題,如第一次切分1-15共15個(gè)音節(jié),第二次切分10-24共15個(gè)音節(jié),第三次切分19以后的音節(jié)。
zhongguojingjidechixukuaisuzengzhangyizhishixi zengzhangyizhishixifangjingjixuejiesuojinjinle xuejiesuojinjinledaodemituan. 對(duì)這樣切分出來(lái)的3個(gè)片段,分別進(jìn)行處理,從jxk中查找參考句型。一般來(lái)說(shuō),“津津樂(lè)道”、“西方經(jīng)濟(jì)學(xué)界”“經(jīng)濟(jì)增長(zhǎng)”“持續(xù)快速增長(zhǎng)”是計(jì)算機(jī)能判斷轉(zhuǎn)換的部分,句子處理為 zhongguo經(jīng)濟(jì)de持續(xù)快速增長(zhǎng)yizhishi西方經(jīng)濟(jì)學(xué)界suo津津樂(lè)道demituan. 下一步,將已轉(zhuǎn)換的部分去除,得到下面拼音串 zhongguodeyizhishisuodemituan 如果jxk中有“中國(guó)是”“是迷團(tuán)”“一直是”等搭配,則可處理為 中國(guó)de一直是suode謎團(tuán) 再合并被去除的已判斷的部分 中國(guó)經(jīng)濟(jì)de持續(xù)快速增長(zhǎng)一直是西方經(jīng)濟(jì)學(xué)界suo津津樂(lè)道de迷團(tuán)。
借助語(yǔ)法、詞頻、字頻、前后漢字之間的“聯(lián)想”,可將句子轉(zhuǎn)換為 中國(guó)經(jīng)濟(jì)的持續(xù)快速增長(zhǎng)一直是西方經(jīng)濟(jì)學(xué)界所津津樂(lè)道的迷團(tuán)。
語(yǔ)言處理中,對(duì)長(zhǎng)語(yǔ)句也可以采用“切分組合”方式處理,如將上面語(yǔ)句切分為A、B、C三段,再組合為AB、AC、BC zhongguojingjidechixukuaisu+zengzhangyizhishixifangjingjixue zhongguojingjidechixukuaisu+jiesuojinjinledaodemituan. zengzhangyizhishixifangjingjixue+jiesuojinjinledaodemituan 對(duì)AB、AC、BC進(jìn)行標(biāo)記、代換,在jxk中查找參考句型。這種方式可以解決“遠(yuǎn)距離相關(guān)”,但如果最優(yōu)參考句型的字符元恰好在分別在A、B、C中,則不能找到。
3.選擇標(biāo)記與不均衡分組標(biāo)記 在“位標(biāo)記字符串檢索技術(shù)”中,對(duì)P采用“頻率均衡分組”,以達(dá)到最好的篩選效果,但在某些特殊情況下,“不均衡分組標(biāo)記”篩選效果可能更好。
我們知道,如果用不多的時(shí)間選拔數(shù)學(xué)好的學(xué)生攻讀研究生,讓線性代數(shù)、概率論題量較少,微積分、隨機(jī)過(guò)程等難度大的數(shù)學(xué)題量較多,考試效果會(huì)更好。設(shè)想1個(gè)數(shù)據(jù)庫(kù),字符串平均長(zhǎng)度m=24,如果用1個(gè)長(zhǎng)整數(shù)“頻率均衡分組”標(biāo)記,因?yàn)閙的中“1”的bit多,篩選效果不好;如果用2個(gè)長(zhǎng)整數(shù)標(biāo)記,W的空間是2倍,檢索時(shí)位值比較的時(shí)間也是2倍。語(yǔ)言中字符元的使用頻率是不一致的,部分字符元是高頻的,篩選意義較低,部分字符元是低頻,篩選意義較高,可以將頻率30%的高頻字符元分為1組,稱為“堆疊組”,用1個(gè)bit標(biāo)記;將其余頻率p=70%的字符元分為31組,稱為“控制組”,用31個(gè)bit標(biāo)記,這些字符元,記為K;這樣實(shí)際起篩選作用的是n=31、m*p=24*70%=16.8,可以改善性能。
如果把“堆疊組”去掉,不標(biāo)記頻率30%的高頻字符元,僅用頻率低的p=70%的字符元進(jìn)行標(biāo)記,就成為“選擇標(biāo)記”。下表是字符串為3個(gè)P時(shí),選擇不同比例的字符元為K時(shí),字符串含K的概率 字符串為5個(gè)P時(shí),選擇不同比例的字符元為K時(shí),字符串含K的概率。
容易看出,進(jìn)行選擇標(biāo)記,數(shù)據(jù)庫(kù)字符串S及T都有一定概率不包含K,即W無(wú)值,如果標(biāo)記時(shí)預(yù)設(shè)所有Wn=0,則標(biāo)記后這些記錄仍然Wn=0,所以檢索方法需要調(diào)整。
A.正檢索方法 正檢索中,檢索關(guān)鍵詞T中的P較少,就漢語(yǔ)來(lái)說(shuō),一般為2-6個(gè)漢字。設(shè)T=“方是學(xué)”,其中“方”“學(xué)”為非控制字符元,“是”為控制字符元K,用“是”標(biāo)記,得到T的選擇標(biāo)記位值Wt。毫無(wú)疑問(wèn),包含“方是學(xué)”的S必定包含“是”,Wn值必定滿足Wt & Wn=Wt或其等價(jià)變換式,通過(guò)比較篩選可以得到記錄集R1。Wt & 0≠Wt,Wn=0的記錄不會(huì)進(jìn)入R1。下一步,將T或T的其它篩選值與R1中的記錄進(jìn)行字符元比較或其它篩選值運(yùn)算得到R2。其它篩選值指另一組位值W或V、或質(zhì)數(shù)乘積值F、或F的對(duì)數(shù)L。從上表可以看出,在選擇70%的字符元作為K標(biāo)記W值時(shí),3個(gè)字符元的T,有97.3%的概率,含1-3個(gè)K,就是說(shuō)Wt有值。
如果T=“方學(xué)”,均是非控制字符元,Wt無(wú)值,或Wt=0。設(shè)數(shù)據(jù)庫(kù)中W=0的記錄有“方學(xué)樣”,均為非控制字符元;W>0的記錄有“方學(xué)一”,其中“一”是K;這2條記錄都包含T,但無(wú)法通過(guò)W值比較,將它們從數(shù)據(jù)庫(kù)中篩選出來(lái)。就是說(shuō),當(dāng)Wt無(wú)值,或Wt=0時(shí),本輪篩選無(wú)意義,可以跳過(guò),但下一步需要將T或T的其它篩選值同所有記錄進(jìn)行字符元比較或其它篩選值運(yùn)算得到得到R2。在選擇70%的字符元作為K標(biāo)記W值時(shí),3個(gè)字符元的T,有2.7%的概率不含K,其選擇標(biāo)記位值為Wt=0。應(yīng)用中,篩選概率允許的情況下,p應(yīng)取最大值,以降低T不含K的概率。
B.逆檢索方法 如果T=“方一樣也是學(xué)”,選擇標(biāo)記位值為Wt,其中“一”“是”為K,“方”“樣”“也”“學(xué)”是非控制字符元。包含控制字符元中“一”“是”中任何1個(gè)的記錄的Wn同Wt做“和”運(yùn)算,必然滿足Wt & Wn=Wn或其等價(jià)變換式,通過(guò)比較篩選可以得到記錄集R1。所有僅含非控制字符元組成的記錄Wn無(wú)值或Wn=0,Wt & 0=0,也進(jìn)入R1,位值比較不起篩選作用,所以Wn=0的記錄多,當(dāng)Wt>0時(shí),是不利的。下一步,將T或T的其它篩選值與R1中的記錄進(jìn)行字符元比較或其它篩選值運(yùn)算得到R2。
如果T=“方樣也學(xué)”,“方”“樣”“也”“學(xué)”均為非控制字符元,選擇標(biāo)記位值為Wt=0,檢索關(guān)鍵詞T不含任何K,而Wn范圍的記錄至少有1個(gè)K,所以Wn范圍的記錄不可能被T包含,不可能是T的基本句型或參考模式,R1只能是Wn無(wú)值或Wn=0的記錄。下一步,只需將T或T的其它篩選值與這些記錄進(jìn)行字符元比較或其它篩選值運(yùn)算得到R2。
就是說(shuō),逆檢索中,如果適當(dāng)降低p的大小,讓W(xué)t=0,則僅需檢索Wn=0的記錄的概率大;另一方面,p過(guò)少,Wn=0值的記錄太多,當(dāng)Wt有值時(shí),是不利的。
正檢索中當(dāng)T的字符元k比較小時(shí),“選擇標(biāo)記”后T中K的數(shù)量“kk”更??;逆檢索中當(dāng)S的字符元m比較小時(shí),“選擇標(biāo)記”后S中K的數(shù)量“mk”更小,甚至為0;篩選效果不好。所以,“一般位值”W不提倡“選擇標(biāo)記”,“選擇標(biāo)記”的主要意義是減少位值的種類,進(jìn)行“規(guī)劃存貯”,選擇字符元進(jìn)行質(zhì)數(shù)代換也是如此,見(jiàn)“綜合利用”一節(jié)。
另外,上文提到,處理長(zhǎng)字符串,為了減少W比較的項(xiàng),進(jìn)行“高頻配組”,如果分組時(shí),使Wn1中的各組頻率略高于其它W項(xiàng),則Wt1有值的概率也會(huì)稍大,是“不均衡分組標(biāo)記”反向利用。處理長(zhǎng)字符串,如果完全標(biāo)記位值Wn有4個(gè)以上長(zhǎng)整數(shù),選擇部分高頻字符元進(jìn)行標(biāo)記,得到一組位值Wnk,檢索時(shí)先用Wtk同Wnk比較,再用Wt同Wn進(jìn)行比較也是可以的。
4.規(guī)劃存貯 一個(gè)典型的語(yǔ)音輸入數(shù)據(jù)庫(kù)的參考句型庫(kù)jxk包括以下信息參考句型、拼音串、位標(biāo)記值、頻率以及語(yǔ)法信息,而語(yǔ)法信息又可包括參考句型各成分的詞性、搭配之間是否可插入其它成分等。由于語(yǔ)言研究的不足,缺乏現(xiàn)代漢語(yǔ)句型資料,根據(jù)經(jīng)驗(yàn)估計(jì),參考句型及詞語(yǔ)搭配,短則2個(gè)漢字,長(zhǎng)則可能7、8個(gè)漢字。所以,測(cè)試時(shí)用10萬(wàn)多條兩字詞與4萬(wàn)多條三字詞重復(fù)交叉,搭配成4,019,576條、每條5個(gè)漢字的“無(wú)意義”的參考句型,有20,000,000多個(gè)漢字,建成測(cè)試數(shù)據(jù)庫(kù),記為jxk。參考句型數(shù)據(jù)庫(kù)應(yīng)該有拼音串的字段,但拼音串的字段要占用許多空間,所以構(gòu)造的jxk,對(duì)漢語(yǔ)的400多個(gè)音節(jié),每個(gè)音節(jié)用一個(gè)漢字代替,如“興”代表xing。這樣還避免了漢語(yǔ)拼音音節(jié)切分的問(wèn)題,如fangan可切分為fang+an或fan+gan。下面是jxk的簡(jiǎn)單模式 從這個(gè)局部看,“位標(biāo)記”后,jxk中許多記錄的位值W是相同的,“如水豐花科”“豐工百微盧”“專高水區(qū)比”“高唐工開(kāi)花”“科比微心倫”5條音節(jié)代字D均有位值W=300032。檢索中,重復(fù)進(jìn)行5次Wt & 300032=Wt或Wt & 300032=300032判斷,是不必要的。要提高檢索速度,減少不必要的比較,方法是按位值Wn對(duì)jxk進(jìn)行組織存貯,使每種位值Wn與關(guān)鍵詞位值Wt只比較一次,或少數(shù)幾次 (1)雙表處理 首先,對(duì)jxk進(jìn)行按W進(jìn)行組織存貯,用一般數(shù)據(jù)庫(kù)的“聚集存貯”可以實(shí)現(xiàn),但目的是將位值相同的記錄存貯在相鄰的空間,并不要求按W值的大小順序存貯;當(dāng)然,如果按W值中“1”的bit個(gè)數(shù)的多少進(jìn)行排序,檢索時(shí),以T中“1”的bit個(gè)數(shù)的多少?zèng)Q定位值比較的起點(diǎn)也是有益的。第2步,對(duì)jxk,按位值分類匯總查詢,生成位值索引表,記為syb。syb表中有字段“mark”,存貯“索引位值”,是用“分類匯總查詢”從jxk去除“一般位值”W的重復(fù)項(xiàng)提取出來(lái)的,記為V,僅為說(shuō)明方便,與W無(wú)本質(zhì)區(qū)別;在syb表中給出字段“jishu”,是各“索引位值”V在jxk中出現(xiàn)的數(shù)量;再在syb中增加地址字段“pJuzi”,給出各“索引位值”V,在jxk中第1條記錄的地址。流程參見(jiàn)附圖1。
syb比較大,我們用類似下面語(yǔ)句查詢分析syb中V值的分布狀況 SELECT CEILING(jishu/10)AS zu,COUNT(jishu)AS zucountFROM syb GROUP BYCEILING(jishu/10)ORDER BY CEILING(jishu/10) 適當(dāng)修改上面語(yǔ)句,繼續(xù)查詢得到下表 檢索方法設(shè)關(guān)鍵詞T音節(jié)代字Dt為“盧仙兒花”,標(biāo)記后索引位值Vt=5648,以Vt與syb表中全部的“索引位值”Vn進(jìn)行位比較,得到滿足Vt & Vn=Vt或其等價(jià)變換條件的記錄集Rv,syb中共有28個(gè)“索引位值V”滿足這個(gè)條件,見(jiàn)下表 對(duì)每一個(gè)滿足條件的Vn,根據(jù)地址pJuzi,在jxk中定位到該位值Vn的第1個(gè)句型。從syb可知,jxk中,Vn=5648的記錄有27條,第1個(gè)句型的地址是0x00732AC8,在定位到該記錄后,用關(guān)鍵詞音節(jié)代字Dt“盧仙兒花”與該記錄的音節(jié)代字Dn進(jìn)行逐字符匹配,確定該記錄是否符合條件。讀取下一條記錄,用Dt同Dn進(jìn)行逐字符匹配,確定是否符合條件。繼續(xù)這一過(guò)程,直到第27條記錄。
處理完Vn=5648記錄后,根據(jù)syb,Vn=5649的記錄有8條,第一條記錄的地址為0x00732C78,定位后,用Dt同Dn進(jìn)行逐字符匹配,確定該記錄是否符合條件。繼續(xù)這一過(guò)程,直到第8條記錄。
類似地,處理其它V值,直到最后的V=1073747472的第15條記錄。
測(cè)試結(jié)果cpu為賽揚(yáng)800,用VC獨(dú)立編程,進(jìn)行“逆檢索”,當(dāng)T為7-15個(gè)字符元時(shí),用時(shí)多在0.1-0.5秒,有時(shí)超過(guò)1秒。為了獲得穩(wěn)定的檢索效果,對(duì)jxk用“另一種字符元分組方案”進(jìn)行位標(biāo)記,得到各記錄的位值W。檢索時(shí),先在syb用Vt & Vn=Vn進(jìn)行篩選,得到Rv,Rv所有jishu的匯總為R1;按地址定位后,再用Wt & Wn=Wn進(jìn)行篩選,滿足條件的記錄為R2;再對(duì)R2范圍的記錄的Dn與Dt進(jìn)行字符比較,得到結(jié)果集R3,用時(shí)多在0.1-0.5秒,最快0.01秒,也有超過(guò)0.7秒,主要決定于T的長(zhǎng)度k的大小,結(jié)果集本身大小也是一個(gè)因素。正檢索可以用Vt & Vn=Vt、Wt & Wn=Wt或等價(jià)式進(jìn)行篩選。
(2)單表處理 雙表處理是一個(gè)參考句型表jxk,一個(gè)位索引表syb,實(shí)際還有一個(gè)音節(jié)信息表yjb,包含漢語(yǔ)拼音的400多個(gè)音節(jié)的音節(jié)代字、統(tǒng)計(jì)頻率、標(biāo)記分組、基本位值、代換質(zhì)數(shù)等信息。單表處理處理,同樣有音節(jié)信息表yjb,但將參考句型表jxk與位索引表syb合并為一個(gè)表syjxb 先將索引表syb擴(kuò)充,增加D1至D10十個(gè)字段,S1至S10十個(gè)字段等,即成為syjxb的架構(gòu)。然后,寫一段代碼將參考句型庫(kù)_jxk中的信息讀出并寫入該表。如,對(duì)于位值V=526406的記錄,在jxk中找到位值W=526406,讀入該位值的10條記錄的句型信息,相應(yīng)地寫入各字段中。如果參考句型庫(kù)jxk中位值W=526406的記錄只有7條,則只填入D1至D7,S1至S7等字段,其余空白。如果參考句型庫(kù)jxk中位值W=526406的記錄超過(guò)10條,則在syjxb中插入另一個(gè)V=526406的記錄,寫入?yún)⒖季湫蛶?kù)jxk中位值W=526406的記錄中其他記錄的信息,以此類推。當(dāng)然,V=526406后也可以是8個(gè)或11個(gè)字符串。下面是syjxb的局部 關(guān)鍵詞音節(jié)代字Dt,標(biāo)記后位值為Vt,正檢索,以之與syjxb表中的“索引位值”Vn進(jìn)行位比較,得到滿足Vt & Vn=Vt或者其等價(jià)變換條件的記錄集Rv;對(duì)于Rv中的每一個(gè)V值,以關(guān)鍵詞音節(jié)代字Dt與其后的D1至D10進(jìn)行模糊匹配,找出滿足條件的Dr。如果是逆檢索,則應(yīng)檢查滿足Vt & Vn=Vn的V值后的D1至D10,找出滿足條件的Dr,以之確定Sr為參考句型。要注意的是可能同時(shí)有數(shù)個(gè)Dr或Sr符合條件。
單表處理,數(shù)據(jù)結(jié)構(gòu)及編程沒(méi)有雙表處理清晰。如果對(duì)jxk組織存貯后,在每個(gè)位值的第1個(gè)記錄,給出信息,指明該位值記錄的數(shù)量及下一個(gè)位值的地址,也是可以的。
從減少V值比較時(shí)間出發(fā),我們提出規(guī)劃存貯。另外一點(diǎn),從上面的V值分布表可以看出,有12074種V值只有92724條記錄,平均每個(gè)位值僅有7.696854條記錄,進(jìn)行聚集索引,這些記錄將分布在其它V值之間,當(dāng)數(shù)據(jù)庫(kù)很大,不能全部裝入內(nèi)存,檢索需要從硬盤讀取數(shù)據(jù)時(shí)會(huì)增加尋道定位時(shí)間,如果n=31,可以考慮令這些記錄的位值Vn=231=2147483648,稱為“位值歸并”,籠統(tǒng)歸并不是最好的選擇,可以根據(jù)記錄的大小、硬盤的性能進(jìn)行細(xì)致的“位值歸并”,原則是只增加某個(gè)Vn值中“1”的bit的個(gè)數(shù),而不減少“1”的個(gè)數(shù)。當(dāng)然,采取措施將這些記錄保存在硬盤相鄰的域,或者強(qiáng)制這些記錄常居內(nèi)存,就不必進(jìn)行“位值歸并”。
5.縮位標(biāo)記 構(gòu)造的全部為五個(gè)音節(jié)的jxk,記錄條數(shù)4,019,576條。以長(zhǎng)整數(shù)的31個(gè)bit進(jìn)行標(biāo)記,因?yàn)橛兄丿B,標(biāo)記后位值可能為1、2、3、4、5個(gè)bit,所以位值理論上有206367種,實(shí)際統(tǒng)計(jì)為206320種,每種V值平均對(duì)應(yīng)的參考句型為19.48條,206320次Vt & V11=Vt位值比較所用的時(shí)間是微不足道的,而V的分布也比較理想,篩選效果也良好。如果參考句型中主要是6個(gè)字符元的基本句型,標(biāo)記后,理論上索引位值V有942648種,942648次Vt & Vn=Vt位值比較所用的時(shí)間,在賽揚(yáng)800的cpu中用時(shí)約0.1秒,設(shè)數(shù)據(jù)庫(kù)仍然是4,019,576條記錄,規(guī)劃存貯索引查找仍能提高響應(yīng)速度。但是,如果jxk中有相當(dāng)多的7個(gè)字符元以上的句型,理論上索引位值V有3572223種,規(guī)劃存貯索引查找就沒(méi)有什么意義。語(yǔ)言多種多樣,有些語(yǔ)言由于本身的特點(diǎn),構(gòu)成語(yǔ)句的字符元可能比較多,提煉出來(lái)的基本句型的字符元必然也多,標(biāo)記后索引位值V種類相應(yīng)增多,直接使用規(guī)劃存貯索引查找不能發(fā)揮作用。
從組合公式可知,m一定時(shí),降低n值,可以降低組合的種類,下表是n=31和n=24時(shí),m取值1-10的組合數(shù) 從表中可以看出當(dāng)字符串長(zhǎng)為7個(gè)字符元時(shí),標(biāo)記后,位值可能有1-7個(gè)bit為“1”,當(dāng)n為31時(shí),V值為3572223種;當(dāng)n為24時(shí),V值為536154種。n=24的方案的V值數(shù)量大為減少。因此,如果組織存貯需要,可以適當(dāng)減少標(biāo)記V值所用的bit數(shù)n。
正檢索時(shí),數(shù)據(jù)庫(kù)的字符串一般較長(zhǎng),而T一般較短;逆檢索時(shí)數(shù)據(jù)庫(kù)的字符串一般較短,而T一般較長(zhǎng)。調(diào)整n的大小,應(yīng)分辨正檢索、逆檢索,考慮數(shù)據(jù)庫(kù)字符串的平均長(zhǎng)度、T的平均長(zhǎng)度、記錄的數(shù)量、內(nèi)存的多少來(lái)決定。n小,V值的種類少,首先,進(jìn)行比較篩選用時(shí)少;其次,根據(jù)V對(duì)jxk聚集存貯索引,每一連續(xù)區(qū)域中的記錄就多,若數(shù)據(jù)庫(kù)很大,不能全部裝入內(nèi)存,檢索需要從外存讀取數(shù)據(jù)時(shí),可以減少磁頭尋道和定位的時(shí)間。但m、k一定時(shí),n小,篩選效果不好。設(shè)數(shù)據(jù)庫(kù)及關(guān)鍵詞均用“1”標(biāo)記,標(biāo)記所用位數(shù)為n,S有m個(gè)字符元,檢索關(guān)鍵詞T有k個(gè)字符元,逆檢索的概率精確計(jì)算應(yīng)該考慮重疊概率,但可以用下式粗略地計(jì)算 按該公式,當(dāng)句型長(zhǎng)m為7時(shí),檢索關(guān)鍵詞長(zhǎng)為k,位標(biāo)記所用bit數(shù)n=31和n=24時(shí)逆檢索的概率如下 用31個(gè)bit標(biāo)記,如果T有k=14音節(jié),位值比較后篩選概率為0.00130515·用24個(gè)bit標(biāo)記,如果T有k=14音節(jié),位值比較后篩選概率為0.009916,就是說(shuō),進(jìn)入R1的記錄接近31個(gè)bit標(biāo)記的7.6倍。如果jxk有400萬(wàn)條記錄,31個(gè)bit標(biāo)記,V值為3572223種,不縮位,需要進(jìn)行3572223種次位值比較,R1有4000000*0.00130515=5521條記錄,采用另一組31個(gè)bit標(biāo)記值W進(jìn)行二次篩選,則R2有5521*0.00130515=7.2條記錄需要進(jìn)行字符元比較。用24個(gè)bit標(biāo)記,V值為536154種,V值比較篩選后R1有4000000*0.009916=39664條記錄;采用另一組31個(gè)bit標(biāo)記值W進(jìn)行二次篩選,則位值比較的總次數(shù)為536154+39664=575818,節(jié)省的位比較次數(shù)3572223-575818=2996405;R2有39664*0.00130515=51.8條記錄需要進(jìn)行逐字符比較,增加51.8-7.2=45記錄,可以忽略不記??梢钥闯觯m度“縮位標(biāo)記”得到V值進(jìn)行組織存貯是有益的。
6.質(zhì)數(shù)代換索引查找 一般來(lái)說(shuō),用“位標(biāo)記”進(jìn)行“索引查找”,因?yàn)槲贿\(yùn)算速度快,但“質(zhì)數(shù)代換”也有可取之處,當(dāng)k和m都比較少時(shí),“質(zhì)數(shù)代換”篩選效果更好如用30個(gè)質(zhì)數(shù)進(jìn)行代換,當(dāng)記錄m=5,k=1時(shí),整除篩選概率P=15.59%;T含2個(gè)K時(shí),整除篩選概率P=2.01%。用質(zhì)數(shù)進(jìn)行“選擇代換”,為避免溢出或使用大的數(shù)據(jù)類型處理,要求p小,但p小,正檢索時(shí),F(xiàn)t無(wú)值的概率會(huì)高,無(wú)效;逆檢索時(shí),F(xiàn)n無(wú)值的概率會(huì)高,進(jìn)入R1的記錄多,增加下一步篩選的負(fù)擔(dān)。
應(yīng)用中,可以把“選擇代換”Fn無(wú)值的記錄,處理為Fn=1,相當(dāng)于Wn=0;另外,正檢索中,可以把Fn值溢出的記錄處理為Fn=0,相當(dāng)于W=2n。檢索方法與位標(biāo)記類似正檢索,當(dāng)T中含K,F(xiàn)t有值,F(xiàn)n%Ft=0的記錄有效,進(jìn)入R1;Fn溢出或處理為Fn=0的記錄,進(jìn)入R1,進(jìn)行下一步處理;Fn無(wú)值處理為Fn=1的記錄不進(jìn)入R1。當(dāng)T中不含K,F(xiàn)t無(wú)值或處理為Ft=1,恒有Fn%1=0,質(zhì)數(shù)代換篩選無(wú)效,跳過(guò)本過(guò)程,下一步處理全部記錄。當(dāng)T中K太多,F(xiàn)t溢出,下一步只對(duì)Fn溢出或處理為Fn=0記錄進(jìn)行處理,其它記錄Fn<Ft,不必處理。逆檢索,當(dāng)T中含K,F(xiàn)t有值,F(xiàn)t%Fn=0的記錄有效,進(jìn)入R1;Fn無(wú)值或處理為Fn=1的記錄Ft%1=0,進(jìn)入R1;對(duì)R1進(jìn)行下一步處理。Fn溢出的記錄Fn>Ft,不必處理,如果強(qiáng)行處理為Fn=0,不能進(jìn)行除法判斷,也不必處理。當(dāng)T中不含K,F(xiàn)t無(wú)值或處理為Ft=1,則Fn無(wú)值或處理為Fn=1的記錄,進(jìn)入R1,進(jìn)行下一步的處理Fn溢出的記錄Fn>Ft,不必處理,如果Fn被處理為Fn=0,不能進(jìn)行除法判斷,也不必處理。當(dāng)T中K太多,F(xiàn)t溢出或處理為Ft=0,0%Fn=0,下一步處理全部記錄。
如果用“質(zhì)數(shù)代換”進(jìn)行“規(guī)劃存貯”,還要考慮F的種類的多少,n個(gè)質(zhì)數(shù)m次乘積值F的種類有

個(gè)。30個(gè)質(zhì)數(shù)5次乘積有278256種,6次乘積有1623160種。一定的選擇比例p,長(zhǎng)為m的S中,mk主要分布在數(shù)學(xué)期望m*p附近,如果S中的K超過(guò)6個(gè)的概率很小,則F值種類可以小于2,000,000,主頻800m的cpu進(jìn)行整除判斷用時(shí)約100-200ms,而篩選概率良好,對(duì)于記錄多的數(shù)據(jù)庫(kù)可以用于組織存貯。
除法指令用時(shí)多,被除數(shù)超出指令允許長(zhǎng)度,用時(shí)更多,這就對(duì)質(zhì)數(shù)的大小和數(shù)量m有限制。32位cpu,有被除數(shù)是64位的指令,最大被除數(shù)是power(2,64)=1.84467E+19,如果質(zhì)數(shù)代換使用n=20個(gè)質(zhì)數(shù),最大質(zhì)數(shù)是71,power(71,10)=3.26E+18,power(71,11)=2.31122E+20,就是說(shuō)字符串最多只能m=10個(gè)P,按中間質(zhì)數(shù)29計(jì)算,字符串最多只能m=13個(gè)P。
64位cpu,最大被除數(shù)是power(2,128)=3.40282E+38,字符串允許的P可以較多。正檢索中,如果數(shù)據(jù)庫(kù)P平均m≤12個(gè),可以用257個(gè)質(zhì)數(shù)代換,當(dāng)T的k≤3時(shí),整除判斷篩選效果遠(yuǎn)超過(guò)“位標(biāo)記”,k>3時(shí),“位標(biāo)記”的篩選效果也足夠好,“質(zhì)數(shù)代換”就沒(méi)有多大意義,257質(zhì)數(shù)的F值種類非常多,不能進(jìn)行“規(guī)劃存貯”,但可以用于“一般代換”或“選擇代換”。
乘除運(yùn)算可以用對(duì)數(shù)和冪運(yùn)算實(shí)現(xiàn),設(shè)Sa的質(zhì)數(shù)乘積Fa的r為底的對(duì)數(shù)為L(zhǎng)a,Sb的質(zhì)數(shù)乘積Fb的對(duì)數(shù)為L(zhǎng)b,如果power(r,(La-Lb))是整數(shù),則Fa能被Fb整除,Sa包含或可能包含Sb的全部字符元。對(duì)數(shù)可以處理較長(zhǎng)的字符串,但由于浮點(diǎn)運(yùn)算會(huì)造成誤差,即使Fa能被Fb整除,power(r,(La-Lb))也可能不是整數(shù),設(shè) Δ=abs(power(r,(La-Lb))-round(power(r,(La-Lb)))) 如果Δ比較小或Δ/power(r,(La-Lb))比較小,可以認(rèn)為Fa能被Fb整除。但這個(gè)方法有不足首先,一般來(lái)說(shuō),冪運(yùn)算不比整除或模運(yùn)算省時(shí),而且判斷冪值是否為整數(shù)又需用時(shí),所以不推薦使用;其次,必須確定誤差Δ多大為允許程度,即使取值適當(dāng),也可能有一些誤判;第三,double只有15位有效數(shù)字,long double只有19位有效數(shù)字,當(dāng)power(r,(La-Lb))大時(shí),低位可能舍去,誤判更多乃至無(wú)法判斷。如果采取軟件或硬件方法,增加有效數(shù)字長(zhǎng)度,或者冪運(yùn)算中舍去高位保留低位,用L處理長(zhǎng)字符串是有益的。
用L值處理質(zhì)數(shù)選擇代換,如果Sn、T不含K,則Ln、Lt無(wú)值,可以處理為L(zhǎng)n=0、Lt=0。檢索方法與位標(biāo)記類似,正檢索,當(dāng)T中含K,Lt有值,Ln-Lt≥0且power(r,Ln-Lt)為整數(shù)的記錄有效,進(jìn)入R1;Ln無(wú)值或處理為L(zhǎng)n=0的記錄不進(jìn)入R1。當(dāng)T中不含K,Lt無(wú)值或處理為L(zhǎng)t=0,恒有power(r,Ln-Lt)=power(r,Ln)為整數(shù),冪運(yùn)算篩選無(wú)意義,跳過(guò)本過(guò)程,進(jìn)行下一步處理。
逆檢索,當(dāng)T中含K,Lt有值,Lt-Ln≥0且power(r,Lt-Ln)為整數(shù)的記錄有效,進(jìn)入R1;Ln無(wú)值或處理為L(zhǎng)n=0的記錄power(r,Lt-0)=power(r,Lt),進(jìn)入R1;對(duì)R1進(jìn)行下一步處理。當(dāng)T中不含K,Lt無(wú)值或處理為L(zhǎng)t=0,Ln無(wú)值或處理為L(zhǎng)n=0的記錄Lt-Ln=0,進(jìn)入R1,進(jìn)行下一步處理。
7.綜合運(yùn)用 我們分別說(shuō)明了選擇標(biāo)記、縮位標(biāo)記、規(guī)劃存貯的方法及用質(zhì)數(shù)代換實(shí)現(xiàn)的要點(diǎn),為了達(dá)到良好的效果,可以把各種方法綜合運(yùn)用。一個(gè)數(shù)據(jù)庫(kù)的特點(diǎn)決定于3方面字符串平均長(zhǎng)m、檢索關(guān)鍵詞T的長(zhǎng)度期望值k、記錄數(shù)量r。選擇標(biāo)記存貯索引方案決定于4方面標(biāo)記的bit數(shù)n、選擇標(biāo)記K的比例p,選擇標(biāo)記多少組K及組織方式。
長(zhǎng)m的字符串可能有0-m個(gè)K,但K的數(shù)量mk主要分布在數(shù)學(xué)期望m*p附近,以n≈m*p*2或n<m*p*2標(biāo)記,Rv最大為2n,當(dāng)p不大時(shí),mk分布偏于較m*p小的一側(cè),且標(biāo)記有重疊,下面粗略計(jì)算取 Vt有值的概率 由于m*p和k*p有小數(shù),根據(jù)n?。溅?n+1),將篩選概率公式修改為 如果位值種類Rv<r/10,Vt有值的概率P>90%,篩選概率P<10%,那么這個(gè)方案是理想的,但當(dāng)m比較大時(shí),不易實(shí)現(xiàn)。
下面大體分位標(biāo)記正檢索、逆檢索、質(zhì)數(shù)代換來(lái)說(shuō)明綜合運(yùn)用的主要方法,應(yīng)用中可以根據(jù)數(shù)據(jù)庫(kù)、T、硬件條件做修改調(diào)整。
(1)如上所述,測(cè)試數(shù)據(jù)庫(kù)jxk采用全部P標(biāo)記得到的V值206320種,直接進(jìn)行“規(guī)劃存貯”,效果比較理想,不需要進(jìn)行“選擇標(biāo)記”,但為了說(shuō)明“選擇標(biāo)記”“規(guī)劃存貯”結(jié)合的方法,選擇p=50.976%的142個(gè)中等頻率的P進(jìn)行n=31標(biāo)記后,查詢生成syb insertinto syb selectkmark,count(kmark)as jishufrom jxkgroup by kmark 進(jìn)一步查詢分析syb中各V值的jishu分布狀況 SELECT CEILING(LOG10(jishu))AS zu,COUNT(jishu)AS zucount FROM sybGROUP BY CEILING(LOG10(jishu))ORDER BY CEILING(LOG10(jishu)) 適當(dāng)修改上面語(yǔ)句,繼續(xù)查詢得到下表 V種類為108928種,平均每個(gè)位值對(duì)應(yīng)的基本句型為36.9條。其中第6組有124590條記錄,僅有1種位值V=0,也就是無(wú)控制字符元K的記錄;第5組有31種位值,是僅有1個(gè)bit為“1”的V值,此類記錄有651555條,平均每種V值21017.9條記錄??偟膩?lái)說(shuō),“選擇標(biāo)記”V值分布不如“完全標(biāo)記”V值分布均衡,篩選效果較差,但測(cè)試表明,該方案也是有效的。
選擇標(biāo)記,p越大,Vt>0概率越大,但數(shù)據(jù)庫(kù)Vn的種類越多;p越小,數(shù)據(jù)庫(kù)Vn的種類越小,但Vt=0的概率越大,直接進(jìn)行下一步處理的概率也越大。
(2)使用“完全標(biāo)記位值”“選擇標(biāo)記位值”均可進(jìn)行規(guī)劃存貯,因?yàn)闃?biāo)記有一定概率的重疊。當(dāng)正檢索,T標(biāo)記后的V值中“1”的bit比較少時(shí),逆檢索,數(shù)據(jù)庫(kù)S標(biāo)記后的V值中“1”的bit比較少時(shí),篩選效果不好,所以數(shù)據(jù)庫(kù)中應(yīng)給出另一組“完全標(biāo)記位值”W做第2次篩選,使用“選擇標(biāo)記位值”進(jìn)行“規(guī)劃存貯”尤其必要,檢索代碼參見(jiàn)具體實(shí)施方式
部分。用F或L等其它篩選值做2次或3次篩選也是可以的。
(3)如果內(nèi)存足夠的多,追求更穩(wěn)定的性能,可以用兩組“完全標(biāo)記位值”或“選擇標(biāo)記位值”組織存貯第1組標(biāo)記位值為V1,并按V1對(duì)jxk組織存貯得到v1jxk,并產(chǎn)生v1syb;第2組標(biāo)記位值為V2,并按V2對(duì)jxk組織存貯得到v2jxk,并產(chǎn)生v2syb。檢索中,如果標(biāo)記后,V1t中“1”的bit較多,則按v1syb定位到v1jxk;V2t中“1”的bit較多,則按v2syb定位到v2jxk。再檢查Wt&Wn=Wt,這是用空間換取時(shí)間。
(4)也可以不組織存貯jxk,而按V1對(duì)W或F、L等其它篩選值進(jìn)行組織得到v1w表,將jxk相應(yīng)記錄的地址鏈接到v1w表W或F、L后;再按V2對(duì)W或F、L等其它篩選值進(jìn)行組織得到v2w表,將jxk相應(yīng)記錄的地址鏈接到v2w表的W或F、L后。檢索時(shí),如果V1t中“1”的bit較多,則按v1syb定位到v1w,檢查W或F、L等其它篩選值,對(duì)于滿足條件的值,定位到j(luò)xk進(jìn)行字符匹配;如果V2t中“1”的bit較多,則按v2syb定位到v2w,檢查W或F、L等其它篩選值,對(duì)于滿足條件的值,定位到j(luò)xk進(jìn)行字符匹配。
(5)也可以用V1、V2互相組織,尤其是對(duì)長(zhǎng)字符串需要用選擇標(biāo)記位值互相組織。選擇一定比例的字符元K1、K2,如各占30%;按V1值組織存貯V2值,不去除重復(fù)V2,也可以說(shuō)是W2,將jxk相應(yīng)記錄的地址鏈接到V2后,得到v1v2表,查詢v1v2產(chǎn)生v1syb;按V2值組織存貯V1值,不去除重復(fù)V1,也可以說(shuō)是W1,將jxk相應(yīng)記錄的地址鏈接到V1后,得到v2v1表,查詢v2v1產(chǎn)生v2syb。組織存貯流程參見(jiàn)附圖1。
檢索時(shí),如果V1t中“1”的bit較多,則檢索v1syb得到R1,對(duì)滿足V1t & V1n=V1t條件的V1n值,按地址定位到v1v2得到R2,再按滿足V2t & V2n=V2t的V2n值的地址,定位到j(luò)xk中,進(jìn)行字符元比較或檢查W或F或L等其它篩選值得到R3。如果V2t中“1”的bit較多,則檢查v2syb、v2v1表,定位到j(luò)xk中,進(jìn)行字符元比較或檢查其它篩選值得到R3。V1t、V2t之一為0,第2步不起篩選作用,可以跳過(guò)。V1t與V2t同時(shí)為0,直接定位到j(luò)xk中檢查,進(jìn)行字符元比較或檢查其它篩選值得到R3。檢索流程參見(jiàn)附圖2?;ハ嘟M織存貯的是V1、V2,jxk可按其它需要排序,所以語(yǔ)音輸入逆檢索中,jxk可以按P的多少進(jìn)行降序排列。
設(shè)有英語(yǔ)字符串?dāng)?shù)據(jù)庫(kù)有30,000,000條記錄,字符串平均長(zhǎng)80個(gè)字符,用2個(gè)字母“鏈?zhǔn)綐?biāo)記”,則有79個(gè)“字符元”,以4個(gè)長(zhǎng)整數(shù)標(biāo)記W值為宜;檢索關(guān)鍵詞T越長(zhǎng),篩選效果越好,這里設(shè)T為2個(gè)單詞,12個(gè)字母,則有11個(gè)字符元。下表是設(shè)以p=14%和p=20%,n=20和n=22進(jìn)行選擇標(biāo)記的各項(xiàng)指標(biāo) 4個(gè)方案都不理想,設(shè)以p=14%,n=22的方案選擇兩組K1、K2,分別對(duì)jxk進(jìn)行標(biāo)記,得到V1、V2,用V1、V2互相組織。V1t和V2t同時(shí)無(wú)值的概率為(1-0.8097)*(1-0.8097)=3.62%;V1t和V2t同時(shí)有值的概率為0.8097*0.8097=65.56%,篩選概率為0.34*0.34=0.1156。檢索平均V值比較次數(shù)0*3.62%+3732999*30.82%+(3732999+0.34*30,000,000)*65.56%=10,284,984;平均V值篩選概率1*3.62%+0.3400*30.82%+0.1156*65.56%=21.68%。對(duì)進(jìn)入該范圍的記錄用地址定位后,以W或F或L進(jìn)行下一步篩選。
(6)“分級(jí)組織”,設(shè)以V1為第1級(jí),V2為第2級(jí),對(duì)jxk組織存貯,讓V1相同而且V2相同的記錄存貯在鄰近的區(qū)域,就是用V1劃分大區(qū),再在其中按V2劃分小區(qū);生成v2syb,表中V2是按V1組織的,并給出jxk中該V1和V2的記錄數(shù)量jishu2、第1條記錄的地址。生成v1syb,給出v2syb中該V1所屬的V2的數(shù)量jishu1及第1個(gè)V2的地址;還可以給出jxk中V1相同的全部記錄的數(shù)量jishu,及V1相同第1條記錄的地址,這樣,當(dāng)V2t=0時(shí),可直接定位到j(luò)xk進(jìn)行檢索?!胺旨?jí)組織”,應(yīng)該讓第1級(jí)的篩選效果比第2級(jí)好。但只有k*p比較大,篩選概率才好,所以要求p大,但p大則m*p大,要保證篩選概率,則n也必須大,V的種類就多,V1與V2交叉后非常大,只有記錄特別多的數(shù)據(jù)庫(kù)便于采用。
對(duì)于字符串長(zhǎng)、記錄多的數(shù)據(jù)庫(kù)可以給出更多的V3、V4進(jìn)行互相組織、分級(jí)組織??偟膩?lái)說(shuō),長(zhǎng)字符串不便于規(guī)劃存貯索引,如果前后文相關(guān)性低,可以切分為“短句”后,進(jìn)行規(guī)劃存貯索引。
上面所說(shuō)的各種方法,運(yùn)用到逆檢索時(shí),應(yīng)根據(jù)數(shù)據(jù)庫(kù)、T的特點(diǎn)進(jìn)行調(diào)整。1.就漢語(yǔ)來(lái)說(shuō),參考句型一般為3-7個(gè)漢字,用全部字符元、n=31標(biāo)記后,V值種類不超過(guò)3572192條,可以直接組織存貯。2.選擇標(biāo)記,jxk中S的字符元一般比較少,p過(guò)少,則進(jìn)行選擇標(biāo)記后,mk更小,如果用位標(biāo)記進(jìn)行篩選,效果不好,可以用質(zhì)數(shù)代換進(jìn)行篩選,注意的是,如果T的kk大,F(xiàn)t可能溢出。3.逆檢索中,T的字符元比較多,選擇標(biāo)記后“1的bit”即kkb≥4的概率大,但數(shù)據(jù)庫(kù)中標(biāo)記重疊后“1的bit”即mkb≤3的概率比較大,影響篩選效果。如果同時(shí)用2種方案標(biāo)記,可以這樣安排,用1種方案標(biāo)記后,得到mkb≥4的索引表syb1,對(duì)jxk中mkb≥4的記錄組織存貯,生成syb1;對(duì)mkb≤3的記錄用另1種方案進(jìn)行標(biāo)記,并組織存貯,生成syb2;檢索時(shí),用兩種方案對(duì)T進(jìn)行標(biāo)記,分別按syb1、syb2定位到j(luò)xk。用這種方式標(biāo)記兩組“一般位值”W,在程序中指明兩種W值的交接點(diǎn)也可以改善性能。3.逆檢索中,漢語(yǔ)約有幾萬(wàn)個(gè)“字”和“詞”,m≤3,用第4點(diǎn)也不能獲得良好的篩選效果,增加字符比較的時(shí)間,可以分表處理在jxk中,保留所有“跨音節(jié)協(xié)同”詞句、少數(shù)高頻詞、每個(gè)音節(jié)的1-2個(gè)高頻字,將其余“字”和“詞”另建一表jxk2,由于無(wú)“跨音節(jié)協(xié)同”,可以用通常的索引方法查找。按“長(zhǎng)詞優(yōu)先”的原則,盡可能運(yùn)用jxk對(duì)T處理,如果處理不徹底或用戶認(rèn)為處理不正確,再查找jxk2,供用戶選擇。6.對(duì)mk’≤3的記錄也可以采用“多bit標(biāo)記”,或質(zhì)數(shù)代換處理,這兩種方法要求“短字符串”,可以運(yùn)用“鏈?zhǔn)角蟹帧睂處理成“短句”,由于無(wú)“跨音節(jié)協(xié)同”句型,對(duì)T切分一般不會(huì)造成影響。
“位標(biāo)記”的各種綜合運(yùn)用方法,也適用于“質(zhì)數(shù)代換”?!百|(zhì)數(shù)代換”重點(diǎn)關(guān)心的是溢出,不是篩選概率,用兩種方案進(jìn)行可以這樣正檢索,數(shù)據(jù)庫(kù)平均m不太大時(shí),首先用1種方案代換得到F1,然后將F1值溢出的記錄用另1種方案代換得到F2,這樣用2種方案代換,能讓更多的記錄F有效;m大,2種方案代換均溢出的記錄,令F=0,進(jìn)入下一過(guò)程處理;同樣可以用一個(gè)表處理,要注意F1、F2值記錄的交接點(diǎn)。當(dāng)數(shù)據(jù)庫(kù)平均m比較大時(shí),選擇2組K1、K2方案進(jìn)行“質(zhì)數(shù)代換”,K2方案應(yīng)盡可能覆蓋F1無(wú)值和F1值溢出的記錄。如果數(shù)據(jù)庫(kù)m長(zhǎng)短不一,可以分為2個(gè)表處理,m短的記錄用32或64bit整數(shù)存貯F值;m長(zhǎng)的記錄用128bit或更多bit的整數(shù)存貯F值,或轉(zhuǎn)換為L(zhǎng)值,或用W、V處理。
如果用50個(gè)質(zhì)數(shù)代換,按中間質(zhì)數(shù)97計(jì)算,允許9個(gè)字符元。漢語(yǔ)語(yǔ)音輸入逆檢索中,如果T的k=16,選擇p=50%的K進(jìn)行“質(zhì)數(shù)代換”,93.2%的概率T的kk<10,不溢出。如果T的k=20,選擇p=40%的K進(jìn)行“質(zhì)數(shù)代換”,75.5%的概率kk<10;用2組K進(jìn)行代換,F(xiàn)t不溢出的概率就比較大。漢語(yǔ)基本句型在2-7個(gè)字符元,p=50%,mk≤4的概率很大,乘積種類為是可以組織存貯的。
當(dāng)然,也可以用兩種質(zhì)數(shù)代換方案進(jìn)行“分級(jí)組織”,“質(zhì)數(shù)代換”也可以與“位標(biāo)記”結(jié)合使用,進(jìn)行互相組織、分級(jí)組織,如第1級(jí)用F值篩選,第2級(jí)用V值篩選,是否采用,應(yīng)根據(jù)數(shù)據(jù)庫(kù)和T的特點(diǎn)分析決定,不必做無(wú)益的復(fù)雜化處理。



圖1是位標(biāo)記存貯索引、互相組織存貯索引流程圖 圖2是互相組織存貯索引正檢索流程圖
具體實(shí)施例方式 本文件說(shuō)明了多種存貯索引方案,應(yīng)用中可根據(jù)數(shù)據(jù)庫(kù)的特點(diǎn)以及硬件環(huán)境選擇實(shí)施,下面是VC中通過(guò)的“選擇標(biāo)記存貯索引”正檢索和逆檢索代碼,其它方案可以參照實(shí)現(xiàn)。
說(shuō)明jxk有4,019,576條記錄、每條記錄5個(gè)P,選擇頻率p=50.976%的142個(gè)中等頻率的音節(jié)為K,進(jìn)行n=31標(biāo)記。weizhi是選擇標(biāo)記索引位值V,weizhi2是完全標(biāo)記位值W,做第2次篩選。在賽揚(yáng)800Hz的CPU上測(cè)試,逆檢索T長(zhǎng)度k=7-15的參考句型,響應(yīng)時(shí)間一般為0.1至0.5秒,可以快至0.01秒。
#include<fstream.h> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> FILE*fpjx; FILE*fpyj; FILE*fpsy; bool mushi;//正檢索為0,逆檢索為1; struct Yjfz{//漢語(yǔ)音節(jié)標(biāo)記記錄 char pinyin[7]; char daizi[3]; int mark; int mark2; }; struct Juzi{//參考句型記錄 char daizi[11]; int mark; }; struct Sybrd{//索引記錄 int mark; int jishu; Juzi*pJuzi; }; Juzi jxb[4019576]; Juzi*pjxb; Yjfz yjb[400]; Yjfz*pyjb; Sybrd syb[108928]; Sybrd*psyb; void main() { mushi=1; pjxb=j(luò)xb,pyjb=y(tǒng)jb,psyb=syb; clock_t start,end; if((fpjx=fopen("f:\\ceshi\\pyzpmxin","rb"))==NULL){ printf("不能打開(kāi)句型文件\n"); return;};fread(jxb,sizeof(Juzi),4019576,fpjx); if((fpsy=fopen("f:\\ceshi\\pyzpmidxin","rb"))==NULL){printf("不能打開(kāi)索引文件\n");return;}; fread(syb,sizeof(Juzi),108928,fpsy); if((fpyj=fopen("f:\\ceshi\\pyzpmyjxin","rb"))==NULL){printf("不能打開(kāi)音節(jié)文件\n");return;}; fread(pyjb,sizeof(Yjfz),400,fpyj); char text[31]; char texttemp[3]; texttemp[2]=′\0′; cout<<"輸入查詢語(yǔ)句"<<end1; cin>>text; int r1jishu=0,r2jishu=0,r3jishu=0;//統(tǒng)計(jì)記錄集的大小 do{ start=clock();int weizhi=0,weizhi2=0; for(intr=0;r<400;r++){ if(strstr(text,yjb[r].daizi)>0) {weizhi=(weizhi|yjb[r].mark); weizhi2=(weizhi2|yjb[r].mark2); }}; if(mushi==0)//正檢索{if(weizhi==0)//T中無(wú)控制字符元 {for(register int i1=0;i1<4019576;i1++) {if((jxb[i1].mark & weizhi2)==weizhi2){ for(unsigned int j1=0;j1<strlen(text);j1=j(luò)1+2){strncpy(texttemp,&text[j1],2);if(strstr(jxb[i1].daizi,texttemp)==NULL){//strstr處理漢字偶爾有誤goto Loop1;};};cout<<jxb[i1].narj<<jxb[i1].daizi<<endl; r3jishu++;}; Loop1:;}; } else{//T中有控制字符元 for(intk2=0;k2<108928;k2++){ if((syb[k2].mark & weizhi)==weizhi)//檢查索引位值{r1jishu=r1jishu+syb[k2].jishu; for(inti2=0;i2<syb[k2].jishu;i2++){ if(((syb[k2].pJuzi+i2)->mark & weizhi2)==weizhi2){r2jishu++;for(unsigned int j2=0;j2<strlen(text);j2=j(luò)2+2){ strncpy(texttemp,&text[j2],2); if(strstr((syb[k2].pJuzi+i2)->dajzi,texttemp)==NULL){goto Loop2;}; };r3jishu++; cout<<(syb[k2].pJuzi+i2)->mark<<(syb[k2].pJuzi+i2)->daizi<<end1;}; Loop2; };};};};} else{//逆檢索if(weizhi==0){//T中無(wú)控制字符元 for(int i3=0;i3<syb
.jishu;i3++){ if((jxb[i3].mark & weizhi2)==j(luò)xb[i3].mark){ for(unsigned int j3=0;j3<strlen(jxb[i3].daizi);j3=j(luò)3+2){ strncpy(texttemp,&(jxb[i3].daizi[j3]),2); if(strstr(text,texttemp)==NULL){ goto Loop3;};}; cout<<jxb[i3].mark<<jxb[i3].daizi<<end1; r3jishu++;}; Loop3;}; } else//T中有控制字符元 { for(register int k4=0;k4<108928;k4++){if((syb[k4].mark & weizhi)==syb[k4].mark){ r1jishu=r1jishu+syb[k4].jishu; for(int i4=0;i4<syb[k4].jishu;i4++){ if((((syb[k4].pJuzi+i4)->mark)& weizhi2)==((syb[k4].pJuzi+i4)->mark)){r2jishu++;for(unsignedintj4=0;j4<strlen((syb[k4].pJuzi+i4)->daizi);j4=j(luò)4+2){strncpy(texttemp,&((syb[k4].pJuzi+i4)->daizi[j4]),2);if(strstr(text,texttemp)==NULL){ goto Loop4;}; }; cout<<(syb[k4].pJuzi+i4)->mark<<(syb[k4].pJuzi+i4)->daizi<<end1; r3jishu++; Loop4; };};};};};}; end=clock(); cout<<(end-start)<<end1;//用時(shí) cout<<"R1"<<":"<<r1jishu<<end1; cout<<"R2"<<":"<<r2jishu<<end1; cout<<"R3"<<":"<<r3jishu<<end1; r1jishu=0,r2jishu=0,r3jishu=0; cout<<"輸入查詢語(yǔ)句"<<end1; cin>>text;}while(strcmp(text,"*")!=0); }
權(quán)利要求
1.一種模式匹配索引查找方法,其特征在于對(duì)數(shù)據(jù)庫(kù)模式按基元進(jìn)行位標(biāo)記或質(zhì)數(shù)代換,得到模式的位值Vn或質(zhì)數(shù)乘積值Fn或Fn的對(duì)數(shù)Ln;將數(shù)據(jù)庫(kù)記錄或記錄的其它篩選值,按Vn或Fn或Ln組織存貯,并得到各Vn或Fn或Ln值所屬記錄或其它篩選值的數(shù)量、地址;檢索時(shí),用相應(yīng)方案對(duì)檢索模式T進(jìn)行位標(biāo)記或質(zhì)數(shù)代換,得到T的Vt或Ft或Lt,并相應(yīng)地同Vn或Fn或Ln進(jìn)行運(yùn)算和判斷;對(duì)于滿足篩選條件的Vn或Fn或Ln,將所屬的記錄或記錄的其它篩選值,同T進(jìn)行下一步處理。
2.一種模式匹配索引查找方法,其特征在于選擇部分基元進(jìn)行位標(biāo)記或質(zhì)數(shù)代換,或?qū)M(jìn)行不均衡分組后進(jìn)行位標(biāo)記或質(zhì)數(shù)代換,得到每個(gè)模式的位值Wn或質(zhì)數(shù)乘積值Fn或Fn的對(duì)數(shù)Ln;檢索時(shí),用相應(yīng)方案對(duì)檢索模式T進(jìn)行位標(biāo)記或質(zhì)數(shù)代換,得到T的Wt或Ft或Lt,如果Wt或Ft或Lt有值,以Wt或Ft或Lt相應(yīng)地同Wn或Fn或Ln做運(yùn)算和判斷,對(duì)于Wn或Fn或Ln滿足篩選條件的記錄,同T進(jìn)行下一步處理;如果Wt或Ft或Lt無(wú)值,正檢索時(shí),下一步處理該范圍內(nèi)的所有記錄,逆檢索時(shí),下一步處理該范圍內(nèi)Wn或Fn或Ln無(wú)值的記錄。
3.一種質(zhì)數(shù)代換檢索判斷方法,其特征在于以一個(gè)質(zhì)數(shù)代表n個(gè)基元,以m個(gè)質(zhì)數(shù)代表一定范圍的基元,可以得到若干個(gè)模式S的該范圍的所有基元相應(yīng)的質(zhì)數(shù)的乘積,稱為F值,F(xiàn)值以r為底的對(duì)數(shù)為L(zhǎng)。如果r的(La-Lb)次冪不是整數(shù),則La所代表的若干個(gè)模式Sa不包含Lb所代表的若干個(gè)模式Sb的該范圍內(nèi)的所有基元。如果r的(La-Lb)次冪是整數(shù),則La所代表的若干個(gè)模式Sa包含或可能包含Lb所代表的若干個(gè)模式Sb的該范圍內(nèi)的所有基元。
4.按照權(quán)利要求1或2所述的方法,其特征在于選擇部分基元進(jìn)行位標(biāo)記或質(zhì)數(shù)代換,或?qū)M(jìn)行不均衡分組后進(jìn)行位標(biāo)記或質(zhì)數(shù)代換,得到每個(gè)模式的Vn或Fn或Ln;將數(shù)據(jù)庫(kù)記錄或記錄的其它篩選值按Vn或Fn或Ln組織存貯,并得到各Vn或Fn或Ln值所屬記錄或記錄的其它篩選值的數(shù)量、地址;檢索時(shí),先對(duì)檢索模式T進(jìn)行位標(biāo)記或質(zhì)數(shù)代換,得到T的Vt或Ft或Lt,如果Vt或Ft或Lt有值,以Vt或Ft或Lt相應(yīng)地同Vn或Fn或Ln做運(yùn)算和判斷,對(duì)于滿足篩選條件的Vn或Fn或Ln,將所屬的記錄或記錄的其它篩選值,同T進(jìn)行下一步處理;如果Vt或Ft或Lt無(wú)值,正檢索時(shí),下一步處理該范圍內(nèi)的所有記錄或記錄的其它篩選值,逆檢索時(shí),下一步處理該范圍內(nèi)Vn、Fn、Ln無(wú)值的記錄或記錄的其它篩選值。
5.按照權(quán)利要求1所述的方法,其特征在于用多種方案對(duì)基元進(jìn)行位標(biāo)記或質(zhì)數(shù)代換,得到模式的多種Vn或Fn或Ln;用不同方案的Vn或Fn或Ln分別對(duì)數(shù)據(jù)庫(kù)記錄或記錄的其它篩選值組織存貯,或者用不同方案的Vn或Fn或Ln進(jìn)行互相組織,或者用不同方案的Vn或Fn或Ln進(jìn)行分級(jí)組織;檢索時(shí)以相應(yīng)的方案得到T的多種Vt或Ft或Lt,并根據(jù)存貯組織方案逐步進(jìn)行篩選處理。
6.按照權(quán)利要求1或2所述的方法,其特征在于用多種方案選擇部分基元進(jìn)行位標(biāo)記或質(zhì)數(shù)代換,或用多種方案對(duì)基元不均衡分組后進(jìn)行位標(biāo)記或質(zhì)數(shù)代換,得到模式的多種Vn或Fn或Ln;用不同方案的Vn或Fn或Ln分別對(duì)數(shù)據(jù)庫(kù)記錄或者記錄的其它篩選值組織存貯,或者用不同方案的Vn或Fn或Ln進(jìn)行互相組織,或者用不同方案的Vn或Fn或Ln進(jìn)行分級(jí)組織;檢索時(shí)以相應(yīng)的方案得到T的多種Vt或Ft或Lt,并根據(jù)存貯組織方案逐步進(jìn)行篩選處理。
全文摘要
本發(fā)明是在“位標(biāo)記字符串檢索技術(shù)”基礎(chǔ)上,減少位值比較次數(shù),以提高“相似比較”“模式匹配”速度,方法有按位值對(duì)數(shù)據(jù)庫(kù)記錄或記錄的其它篩選值進(jìn)行規(guī)劃存貯,減少標(biāo)記所用的bit數(shù)n,選擇部分字符元標(biāo)記或進(jìn)行不均衡分組標(biāo)記。同樣的,也可以按質(zhì)數(shù)乘積對(duì)數(shù)據(jù)庫(kù)組織存貯,減少代換所用的質(zhì)數(shù)量n,選擇部分字符元或進(jìn)行不均衡分組代換,來(lái)提高“質(zhì)數(shù)代換字符串檢索”的速度。應(yīng)用中,可根據(jù)數(shù)據(jù)庫(kù)和檢索關(guān)鍵詞的特點(diǎn),綜合運(yùn)用各種方法。在賽揚(yáng)800Hz的CPU上,逆檢索4,000,000條、每條5個(gè)漢字的數(shù)據(jù)庫(kù),響應(yīng)時(shí)間一般為0.01至0.5秒,顯著提高了檢索速度,可用于語(yǔ)言處理、人工智能、圖象識(shí)別等各個(gè)領(lǐng)域。
文檔編號(hào)G06F17/30GK101533398SQ20081008682
公開(kāi)日2009年9月16日 申請(qǐng)日期2008年3月16日 優(yōu)先權(quán)日2008年3月16日
發(fā)明者徐文新 申請(qǐng)人:徐文新
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
金川县| 瓦房店市| 繁昌县| 黑山县| 蓬安县| 沅江市| 岱山县| 沂南县| 偏关县| 文化| 无为县| 科尔| 白山市| 芒康县| 韶关市| 云安县| 千阳县| 噶尔县| 家居| 苍溪县| 沈丘县| 开远市| 华宁县| 深泽县| 阳新县| 大城县| 志丹县| 泗水县| 巴东县| 贺州市| 桃园县| 南郑县| 越西县| 南阳市| 依兰县| 奇台县| 天水市| 忻城县| 祥云县| 双牌县| 榕江县|