一種最小距離字符串計(jì)算查找方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種最小距離字符串計(jì)算查找方法。本方法為:1)判斷判斷字符串集合是否滿(mǎn)足加速條件,如果滿(mǎn)足,則計(jì)算該字符串集合中任意兩字符串之間的距離,得到加速索引;2)從該字符串集合中找到與待計(jì)算字符串t最相似的字符串t’并計(jì)算兩者之間的距離D(t,t’);然后根據(jù)該加速索引判斷該字符串集合中的字符串是否滿(mǎn)足D(t’,r)≥2D(t,t’);如果滿(mǎn)足,則淘汰字符串r;3)根據(jù)步驟2)處理結(jié)果,確定出與該字符串t距離最小的字符串。本方法大大提高了查找效率。
【專(zhuān)利說(shuō)明】
一種最小距離字符串計(jì)算查找方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及字符串匹配領(lǐng)域,尤其涉及一種最小距離字符串計(jì)算查找方法,該發(fā) 明考慮了大數(shù)據(jù)給字符串匹配帶來(lái)的性能挑戰(zhàn)問(wèn)題,提出可以明顯提升字符串距離計(jì)算速 度的加速方法。
【背景技術(shù)】
[0002] 字符串距離的計(jì)算一直以來(lái)都是各個(gè)領(lǐng)域研究的重點(diǎn),由于重復(fù)內(nèi)容普遍存在, 且表現(xiàn)出一定的復(fù)雜性,對(duì)各類(lèi)領(lǐng)域的研究都起到了很大的影響。字符串距離通常被用來(lái) 計(jì)算字符串的相似性,通過(guò)字符串相似性計(jì)算,可以用于數(shù)據(jù)清洗、數(shù)據(jù)分析等各個(gè)方面。
[0003] 互聯(lián)網(wǎng)的高速發(fā)展產(chǎn)生了海量的數(shù)據(jù)內(nèi)容,大數(shù)據(jù)分析引起了各個(gè)領(lǐng)域?qū)<胰耸?的注意。提高大數(shù)據(jù)環(huán)境下的字符串距離計(jì)算速度,對(duì)于各個(gè)業(yè)務(wù)的支撐都起到了重要的 作用。字符串距離計(jì)算的優(yōu)化對(duì)于惡意域名檢測(cè)系統(tǒng)、抄襲檢測(cè)系統(tǒng)、搜索引擎等領(lǐng)域都有 著重大的影響。
[0004] 字符串的距離計(jì)算方法有多種,例如編輯距離算法(Levenshtein Distance),最 長(zhǎng)公共子串算法(Longest Common Subsequences,LCS)等。
[0005] 所以,如何對(duì)相應(yīng)的算法進(jìn)行加速,使之適應(yīng)于海量數(shù)據(jù)處理的場(chǎng)景,仍有很大的 研究?jī)r(jià)值。
[0006] 目前有各種各樣的字符串距離計(jì)算方法,但是這些方法大多工作在實(shí)驗(yàn)環(huán)境之 下,缺乏對(duì)海量數(shù)據(jù)場(chǎng)景的支持。如果將其移植到海量數(shù)據(jù)中,計(jì)算速度將成為分析的瓶 頸。本發(fā)明,一種最小字符串距離計(jì)算的加速方法,考慮了海量數(shù)據(jù)處理的情況,提出了一 種加速最小字符串距離計(jì)算的方法,對(duì)于指定的字符串,可以從待計(jì)算的數(shù)據(jù)集合中快速 尋找出與之距離最小的字符串。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明的目的在于提供一種最小距離字符串計(jì)算查找方法,考慮了海量數(shù)據(jù)處理 的情況,對(duì)于指定的字符串,可以從待計(jì)算的數(shù)據(jù)集合中尋找出與之距離最小的字符串,并 且使計(jì)算速度較之前的算法有很大程度的提高。
[0008] 本發(fā)明的技術(shù)關(guān)鍵點(diǎn)在于:
[0009] 1.構(gòu)建字符串集合
[0010] 對(duì)于一個(gè)已有的字符串集合,加速算法將從中快速計(jì)算出與待計(jì)算字符串最相似 的字符串所對(duì)應(yīng)的最小距離值。
[0011 ]比如,需要進(jìn)行加速的字符串集合為{aaa,aaa,ccc,ddd,eee},待計(jì)算的字符串為 aa,加速算法能夠快速?gòu)淖址现姓业阶钕嗨频淖址產(chǎn)aa所對(duì)應(yīng)的最小距離,即aa與 aaa的距離,最終返回的結(jié)果是距離。
[0012]所以,字符串集合中的字符串是可以重復(fù)出現(xiàn)的,最后只返回與最相似的字符串 的距離。而待檢測(cè)的字符串,可能出現(xiàn)在字符串集合中,也可能沒(méi)有出現(xiàn)。
[0013] 2.判斷字符串距離計(jì)算算法是否可以加速
[0014]加速算法的使用需要滿(mǎn)足以下條件,s、r、t是字符串集合中的任意字符串:
[0015] a)D(s,t)彡0
[0016] b)D(s,s)=0
[0017] c)D(s,t)=D(t,s)
[0018] d)D(s,t)^;D(s,r)+D(r,t)
[0019] 示意圖如圖1所示,"X"表示淘汰s;"V"表示不淘汰;"W"表示字符串集合;加速索 引為預(yù)先計(jì)算好的中間結(jié)果,計(jì)算方式為:對(duì)于待計(jì)算的字符串t,r作為局部敏感哈希"跳 板",根據(jù)加速索弓丨,由于〇( 8,〇 = 30(1〇彡0(11!) = 1.20(1〇,所以可以"淘汰"字符串 8,而無(wú)需進(jìn)行計(jì)算0(1:,8)。
[0020] 3.構(gòu)建加速索引
[0021] 加速索引為預(yù)先計(jì)算好的中間結(jié)果,計(jì)算方式為:對(duì)于集合中的字符串,兩兩計(jì)算 其字符串距離并存儲(chǔ)。
[0022] 4.使用加速算法,并引入局部敏感哈希
[0023]對(duì)于待計(jì)算的字符串t,如果集合中的字符串滿(mǎn)足D(s,r)彡2D(r,t),貝lj"淘汰" s。 在遍歷集合時(shí),使用局部敏感哈希算法來(lái)依次選擇與t距離最接近的字符串進(jìn)行計(jì)算。 [0024]本發(fā)明提供的一種最小字符串距離計(jì)算的加速方法,該方法的流程圖如圖2所示, 其主要步驟包括:
[0025] 1.構(gòu)建字符串集合,計(jì)算算法將會(huì)從構(gòu)建的字符串集合中找到與待計(jì)算字符串的 最小距離;
[0026] 2.判定字符串距離計(jì)算算法是否可以適用加速算法進(jìn)行加速;
[0027] 3.如果2成立,則根據(jù)加速索引,加速索引為預(yù)先計(jì)算好的中間結(jié)果,為加速算法 提供數(shù)據(jù)支撐;
[0028] 4.使用加速算法進(jìn)行加速,為了進(jìn)一步提升加速的效果,引入局部敏感哈希函數(shù), 輔助加速算法選擇最優(yōu)的跳板進(jìn)行計(jì)算。
[0029] 與現(xiàn)有技術(shù)相比,本發(fā)明的積極效果為:
[0030] 1.該加速方法普適性強(qiáng),可以與現(xiàn)有的字符串距離計(jì)算方法進(jìn)行結(jié)合,只要字符 串距離滿(mǎn)足上述的四個(gè)條件,即可進(jìn)行加速;
[0031] 2.該加速方法不局限于某種字符串距離計(jì)算方法;
[0032] 3.該加速方法可以與現(xiàn)有的局部敏感哈希算法結(jié)合,通過(guò)選擇更好的跳板可以進(jìn) 一步提升加速效果;
[0033] 4.該加速方法模型簡(jiǎn)單,易實(shí)現(xiàn)。
【附圖說(shuō)明】
[0034]圖1為判斷字符串距離計(jì)算算法是否可以加速示意圖;
[0035]圖2為本發(fā)明方法流程圖。
【具體實(shí)施方式】
[0036]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)描述。
[0037]實(shí)例 1:
[0038]還是以編輯距離為例,字符串集合為:{ aaaaa,bb,cc, aaaab},待計(jì)算的字符串為 &&&& 〇
[0039] 1 ?首先,構(gòu)建字符串集合:{aaaaa,bb,cc,aaaab}
[0040] 2.可以證明編輯距離滿(mǎn)足以下條件,其中s、r、t為字符串集合中的任意字符串: [0041 ] a)D(s,t)多 0
[0042] b)D(s,s)=0
[0043] c)D(s,t)=D(t,s)
[0044] d)D(s,t)^;D(s,r)+D(r,t)
[0045]所以,編輯距離是可以加速的。
[0046] 3.構(gòu)建加速索引
[0047] 索引有6個(gè)兀素,{aaaaa,bb,5},{aaaaa,cc,5},{aaaaa,aaaab,1},{bb,cc,2}, {bb,aaaab,4},{cc,aaaab,5}
[0048] 4.使用該算法
[0049] 對(duì)于一個(gè)待計(jì)算的字符串:aaaa
[0050] 根據(jù)局部敏感哈希算法,會(huì)從{aaaaa,bb,cc, aaaab}中選擇一個(gè)和aaaa盡可能相 似的字符串,這里選擇的是aaaaa。
[0051] 然后可以計(jì)算出aaaaa和aaaa的編輯距離,這里是1。
[0052] 通過(guò)已經(jīng)構(gòu)建好的索引,{aaaaa,bb,5},{aaaaa,cc,5},{aaaaa,aaaab,1},{bb, cc,2},{bb,aaaab,4},{cc,aaaab,5}。可以知道:D(aaaaa,aaaa) = 1,D(aaaaa,bb) = 5。因?yàn)?D(aaaaa,bb)>2D(aaaaa,aaaa),所以可以淘汰bb。同理也可以淘汰cc。這樣還剩aaaaa和 clclclclb ?已經(jīng)計(jì)算得到D ( £l£l£l£l£l,£l£l£l£l) - 1,然后計(jì)算D ( £l£l£l£lb,£l£l£l£l) - D ( clclclclcl, clclclcl) - 1, 樣就通過(guò)2次計(jì)算得到了最小的距離1。
[0053]實(shí)例2-種最小字符串距離計(jì)算的加速方法 [0054]以編輯距離為例,加速該字符串距離計(jì)算方法:
[0055] 1.構(gòu)建字符串集合,準(zhǔn)備大量的字符串以待計(jì)算。
[0056] 2.然后,判斷字符串距離計(jì)算算法是否可以加速
[0057] 編輯距離遞推公式為: ' £)(/-1,./)十1
[0058] D(i, j) - min? D(/" /-1) + 1 -1, / -!) + (.s'/r[/] == dest[ j]l0 ?!)
[0059]其中,D表示給定的兩個(gè)字符串src和dest的編輯距離,i表示字符串src的第i個(gè)字 符,j
[0060]表示字符串dest的第j個(gè)字符。
[00611可以證明編輯距離滿(mǎn)足以下條件:
[0062] a)D(s,t)^0
[0063] b)D(s, s) =0
[0064] c)D(s,t)=D(t,s)
[0065] d)D(s,t)^;D(s,r)+D(r,t)
[0066]所以,可以使用加速算法進(jìn)行加速。
[0067] 3.構(gòu)建加速索引
[0068]當(dāng)證明以上條件符合時(shí),對(duì)于集合中的字符串,兩兩計(jì)算其編輯距離并存儲(chǔ)。
[0069] 4.使用加速算法,并引入局部敏感哈希
[0070] 對(duì)于待計(jì)算的字符串t,使用Simhash (-種局部敏感哈希算法)來(lái)選擇跳板,然后 不斷計(jì)算集合中的字符串與t的距離。期間會(huì)不斷"淘汰"大量的字符串,即減少了大量計(jì) 算,最終可以得到最小的字符串距離。
[0071 ]加速算法偽代碼如下:
【主權(quán)項(xiàng)】
1. 一種最小距離字符串計(jì)算查找方法,其步驟為: 1) 對(duì)于一字符串集合,判斷判斷該字符串集合是否滿(mǎn)足加速條件,如果滿(mǎn)足,則計(jì)算該 字符串集合中任意兩字符串之間的距離,將得到的結(jié)果作為加速索引; 2) 對(duì)于待計(jì)算的字符串t,從該字符串集合中找到與字符串t最相似的字符串t'并計(jì)算 兩者之間的距離D(t,t');然后根據(jù)該加速索引判斷該字符串集合中的字符串是否滿(mǎn)足D (七',〇彡20^〇;如果滿(mǎn)足,則淘汰字符串^ 3) 根據(jù)步驟2)處理結(jié)果,確定出與該字符串t距離最小的字符串:如果淘汰后僅剩字符 串t',則t'為與該字符串t距離最小的字符串,如果剩余多個(gè)字符串,則分別計(jì)算字符串t與 每一剩余的字符串的距離,選取距離最小的字符串。2. 如權(quán)利要求1所述的方法,其特征在于,所述加速條件為D(s,t)多0、D(s,s) = O、D(s, 〇=0^8)、0(8,〇彡0(8^)+0&3);其中, 8^4均為字符串集合中的任意字符串,0〇表 示兩字符串之間的距離。3. 如權(quán)利要求1或2所述的方法,其特征在于,采用局部敏感哈希算法從該字符串集合 中找到與字符串t最相似的字符串t'。
【文檔編號(hào)】G06K9/62GK105913094SQ201610286111
【公開(kāi)日】2016年8月31日
【申請(qǐng)日】2016年5月3日
【發(fā)明人】柳廳文, 張洋, 亞靜, 李全剛, 時(shí)金橋, 郭莉
【申請(qǐng)人】中國(guó)科學(xué)院信息工程研究所