本發(fā)明涉及智能手機(jī)終端的信息處理技術(shù)領(lǐng)域,特別是通訊錄聯(lián)系人智能搜索。
背景技術(shù):隨著智能移動(dòng)設(shè)備系統(tǒng)的發(fā)展,人們對(duì)智能手機(jī)的需求也越來(lái)越高,包括更美化的界面,更簡(jiǎn)潔快捷的操作,更多功能的應(yīng)用軟件等。手機(jī)通訊錄作為手機(jī)最基礎(chǔ)的應(yīng)用,在人們的日常生活中發(fā)揮巨大的作用,電話通訊、收發(fā)短信、發(fā)送郵件等過(guò)程都需要調(diào)用聯(lián)系人電話簿,而目前手機(jī)操作系統(tǒng)自帶的通訊錄功能比較薄弱,尤其是在聯(lián)系人搜索方面的用戶體驗(yàn)嚴(yán)重滯后,造成用戶發(fā)短信、打電話時(shí)定位聯(lián)系人很多不便。數(shù)據(jù)庫(kù)全文檢索是對(duì)大數(shù)據(jù)文本進(jìn)行索引,在建立的索引中對(duì)要查找的單詞進(jìn)行搜索,定位哪些文本數(shù)據(jù)包括要搜索的單詞;全文檢索的全部工作就是建立索引和在索引中搜索定位,所有的工作都是圍繞這兩個(gè)來(lái)進(jìn)行的;分詞的方法基本上是二元分詞法、最大匹配法和統(tǒng)計(jì)方法,索引的數(shù)據(jù)結(jié)構(gòu)基本上采用倒排索引的結(jié)構(gòu)。全文檢索方法主要應(yīng)用于大型數(shù)據(jù)文本,它并不適用通訊錄這種結(jié)構(gòu)簡(jiǎn)單、數(shù)據(jù)量較少的場(chǎng)景。此外,它還需要較大的存儲(chǔ)空間,隨著通訊錄的更新動(dòng)態(tài)維護(hù)索引,總體代價(jià)太大,使用起來(lái)不夠靈活。傳統(tǒng)的通訊錄搜索采用的是對(duì)輸入關(guān)鍵詞語(yǔ)和聯(lián)系人姓名及號(hào)碼進(jìn)行簡(jiǎn)單字符串匹配,并沒(méi)有考慮姓名的全拼、簡(jiǎn)拼及部分拼音等特殊搜索。此外,字符串的子序列是從最初序列通過(guò)去除某些元素但不破壞余下元素的相對(duì)位置而形成的新序列,它是描述兩個(gè)字符串相似匹配的常用標(biāo)準(zhǔn),以形式化的方式來(lái)說(shuō),給定一個(gè)序列X=<x1,x2,x3,…,xm>,另一個(gè)序列Z=<z1,z2,z3,…,zk>是X的子序列,如果存在X的一個(gè)嚴(yán)格遞增下表序列<i1,i2,…,ik>,使得對(duì)所有的j=1,2,…,k。傳統(tǒng)的子序列匹配算法沒(méi)有考慮到拼音的聲母和韻母,沒(méi)有對(duì)拼音進(jìn)行動(dòng)態(tài)分詞匹配,因此需要進(jìn)行一定的改造。拇指鍵盤(pán)的簡(jiǎn)單易用性吸引著大量智能手機(jī)用戶,而提供拇指鍵盤(pán)的智能查詢是用戶必不可少的需求,因此如何給人們提供更便捷、更高效的通訊錄搜索操作方法和用戶體驗(yàn)是亟待解決的問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:本發(fā)明針對(duì)上述問(wèn)題,提供一種智能手機(jī)通訊錄模糊搜索的方法,目的是便捷、高效的通訊錄搜索操作方法,將支持對(duì)聯(lián)系人姓名(全拼、簡(jiǎn)拼、部分拼音、拇指鍵盤(pán)數(shù)字序列)、手機(jī)號(hào)碼、郵箱等關(guān)鍵屬性的模糊匹配和定位,給用戶提供更快、更好的用戶體驗(yàn)。為了實(shí)現(xiàn)上述目的,本發(fā)明采用以下技術(shù)方案:一種智能手機(jī)通訊錄模糊搜索的方法,包括以下步驟:1)通過(guò)開(kāi)放接口讀取本機(jī)通訊錄聯(lián)系人數(shù)據(jù),剔除冗余數(shù)據(jù),只留取關(guān)鍵信息,關(guān)鍵信息包括聯(lián)系人姓名、手機(jī)號(hào)碼和郵箱;2)通過(guò)信息預(yù)處理器對(duì)所有聯(lián)系人信息進(jìn)行預(yù)處理,對(duì)于姓名中的中文,通過(guò)查漢字編碼表提取拼音,多音字則對(duì)應(yīng)多條記錄,同時(shí)將拼音轉(zhuǎn)碼成拇指鍵盤(pán)對(duì)應(yīng)的數(shù)字序列,將上述所有的記錄寫(xiě)入內(nèi)存和設(shè)計(jì)好的緩存器中;3)對(duì)輸入的搜索關(guān)鍵字key,首先查詢緩存器是否已有對(duì)應(yīng)記錄,若命中則直接定位,否則全局搜索通訊錄,將關(guān)鍵字key分為三種類(lèi)型:a)含有中文字符;b)不含中文字符,含有英文字母和數(shù)字;c)只包含純數(shù)字;4)對(duì)于給定的關(guān)鍵字key通過(guò)搜索匹配器進(jìn)行匹配搜索,若關(guān)鍵字屬于b類(lèi)別,則匹配對(duì)象為聯(lián)系人姓名拼音;若屬于c類(lèi)別,則匹配對(duì)象為拇指鍵盤(pán)數(shù)字序列;搜索匹配器的具體匹配規(guī)則:將姓名拼音轉(zhuǎn)換為一個(gè)拼音數(shù)組,遍歷關(guān)鍵字的每一個(gè)字母,將字母與拼音單詞依次匹配,若當(dāng)前字母匹配,則繼續(xù)匹配key與當(dāng)前單詞下一個(gè)字母或下一個(gè)單詞的第一個(gè)字母,若所有的關(guān)鍵字字母都有對(duì)應(yīng)的匹配,則匹配成功,否則匹配失??;5)通過(guò)步驟3)、4)得到所有與關(guān)鍵字key匹配的聯(lián)系人,通過(guò)加權(quán)排序器按照匹配優(yōu)先級(jí)進(jìn)行加權(quán)排序并輸出。進(jìn)一步,所述步驟3)中,對(duì)于a匹配對(duì)象為聯(lián)系人姓名;對(duì)于b匹配對(duì)象為聯(lián)系人姓名拼音和郵箱;對(duì)于c匹配對(duì)象為聯(lián)系人電話號(hào)碼和姓名對(duì)應(yīng)拇指鍵盤(pán)數(shù)字序列;對(duì)于b、c應(yīng)采用步驟4)中的拼音模糊匹配算法對(duì)拼音編碼和拇指鍵盤(pán)數(shù)字序列進(jìn)行模糊匹配,搜索時(shí),首先在緩存器中查詢,若命中或存在當(dāng)前關(guān)鍵字前綴,則在原結(jié)果中進(jìn)行二次搜索。進(jìn)一步,所述步驟4)中,采用了改造后的字符串子序列匹配算法,具體算法思想描述為:對(duì)給定的關(guān)鍵字key和姓名拼音pinyin,先將pinyin以空格符分隔成數(shù)組pinyin[N],定義s為開(kāi)始匹配的拼音數(shù)組下標(biāo),k為當(dāng)前需要匹配的key字母下標(biāo),i為當(dāng)前匹配的拼音單詞下標(biāo),j為當(dāng)前單詞的字母下標(biāo);a.初始化s=0,k=0,i=s,j=0,即從關(guān)鍵字第一個(gè)字母與拼音第一個(gè)單詞的第一個(gè)字母開(kāi)始匹配;b.判斷k==key.length,如果true,則匹配成功,算法終止;如果false,則轉(zhuǎn)c;c.判斷key[k]==pinyin[i][j],如果true轉(zhuǎn)d,如果false轉(zhuǎn)f;d.k++,j++,即嘗試匹配關(guān)鍵字下一個(gè)字母與當(dāng)前拼音單詞下一個(gè)字母;e.判斷j<pinyin[i].length,即提前判斷當(dāng)前單詞是否已經(jīng)全部匹配,如果true轉(zhuǎn)b繼續(xù)匹配下一個(gè),false轉(zhuǎn)g;f.判斷第i個(gè)拼音是否有匹配,如果true轉(zhuǎn)g,false則s++,k=0,i=s,j=0并轉(zhuǎn)b,從第s個(gè)拼音單詞開(kāi)始重新匹配;g.i++,j=0,即嘗試匹配關(guān)鍵字與下一個(gè)單詞第一個(gè)字母;h.判斷i<pinyin.length,如果true則轉(zhuǎn)b,false則匹配失敗,算法終止;根據(jù)以上算法描述,可以精確判斷key和pinyin[N]是否匹配,在算法過(guò)程中,用一個(gè)match[N]數(shù)組記錄關(guān)鍵字與每一個(gè)拼音的匹配詳情,在算法結(jié)束之后,根據(jù)match數(shù)組準(zhǔn)確描述算法匹配原因,對(duì)于拇指鍵盤(pán)數(shù)字序列,只是算法過(guò)程中所使用的臨時(shí)數(shù)據(jù),用戶也應(yīng)根據(jù)match數(shù)組反向查詢到具體對(duì)pinyin的模糊匹配。進(jìn)一步,所述步驟5)中,所述匹配優(yōu)先級(jí)可以自定義。進(jìn)一步,所述步驟5)中,匹配優(yōu)先級(jí)為:完全匹配>部分匹配;全拼>簡(jiǎn)拼>部分拼音;姓名匹配>號(hào)碼匹配>郵箱匹配。進(jìn)一步,對(duì)已搜索到的關(guān)鍵字key搜索結(jié)果記錄,應(yīng)存入緩存器中,下次搜索新的關(guān)鍵字時(shí),首先應(yīng)查詢緩存器,若關(guān)鍵字命中或是存在關(guān)鍵字前綴時(shí),直接在緩存的結(jié)果記錄之上進(jìn)行二次搜索。本發(fā)明與現(xiàn)有技術(shù)相比,具有如下有益效果:本發(fā)明所提供的方法實(shí)用簡(jiǎn)單、操作便捷、查找高效,它支持中文漢字、電話號(hào)碼、郵箱來(lái)搜索聯(lián)系人;支持按姓名首字母、全拼、部分拼音來(lái)模糊搜索聯(lián)系人。進(jìn)一步的,支持拇指鍵盤(pán)輸入數(shù)字直接反查拼音模糊搜索聯(lián)系人。進(jìn)一步的,通過(guò)改造后的字符串子序列匹配算法可以對(duì)搜索聯(lián)系人結(jié)果給出具體匹配原因。進(jìn)一步的,支持拇指鍵盤(pán)輸入數(shù)字直接反查拼音模糊搜索聯(lián)系人。進(jìn)一步的,對(duì)搜索結(jié)果進(jìn)行記錄緩存,二次搜索效率較高。附圖說(shuō)明圖1為通訊錄模糊搜索的結(jié)構(gòu)示意圖。圖2為通過(guò)關(guān)鍵字模糊搜索通訊錄聯(lián)系人的流程示意圖。圖3為改造后的字符串子序列匹配算法流程示意圖。具體實(shí)施方式下面結(jié)合實(shí)施例和附圖來(lái)對(duì)發(fā)明進(jìn)行詳細(xì)描述。本發(fā)明給出的是一種智能手機(jī)通訊錄模糊搜索聯(lián)系人的方法,設(shè)計(jì)了如圖1所示的搜索結(jié)構(gòu)示意圖,具體包括:信息預(yù)處理器:獲取并對(duì)聯(lián)系人信息預(yù)處理,過(guò)濾冗余數(shù)據(jù),對(duì)姓名進(jìn)行拼音編碼等。緩存器:對(duì)預(yù)處理過(guò)的聯(lián)系人信息進(jìn)行緩存,同時(shí)對(duì)關(guān)鍵字-搜索結(jié)果進(jìn)行緩存。搜索匹配器:對(duì)給定搜索關(guān)鍵字,根據(jù)其類(lèi)別匹配聯(lián)系人所有關(guān)鍵信息,它調(diào)用了改造過(guò)的子序列匹配算法。加權(quán)排序器:對(duì)搜索結(jié)果根據(jù)自定義的優(yōu)先級(jí)規(guī)則,進(jìn)行全局加權(quán)排序輸出。如圖2所示的關(guān)鍵字模糊搜索通訊錄聯(lián)系人的流程示意圖可以看出本發(fā)明一個(gè)實(shí)施例中的搜索方法主要包括以下流程:1)通過(guò)手機(jī)操作系統(tǒng)提供的接口,讀取本機(jī)通訊錄聯(lián)系人數(shù)據(jù),剔除冗余數(shù)據(jù),只留取聯(lián)系人姓名、手機(jī)號(hào)碼、郵箱等關(guān)鍵信息。2)對(duì)所有通訊錄聯(lián)系人的個(gè)人信息進(jìn)行預(yù)處理,特別地,對(duì)聯(lián)系人姓名通過(guò)查漢字拼音編碼表提取拼音,每個(gè)漢字拼音之間用空格分隔,如果姓名中存在多音字,轉(zhuǎn)碼成多條記錄,同時(shí)把拼音翻譯成拇指鍵盤(pán)對(duì)應(yīng)的數(shù)字序列,對(duì)上述處理過(guò)的聯(lián)系人信息維護(hù)在內(nèi)存中,同時(shí)備份到已設(shè)計(jì)好的緩存器中,下次搜索可直接查詢緩存器中記錄。表1為拼音字母對(duì)應(yīng)的拇指鍵盤(pán)數(shù)字轉(zhuǎn)碼表。3)拼音字母拇指鍵盤(pán)數(shù)字a,b,c2d,e,f3g,h,i4j,k,l5m,n,o6p,q,r,s7t,u,v8x,y,z94)搜索通訊錄聯(lián)系人時(shí),輸入搜索關(guān)鍵字,將關(guān)鍵字分為三種類(lèi)別考慮:a)含有中文字符;b)不含中文字符,包含英文字母;c)只包含純數(shù)字。對(duì)于a),關(guān)鍵字包含中文字符,而聯(lián)系人信息中只有未經(jīng)處理過(guò)的原始姓名字段中可能含有中文,因此只需將關(guān)鍵字與聯(lián)系人姓名字符串匹配即可;對(duì)于b),關(guān)鍵字包含英文字母,可能符合的字段應(yīng)為聯(lián)系人姓名的拼音或者郵箱,對(duì)于拼音情形,考慮為聯(lián)系人姓名的全拼、簡(jiǎn)拼、部分拼音的一種,可采用步驟四中的關(guān)鍵字和姓名全拼的匹配算法處理,如果是郵箱,則只需簡(jiǎn)單的字符串匹配即可;對(duì)于c),關(guān)鍵字只包含純數(shù)字,應(yīng)考慮手機(jī)號(hào)碼和拇指鍵盤(pán)數(shù)字序列兩種情形,前者只需要對(duì)關(guān)鍵字與聯(lián)系人號(hào)碼進(jìn)行子字符串匹配,后者則采用步驟四的關(guān)鍵字和拇指鍵盤(pán)數(shù)字序列的匹配算法。5)對(duì)給定的關(guān)鍵字key和姓名拼音pinyin(純數(shù)字和拇指鍵盤(pán)數(shù)字序列匹配情形類(lèi)似),先將姓名拼音以空格符分隔成數(shù)組pinyin[N],匹配key和pinyin[N].具體改造過(guò)的拼音匹配算法,即改造后的字符串子序列匹配算法流程如圖3所示,具體如下:定義s為開(kāi)始匹配的拼音數(shù)組下標(biāo),k為當(dāng)前需要匹配的key字母下標(biāo),i為當(dāng)前匹配的拼音單詞下標(biāo),j為當(dāng)前單詞的字母下標(biāo)。a.初始化s=0,k=0,i=s,j=0,即從第一個(gè)關(guān)鍵字字母與拼音第一個(gè)單詞的第一個(gè)字母開(kāi)始匹配。b.判斷k==key.length,如果true,則匹配成功,算法終止;如果false,則轉(zhuǎn)c。c.判斷key[k]==pinyin[i][j],如果true轉(zhuǎn)d,如果false轉(zhuǎn)f。d.k++,j++,即嘗試匹配關(guān)鍵字下一個(gè)字母與當(dāng)前拼音單詞下一個(gè)字母。e.判斷j<pinyin[i].length,即提前判斷當(dāng)前單詞是否已經(jīng)全部匹配,如果true轉(zhuǎn)2繼續(xù)匹配下一個(gè),false轉(zhuǎn)g。f.判斷第i個(gè)拼音是否有匹配,如果true轉(zhuǎn)g,false則s++,k=0,i=s,j=0并轉(zhuǎn)b,從第s個(gè)拼音單詞開(kāi)始重新匹配。g.i++,j=0,即嘗試匹配關(guān)鍵字與下一個(gè)單詞第一個(gè)字母。h.判斷i<pinyin.length,如果true則轉(zhuǎn)b,false則匹配失敗,算法終止。根據(jù)以上算法描述,可以精確判斷key和pinyin[N]是否匹配,在算法過(guò)程中,我們可以用一個(gè)match[N]數(shù)組記錄關(guān)鍵字與每一個(gè)拼音的匹配詳情,在算法結(jié)束之后,可以根據(jù)match準(zhǔn)確描述算法匹配原因,此外對(duì)于拇指鍵盤(pán)數(shù)字序列,它只是算法過(guò)程中所使用的臨時(shí)數(shù)據(jù),對(duì)于用戶也應(yīng)根據(jù)match數(shù)組反向查詢到具體對(duì)pinyin的模糊匹配。6)通過(guò)步驟3)、4)已經(jīng)得出所有與關(guān)鍵字key匹配的聯(lián)系人,按照匹配的原因(match)對(duì)結(jié)果進(jìn)行排序,優(yōu)先級(jí)可以根據(jù)需要自定義,本發(fā)明較好的實(shí)施例中,優(yōu)先級(jí)定義如下:完全匹配>部分匹配;全拼>簡(jiǎn)拼>部分拼音;姓名匹配>號(hào)碼匹配>郵箱。為了提高搜索效率,我們將搜索關(guān)鍵字key搜索結(jié)果的記錄存入緩存器中,這樣下次搜索新的關(guān)鍵字時(shí),可以先在緩存器中查詢,如關(guān)鍵字命中或者存在前綴關(guān)鍵字時(shí),可在緩存的結(jié)果記錄之上進(jìn)行二次搜索,這將大大提高搜索效率。本發(fā)明雖然已以較佳實(shí)施例公開(kāi)如上,但其并不是用來(lái)限定本發(fā)明,任何本領(lǐng)域技術(shù)人員在不脫離本發(fā)明的精神和范圍內(nèi),都可以利用上述揭示的方法和技術(shù)內(nèi)容對(duì)本發(fā)明技術(shù)方案做出可能的變動(dòng)和修改,因此,凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所做的任何簡(jiǎn)單修改、等同變化及修飾,均屬于本發(fā)明技術(shù)方案的保護(hù)范圍。