本發(fā)明涉及模糊檢索,特別是涉及一種內(nèi)存多線程模糊檢索方法。
背景技術(shù):
1、模糊檢索是一種利用字符串相似度值進(jìn)行檢索的方法,它解決了完全匹配檢索的限制,大大提高檢索結(jié)果的召回率。模糊檢索常用于電商產(chǎn)品名稱詞條檢索、百科知識(shí)詞條檢索等場(chǎng)景中,通過(guò)模糊檢索技術(shù),能夠?qū)τ脩羲阉髟~中的錯(cuò)別字、不準(zhǔn)確的搜索詞也能得到很好的檢索結(jié)果。
2、當(dāng)前數(shù)據(jù)模糊檢索主要包括數(shù)據(jù)庫(kù)模糊匹配,搜索引擎全文檢索等。
3、數(shù)據(jù)檢索包括數(shù)據(jù)篩選與數(shù)據(jù)排序。在數(shù)據(jù)庫(kù)檢索中,常見(jiàn)的數(shù)據(jù)庫(kù)如mysql、sqlserver、oracle等檢索主要采用索引方式,根據(jù)用戶的檢索詞以及排序條件實(shí)現(xiàn)相似數(shù)據(jù)查找與排序;在搜索引擎檢索中,目前主流的搜索引擎如solr、elasticsearch等采用全文檢索加tf/idf倒排索引可實(shí)現(xiàn)數(shù)據(jù)檢索加排序功能。
4、當(dāng)數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)達(dá)到百萬(wàn)甚至千萬(wàn)級(jí)時(shí),數(shù)據(jù)庫(kù)建立的索引需要占用大量的磁盤空間,檢索效率也會(huì)隨著數(shù)據(jù)增大變得越來(lái)越慢;采用搜索引擎技術(shù),需要額外維護(hù)一套搜索引擎軟件,且搜索引擎常采用分布式部署,對(duì)硬件資源也有一定的要求。
技術(shù)實(shí)現(xiàn)思路
1、鑒于傳統(tǒng)數(shù)據(jù)庫(kù)檢索慢,搜索引擎硬件要求高以及維護(hù)成本高等問(wèn)題,本發(fā)明提供了一種內(nèi)存多線程模糊檢索方法,能夠?qū)崿F(xiàn)數(shù)據(jù)高效、快速檢索,具有較高的應(yīng)用價(jià)值。
2、本發(fā)明公開(kāi)了一種內(nèi)存多線程模糊檢索方法,其包括:
3、步驟1:采用多線程并行運(yùn)算的方式分別計(jì)算詞條與用戶檢索詞的編輯距離相似度值和公共序列相似度值;
4、步驟2:求取每個(gè)詞條與檢索詞對(duì)應(yīng)的編輯距離相似度值和公共序列相似度值的均值并對(duì)其進(jìn)行排序,從中選取前n個(gè)字符串作為模糊檢索結(jié)果。
5、進(jìn)一步地,所述步驟1包括:
6、獲取詞條數(shù)據(jù),并將詞條數(shù)據(jù)切分成m份,形成m個(gè)詞條隊(duì)列;
7、根據(jù)用戶輸入的檢索詞,申請(qǐng)m個(gè)線程池,每個(gè)線程池對(duì)應(yīng)一個(gè)詞條隊(duì)列,計(jì)算每個(gè)線程池的詞條隊(duì)列中每個(gè)詞條與檢索詞的最長(zhǎng)公共子序列長(zhǎng)度以及公共子序列相似度值;計(jì)算每個(gè)線程池的詞條隊(duì)列中每個(gè)詞條與檢索詞的編輯距離以及編輯距離相似度值。
8、進(jìn)一步地,采用動(dòng)態(tài)規(guī)劃方法計(jì)算詞條與檢索詞之間的最長(zhǎng)公共子序列,其具體步驟為:
9、步驟101:構(gòu)造一個(gè)二維數(shù)組result[i][j],表示字符串s1以第i個(gè)字符結(jié)尾,字符串s2以第j個(gè)字符結(jié)尾的最長(zhǎng)公共子序列長(zhǎng)度;字符串s1表示詞條,字符串s2表示檢索詞;
10、步驟102:初始化result數(shù)組中每個(gè)元素都為0;
11、步驟103:遞歸計(jì)算result[i][j]的值,當(dāng)s1[i]=s2[j]時(shí),result[i][j]=
12、result[i-1][j-1]+1,否則result[i][j]=0;遞歸過(guò)程中,記錄result[i][j]最大值以及索引位置,即可得到最長(zhǎng)公共子序列以及長(zhǎng)度值。
13、進(jìn)一步地,根據(jù)每個(gè)詞條與檢索詞的最長(zhǎng)公共子序列長(zhǎng)度以及每個(gè)詞條與檢索詞的長(zhǎng)度,得到每個(gè)詞條與檢索詞的公共子序列相似度值。
14、進(jìn)一步地,所述每個(gè)詞條與檢索詞的公共子序列相似度值的計(jì)算公式為:
15、
16、其中,sim_lcs(s1,s2)為詞條s1與檢索詞s2的公共子序列相似度值,lcs(s1,s2)表示s1、s2兩個(gè)字符串的最長(zhǎng)公共子序列長(zhǎng)度,len()表示字符串的長(zhǎng)度,sim_lcs的取值范圍為[0,1]。
17、進(jìn)一步地,所述步驟2包括:
18、計(jì)算m個(gè)詞條隊(duì)列中每個(gè)詞條對(duì)應(yīng)的公共子序列相似度值與編輯距離相似度值的均值,將m個(gè)詞條隊(duì)列中的所有詞條對(duì)應(yīng)的相似度均值按照從大到小的順序排序,取出前n個(gè)最大相似度值作為模糊檢索結(jié)果。
19、進(jìn)一步地,采用動(dòng)態(tài)規(guī)劃方法計(jì)算編輯距離,其具體步驟為:
20、步驟201:構(gòu)造一個(gè)二維數(shù)組edit[i][j],表示字符串s1以第i個(gè)字符結(jié)尾,字符串s2以第j個(gè)字符結(jié)尾的最小編輯距離;符串s1為詞條,字符串s2為檢索詞;
21、步驟202:按以下公式對(duì)edit[i][j]數(shù)組進(jìn)行賦值;
22、
23、其中,
24、
25、步驟203:取edit[i][j]數(shù)組右下角的值作為編輯距離。
26、進(jìn)一步地,根據(jù)每個(gè)詞條與檢索詞的編輯距離以及每個(gè)詞條與檢索詞的長(zhǎng)度,得到每個(gè)詞條與檢索詞的編輯距離相似度值。
27、進(jìn)一步地,編輯距離相似度的計(jì)算公式為:
28、
29、其中,edit(s1,s2)表示詞條s1、檢索詞s2兩個(gè)字符串的編輯距離,len()表示字符串的長(zhǎng)度,sim_edit的取值范圍為[0,1]。
30、進(jìn)一步地,所述步驟2包括:
31、合并所有線程的相似度均值,并按照從大到小排序,根據(jù)用戶檢索要求,取出排名前n個(gè)數(shù)據(jù)輸出,并釋放m個(gè)線程。
32、由于采用了上述技術(shù)方案,本發(fā)明具有如下的優(yōu)點(diǎn):
33、1、與單獨(dú)采用編輯距離或者最長(zhǎng)公共子序列長(zhǎng)度的檢索結(jié)果相比,本發(fā)明結(jié)合了最長(zhǎng)公共子序列長(zhǎng)度的排序以及最短編輯距離的排序,使最終的排序結(jié)果更合理,效果更好,同時(shí)采用多線程的方式進(jìn)行并行計(jì)算,極大地提高了檢索效率。
34、2、硬件與維護(hù)成本低。該檢索方法可以封裝成函數(shù)集成到項(xiàng)目中,無(wú)需維護(hù)額外的軟件,減少外部依賴,也無(wú)需采用大數(shù)據(jù)框架,增加服務(wù)器進(jìn)行分布式部署。
35、3、檢索速度快。該檢索方法采用多線程的方式進(jìn)行并發(fā)計(jì)算,計(jì)算結(jié)果準(zhǔn)確,速度快。
36、4、檢索結(jié)果好。該檢索方法結(jié)合了最長(zhǎng)公共子序列與編輯距離的優(yōu)點(diǎn),解決了最長(zhǎng)公共子序列只按長(zhǎng)度排序和編輯距離只按距離排序的缺點(diǎn),使得排序結(jié)果更合理,效果更好。
37、5、本發(fā)明在不依賴大數(shù)據(jù)檢索組件(如es、solr)的情況下,對(duì)用戶輸入的檢索詞,能夠在極短的時(shí)間內(nèi)從百萬(wàn)級(jí)甚至千萬(wàn)級(jí)詞條中高效搜索出可靠的結(jié)果。
1.一種內(nèi)存多線程模糊檢索方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的內(nèi)存多線程模糊檢索方法,其特征在于,所述步驟1包括:
3.根據(jù)權(quán)利要求2所述的內(nèi)存多線程模糊檢索方法,其特征在于,采用動(dòng)態(tài)規(guī)劃方法計(jì)算詞條與檢索詞之間的最長(zhǎng)公共子序列,其具體步驟為:
4.根據(jù)權(quán)利要求2所述的內(nèi)存多線程模糊檢索方法,其特征在于,根據(jù)每個(gè)詞條與檢索詞的最長(zhǎng)公共子序列長(zhǎng)度以及每個(gè)詞條與檢索詞的長(zhǎng)度,得到每個(gè)詞條與檢索詞的公共子序列相似度值。
5.根據(jù)權(quán)利要求4所述的內(nèi)存多線程模糊檢索方法,其特征在于,所述每個(gè)詞條與檢索詞的公共子序列相似度值的計(jì)算公式為:
6.根據(jù)權(quán)利要求1所述的內(nèi)存多線程模糊檢索方法,其特征在于,所述步驟2包括:
7.根據(jù)權(quán)利要求1所述的內(nèi)存多線程模糊檢索方法,其特征在于,采用動(dòng)態(tài)規(guī)劃方法計(jì)算編輯距離,其具體步驟為:
8.根據(jù)權(quán)利要求1所述的內(nèi)存多線程模糊檢索方法,其特征在于,根據(jù)每個(gè)詞條與檢索詞的編輯距離以及每個(gè)詞條與檢索詞的長(zhǎng)度,得到每個(gè)詞條與檢索詞的編輯距離相似度值。
9.根據(jù)權(quán)利要求8所述的內(nèi)存多線程模糊檢索方法,其特征在于,編輯距離相似度的計(jì)算公式為:
10.根據(jù)權(quán)利要求2所述的內(nèi)存多線程模糊檢索方法,其特征在于,所述步驟2包括: