本發(fā)明涉及數(shù)據(jù)查找領域,更具體地,涉及一種基于后綴數(shù)組的短信查找方法及系統(tǒng)。
背景技術:
后綴數(shù)組最初是作為后綴樹的一種替代被提出的,與后綴樹相比,存儲后綴數(shù)組所需的空間更少,應用范圍更廣。在后綴數(shù)組被提出后,后綴數(shù)組作為一種重要的索引數(shù)據(jù)結構,被廣泛的應用于生物信息學、全文索引、字符串匹配、頻繁字符串挖掘以及順序分析和聚類分析等領域。
目前,即時通訊設備一般都提供模糊查找短信的功能。模糊查找是指查找時不必以搜索目標的全稱為關鍵詞進行查找,而是可以以搜索目標的部分名稱為關鍵詞進行查找的過程。如何實現(xiàn)快速模糊查找短信對用戶而言至關重要,尤其是當短信息數(shù)量越來越大時,會極大地影響用戶的體驗?,F(xiàn)有的查找短信的方案是根據(jù)關鍵詞對短信內(nèi)容列表進行逐字符的多次遍歷,文本的模式匹配多采用精確匹配的模式,這種模式在查找時需要耗費較長的時間。隨著時間的推移,尤其是對模糊匹配的需求,這些技術都不太適合現(xiàn)實的需求。
技術實現(xiàn)要素:
本發(fā)明為解決以上現(xiàn)有技術提供的短信查找方法耗時較長的缺陷,提供了一種基于后綴數(shù)組的短信查找方法。
為實現(xiàn)以上發(fā)明目的,采用的技術方案是:
一種基于后綴數(shù)組的短信查找方法,包括以下步驟:
s1.為短信列表中的每條短信根據(jù)其短信字符串內(nèi)容構建后綴數(shù)組,然后按照預設的規(guī)則對構造得到的所有后綴數(shù)組中的各個后綴數(shù)組項進行排序;
s2.當接收到一個查找短信的關鍵詞時,按照接收字符的順序,將接收到的關鍵詞中的各個字符依次作為二分查找的索引;
s3.使用關鍵詞中的第i個字符作為索引在已排序的所有后綴數(shù)組項中進行二分查找,將首字符為該索引的后綴數(shù)組項對應的后綴數(shù)組作為第i次查找的結果;i的初始值為1;
s4.令i=i+1然后使用關鍵詞中的第i個字符作為索引在第i-1次查找結果包含的后綴數(shù)組項中進行二分查找,然后將首字符為該索引的后綴數(shù)組項對應的后綴數(shù)組作為第i次查找的結果;
s5.重復執(zhí)行步驟s4直至第i>n,此時將第i次查找的結果對應的短信作為短信查找結果進行輸出,n為關鍵詞包含的字符數(shù)。
上述方案中,本發(fā)明提供的方法具有查詢速度快的特點,在進行查找時無需遍歷每條短信,其查詢效率高;尤其是當查詢的關鍵詞較長時,查找的速度提升明顯。
優(yōu)選地,所述步驟s1在對各個后綴數(shù)組項進行排序時,根據(jù)各個后綴數(shù)組項首字符的拼音首字母進行排序。
同時,本發(fā)明還提供了一種應用以上方法的系統(tǒng),其具體的方案如下:
包括字符串讀取模塊、構造模塊、排序模塊和查找模塊;
其中字符串讀取模塊用于讀取短信列表中的每條短信的字符串內(nèi)容;
構造模塊用于為短信列表中的每條短信構建后綴數(shù)組;
排序模塊用于對構造得到的所有后綴數(shù)組中的各個后綴數(shù)組項進行排序;
查找模塊用于根據(jù)關鍵詞在已排序的所有后綴數(shù)組項中進行二分查找,然后將查找得到的后綴數(shù)組項對應的后綴數(shù)組作為查找的結果。
與現(xiàn)有技術相比,本發(fā)明的有益效果是:
本發(fā)明提供的方法具有查詢速度快的特點,在進行查找時無需遍歷每條短信,其查詢效率高;尤其是當查詢的關鍵詞較長時,查找的速度提升明顯。
附圖說明
圖1為方法的流程示意圖。
圖2為系統(tǒng)的結構示意圖。
具體實施方式
附圖僅用于示例性說明,不能理解為對本專利的限制;
以下結合附圖和實施例對本發(fā)明做進一步的闡述。
實施例1
如圖1所示,本發(fā)明提供的方法包括以下步驟:
s1.為短信列表中的每條短信根據(jù)其短信字符串內(nèi)容構建后綴數(shù)組,然后按照預設的規(guī)則對構造得到的所有后綴數(shù)組中的各個后綴數(shù)組項進行排序;
s2.當接收到一個查找短信的關鍵詞時,按照接收字符的順序,將接收到的關鍵詞中的各個字符依次作為二分查找的索引;
s3.使用關鍵詞中的第i個字符作為索引在已排序的所有后綴數(shù)組項中進行二分查找,將首字符為該索引的后綴數(shù)組項對應的后綴數(shù)組作為第i次查找的結果;i的初始值為1;
s4.令i=i+1然后使用關鍵詞中的第i個字符作為索引在第i-1次查找結果包含的后綴數(shù)組項中進行二分查找,然后將首字符為該索引的后綴數(shù)組項對應的后綴數(shù)組作為第i次查找的結果;
s5.重復執(zhí)行步驟s4直至第i>n,此時將第i次查找的結果對應的短信作為短信查找結果進行輸出,n為關鍵詞包含的字符數(shù)。
上述方案中,本發(fā)明提供的方法具有查詢速度快的特點,在進行查找時無需遍歷每條短信,其查詢效率高;尤其是當查詢的關鍵詞較長時,查找的速度提升明顯。
在具體的實施過程中,所述步驟s1在對各個后綴數(shù)組項進行排序時,根據(jù)各個后綴數(shù)組項首字符的拼音首字母進行排序。
實施例2
本實施例提供了一種應用實施例1方案的系統(tǒng),如圖2所示,其具體的方案如下:
包括字符串讀取模塊、構造模塊、排序模塊和查找模塊;
其中字符串讀取模塊用于讀取短信列表中的每條短信的字符串內(nèi)容;
構造模塊用于為短信列表中的每條短信構建后綴數(shù)組;
排序模塊用于對構造得到的所有后綴數(shù)組中的各個后綴數(shù)組項進行排序;
查找模塊用于根據(jù)關鍵詞在已排序的所有后綴數(shù)組項中進行二分查找,然后將查找得到的后綴數(shù)組項對應的后綴數(shù)組作為查找的結果。
實施例3
本實施例為實施例1的方案的舉例說明,如圖2所示,其具體的流程如下:
步驟1、首先為兩條短信的字符串內(nèi)容進行后綴數(shù)組的構造,分別如表1,表2所示。
步驟2、為短信列表中的每個短信構造后綴數(shù)組后,按照預設的規(guī)則對構造得到的所有后綴數(shù)組中的各個后綴數(shù)組項進行排序。
此處所述規(guī)則為按首漢字的拼音首字母進行排序;得到表3的后綴數(shù)組的列表;
表3
步驟3、當接收到查找短信的關鍵詞“吃*飯”(*代表任意字符)時,首先,根據(jù)用戶輸入的第一個字符“吃”,將該字符“吃”的拼音首字母“c”與表中后綴數(shù)組項“米飯”的首字符的拼音首字母“m”進行比較,確定字符“吃”的查找范圍為“米飯”前面的后綴數(shù)組項,忽略“米飯”后面的后綴數(shù)組項。
步驟4、在“米飯”前面的后綴數(shù)組項中找到兩個首字符為“吃”的后綴數(shù)組項“吃早點”和“吃米飯”,將“吃早點”所在的后綴數(shù)組和“吃米飯”所在的后綴數(shù)組作為本次查找的結果。
步驟5、然后,根據(jù)關鍵詞中的下一個字符“飯”進行下一次查找,在上一次的查找結果的后綴數(shù)組中進行類似的查找,得到首字符為“飯”的后綴數(shù)組項“飯”,將該后綴數(shù)組項“飯”所在的數(shù)組作為本次查找的結果,由于字符“飯”為關鍵詞中的最后一個字符,因此,該后綴數(shù)組對應的短信“吃米飯”就是查找到的短信。
顯然,本發(fā)明的上述實施例僅僅是為清楚地說明本發(fā)明所作的舉例,而并非是對本發(fā)明的實施方式的限定。對于所屬領域的普通技術人員來說,在上述說明的基礎上還可以做出其它不同形式的變化或變動。這里無需也無法對所有的實施方式予以窮舉。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應包含在本發(fā)明權利要求的保護范圍之內(nèi)。