本發(fā)明涉及一種海量電話號碼快速匹配檢索方法。
背景技術(shù):
全文檢索是極為常用的一種通過網(wǎng)絡(luò)獲取所需信息的方式。全文檢索一般是利用到排索引技術(shù)實現(xiàn)檢索,每進行一次查詢,都需要根據(jù)檢索的關(guān)鍵詞來尋找對應(yīng)的文檔,并根據(jù)搜索表達式進行一系列運算,這些操作都會產(chǎn)生一定的i/o消耗和cpu消耗,并且單次查詢的資源消耗與多次查詢的資源消耗是直接相關(guān)的。
在實際應(yīng)用中,在一個應(yīng)用系統(tǒng)中,數(shù)據(jù)庫中的電話表的數(shù)量少的幾百張,多的幾萬張,一張表中的字段數(shù)量少則幾十多則幾百。也就是說,一個應(yīng)用系統(tǒng)中少則幾萬個字段,多則上億個字段,海量的電話號碼數(shù)據(jù)的匹配會消耗大量的運算成本和運算時間。全文檢索不適用于海量電話號碼的匹配檢索。
鑒于上述,本設(shè)計人積極加以研究創(chuàng)新,以期創(chuàng)設(shè)一種海量電話號碼快速匹配檢索方法,使其更具有產(chǎn)業(yè)上的利用價值。
技術(shù)實現(xiàn)要素:
為解決上述技術(shù)問題,本發(fā)明的目的是提供一種效率高、運算簡便的海量電話號碼快速匹配檢索方法。
本發(fā)明海量電話號碼快速匹配檢索方法,包括:
判斷待匹配電話號碼字符串的長度是大于基準長度還是等于基準長度,若等于基準長度,則不做處理;若大于基準長度,則確定電話號碼字符串中的特定數(shù)字,將特定數(shù)字截除掉;
根據(jù)預(yù)設(shè)的分類規(guī)則,判斷待匹配的電話號碼的分類,根據(jù)電話號碼的分類,在相應(yīng)類別的數(shù)據(jù)庫內(nèi)檢索匹配電話號碼;
將所述待匹配電話號碼的字符串分成多個分段,每個分段包括至少一個數(shù)字;
設(shè)置多個分段的匹配優(yōu)先級,根據(jù)該優(yōu)先級逐一進行各個分段的字符匹配,直至檢索到相匹配的號碼。
進一步地,還包括判斷待匹配電話號碼是手機號碼還是座機號碼,并根據(jù)相應(yīng)的判斷結(jié)果,在相應(yīng)的手機號碼數(shù)據(jù)庫中或座機數(shù)據(jù)庫中檢索相匹配的電話號碼。
進一步地,所述預(yù)設(shè)的分類規(guī)則包括,判斷待匹配電話號碼是否包含國家碼或地區(qū)碼,如果待匹配電話號碼包含國家碼或地區(qū)碼,則在包含相同的國家碼或地區(qū)碼的電話號碼數(shù)據(jù)庫中檢索相匹配的電話號碼。
進一步地,將所述待匹配電話號碼的字符串分成多個分段,具體包括:將電話號碼的字符串以每n(n>1)個數(shù)字為一段,從首位開始分段或從尾位開始分段。
進一步地,從待匹配電話號碼的位數(shù)開始分段,以數(shù)字個數(shù)為x和x+y進行劃分,其中x、y均為正整數(shù)。
進一步地,x不小于2,y不小于1。
進一步地,計算出每個電話號碼字符串的16位整數(shù)鍵ks;
計算出搜索子串的16位整數(shù)鍵key;
在ks集合中逐一與key進行匹配運算,當(dāng)結(jié)果與key相同時,表示該號碼中可能存在搜索子串,此時再進行完整字符串匹配檢索。
與現(xiàn)有技術(shù)相比,本發(fā)明一種海量電話號碼快速匹配檢索方法具有以下優(yōu)點:
對待檢索的電話號碼進行字符串分段,并且設(shè)置匹配優(yōu)先級,先查詢對應(yīng)于優(yōu)先級高的字符串,然后進一步檢索剩余部分字符串,既能夠節(jié)約存儲空間,又能夠極大地縮短處理時間,從而提高檢索效率。
附圖說明
圖1是本發(fā)明一種海量電話號碼快速匹配檢索方法的流程框圖。
具體實施方式
下面結(jié)合附圖和實施例,對本發(fā)明的具體實施方式作進一步詳細描述。以下實施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
實施例1
如圖1所示,本發(fā)明一種海量電話號碼快速匹配檢索方法的最佳實施例,
判斷待匹配電話號碼字符串的長度是大于基準長度還是等于基準長度,若等于基準長度,則不做處理;若大于基準長度,則確定電話號碼字符串中的特定數(shù)字,將特定數(shù)字截除掉;以中國為例,手機號碼前有時會有86,也即手機號碼這時為13位,以11位為標準長度。座機號碼前有時會有區(qū)號,座機號碼這時為11位或12位,以8位為標準長度。
根據(jù)預(yù)設(shè)的分類規(guī)則,判斷待匹配的電話號碼的分類,根據(jù)電話號碼的分類,在相應(yīng)類別的數(shù)據(jù)庫內(nèi)檢索匹配電話號碼;
將所述待匹配電話號碼的字符串分成多個分段,每個分段包括至少一個數(shù)字;
設(shè)置多個分段的匹配優(yōu)先級,根據(jù)該優(yōu)先級逐一進行各個分段的字符匹配,直至檢索到相匹配的號碼。
在本實施例中,還包括判斷待匹配電話號碼是手機號碼還是座機號碼,并根據(jù)相應(yīng)的判斷結(jié)果,在相應(yīng)的手機號碼數(shù)據(jù)庫中或座機數(shù)據(jù)庫中檢索相匹配的電話號碼。在中國手機號碼是11位數(shù),座機號碼是8位數(shù),如此,現(xiàn)有一個大致檢索范圍的劃分,能夠省去很多不必要的時間浪費。
在進行完手機號碼和座機號碼區(qū)分之后,不同國家和地區(qū)的電話號碼都有相對應(yīng)的區(qū)號,例如,座機號碼帶有區(qū)號直轄市為11位,各省的各市為12位,通過號碼的位數(shù)可以區(qū)分是座機號還是手機號。由于直轄市的座機號帶上區(qū)號是和手機一樣的11位,這時根據(jù)前幾位號碼進行判斷區(qū)分,判斷待匹配電話號碼是否包含國家碼或地區(qū)碼,如果待匹配電話號碼包含國家碼或地區(qū)碼,則在包含相同的國家碼或地區(qū)碼的電話號碼數(shù)據(jù)庫中檢索相匹配的電話號碼。再一次的縮小搜索范圍。
實施例2
本實施例一種海量電話號碼快速匹配檢索方法,在實施例1的基礎(chǔ)上,將電話號碼的字符串以每n(n>1)個數(shù)字為一段,從首位開始分段或從尾位開始分段。
從待匹配電話號碼的位數(shù)開始分段,以數(shù)字個數(shù)為x和x+y進行劃分,其中x、y均為正整數(shù)。進一步地,x不小于2,y不小于1。
一般來講,電話號碼的尾位數(shù)字差別較大。以中國為例,在中國手機號碼的第一位都是1.
實施例3
本實施例一種海量電話號碼快速匹配檢索方法,具體包括:
計算出每個電話號碼字符串的16位整數(shù)鍵{ks};
計算出搜索子串的16位整數(shù)鍵key;
在{ks}集合中逐一與key進行or運算,當(dāng)結(jié)果與key相同時,表示該號碼中可能存在搜索子串,此時再進行string.contains操作,進行完整字符串匹配檢索;
整體運行效果,對于100萬11位的隨機號碼樣本,執(zhí)行效率明顯高于逐字符匹配的系統(tǒng)contains算法,以及kmp算法。
以上所述僅是本發(fā)明的優(yōu)選實施方式,并不用于限制本發(fā)明,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明技術(shù)原理的前提下,還可以做出若干改進和變型,這些改進和變型也應(yīng)視為本發(fā)明的保護范圍。