本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,具體涉及一種識別用戶名縮寫現(xiàn)象的方法。
背景技術(shù):
近年來,互聯(lián)網(wǎng)發(fā)展迅速,已經(jīng)深入到社會生活的方方面面,例如在新浪、搜狐、騰訊等門戶網(wǎng)站觀看新聞或視頻,在微博、貼吧、社區(qū)等社交網(wǎng)絡(luò)進(jìn)行信息交流,人們在使用這些網(wǎng)絡(luò)時(shí)會注冊賬戶,填寫用戶名。用戶名是用戶在注冊網(wǎng)站時(shí)填寫的符合一定規(guī)則的能夠標(biāo)識用戶身份的字符串,通常由英文字母、數(shù)字以及下劃線等一些特殊字符組成。
用戶在某個(gè)網(wǎng)站注冊時(shí),由于該網(wǎng)站的用戶名具有唯一性,且常用的用戶名已被他人注冊,或出于保護(hù)個(gè)人隱私等其他考慮而沒有使用常用的用戶名,但同時(shí)為了便于記憶而選擇將常用的用戶名中某些單詞進(jìn)行縮寫,變成一個(gè)新的用戶名并注冊使用,此即為用戶名的縮寫現(xiàn)象。識別用戶名間的縮寫現(xiàn)象對于互聯(lián)網(wǎng)研究有重大意義,例如,研究人員在對社交網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行挖掘,如用戶行為分析、個(gè)性化推薦等,有時(shí)需要將不同社交網(wǎng)絡(luò)中的同一用戶或相似用戶進(jìn)行關(guān)聯(lián),其中一些關(guān)聯(lián)方法就需要借助識別用戶名中的縮寫現(xiàn)象來分析用戶名的相似程度。
識別用戶名縮寫現(xiàn)象即為給出兩個(gè)用戶名,判斷其中一個(gè)用戶名的某個(gè)片段是否是另一個(gè)用戶名的某個(gè)片段的縮寫。解決該問題的通用方法為枚舉法,即枚舉一個(gè)用戶名的子串s1和另一個(gè)用戶名的子串s2,檢查s1是否是s2的縮寫形式。如果存在這樣的s1、s2,則認(rèn)為兩個(gè)用戶名間存在縮寫現(xiàn)象,且s1是對s2的縮寫,否則認(rèn)為兩個(gè)用戶名間不存在縮寫現(xiàn)象。
然而,枚舉法在識別用戶名縮寫現(xiàn)象時(shí)需要枚舉用戶名所有的子串,時(shí)間開銷大,難以適用大規(guī)模的實(shí)時(shí)用戶名縮寫現(xiàn)象識別任務(wù)。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述不足,本發(fā)明提供一種識別用戶名縮寫現(xiàn)象的方法,無需列舉用戶名的子串,減少計(jì)算量,時(shí)間開銷小,能夠更加高效地識別用戶名縮寫現(xiàn)象。
為解決上述技術(shù)問題,本發(fā)明采用如下技術(shù)方案:
一種識別用戶名縮寫現(xiàn)象的方法,步驟包括:
1)對兩個(gè)或兩個(gè)以上的用戶名中的字符進(jìn)行過濾,僅保留英文字母和數(shù)字;
2)將上述過濾后的用戶名各分割成若干個(gè)連續(xù)片段,各選取每個(gè)片段的首字符組成一新字符串;
3)根據(jù)上述新字符串獲取最長縮寫詞長度,如長度值大于或等于給定閾值ΔL,則判定所述用戶名間具有用戶名縮寫現(xiàn)象。
進(jìn)一步地,將保留的英文字母統(tǒng)一轉(zhuǎn)換成小寫或大寫的形式。
進(jìn)一步地,所述片段為單詞或單個(gè)字符。
進(jìn)一步地,所述片段根據(jù)指定的字典分割得到。
進(jìn)一步地,所述字典包括人名、地名、物名、杜撰詞或其他指定詞,該指定詞包括名詞、動(dòng)詞、形容詞、副詞。
進(jìn)一步地,采用動(dòng)態(tài)規(guī)劃算法根據(jù)所述新字符串獲取最長縮寫詞長度。
進(jìn)一步地,所述閾值ΔL為欲識別用戶名縮寫形式的最小長度。
進(jìn)一步地,當(dāng)欲識別中文人名拼音縮寫形式時(shí),ΔL≥2。
進(jìn)一步地,當(dāng)欲識別英文人名縮寫形式時(shí),ΔL=2。
本發(fā)明的有益效果是,本發(fā)明提供的方法無需列舉用戶名所有的子串,能夠自動(dòng)識別用戶名間是否存在縮寫現(xiàn)象。在識別、判斷用戶名之前,預(yù)先對用戶名進(jìn)行分割、縮寫,相比于現(xiàn)有技術(shù)減少了識別過程中字符串自身的長度,從而減少了計(jì)算量。在識別用戶名縮寫現(xiàn)象時(shí),本方法通過判斷最長縮寫詞長度的值便可輕易判定,而最長縮寫詞長度的獲取采用的是一種動(dòng)態(tài)規(guī)劃算法,相比于現(xiàn)有技術(shù)逐一枚舉子串的過程減少了大量重復(fù)的計(jì)算。
附圖說明
圖1為實(shí)施例中提供的一種識別用戶名縮寫現(xiàn)象的方法流程圖。
具體實(shí)施方式
為使本發(fā)明的上述特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉實(shí)施例,并配合所附圖作詳細(xì)說明如下。
此提供一種識別用戶名縮寫現(xiàn)象的方法,如圖1所示,假定給定兩個(gè)用戶名a,b,判斷a和b之間是否具有用戶名縮寫現(xiàn)象,包含以下步驟:
1、用戶名預(yù)處理
用戶名通??梢园⑽淖帜?、數(shù)字以及下劃線等部分特殊字符,該步驟旨在去除用戶名中的特殊字符,本發(fā)明提到的特殊字符是指除英文字母和數(shù)字以外的所有字符,只保留英文字母和數(shù)字,并且統(tǒng)一將英文字母轉(zhuǎn)變?yōu)樾懟虼髮懶问?,本?shí)施例以小寫形式為例。
2、分割并縮寫用戶名
根據(jù)指定者指定的具有實(shí)際意義的單詞的字典W,將用戶名分割成若干個(gè)連續(xù)的片段,每個(gè)片段為W中的單詞或單個(gè)字符,同時(shí)需要保證分割后的片段的數(shù)量盡可能少。該字典W的指定者為用戶,也可以為其他人。所謂具有實(shí)際意義的單詞,例如是人名、地名、物名或其他對于指定者來講具有意義的概念,此概念可為名詞、動(dòng)詞、形容詞、副詞或其他性詞匯,或者其他由指定者杜撰的詞匯。
可通過如下方法對經(jīng)過上述預(yù)處理的用戶名進(jìn)行分割,為便于表達(dá),此處設(shè)給定的用戶名為u,長度為n,記Si表示用戶名u的第i個(gè)字符至第n個(gè)字符組成的子串的分割結(jié)果,分割步驟如下:
(1)初始化i=n+1,Sn+1={}。
(2)令i=i-1,依次查看字典W中的各個(gè)單詞w,設(shè)w的長度為m,如果滿足w=uiui+1…ui+m-1,即w出現(xiàn)在用戶名u中的第i個(gè)字符的位置,這時(shí)如果Si未賦值或滿足|Si+m|+1<|Si|,則令Si=w∪Si+m。如果檢查完W中所有的單詞之后Si仍未賦值,則令Si=u[i]∪Si+m。其中u[i]表示u的第i個(gè)字符。
(3)重復(fù)第(2)步,直到i=0為止,此時(shí)S0就是用戶名u的分割結(jié)果。
在對用戶名進(jìn)行分割之后,取分割結(jié)果中每個(gè)片段的首字符組成一個(gè)新字符串作為原用戶名的縮寫形式。
3、計(jì)算最長縮寫詞長度
設(shè)經(jīng)過第2步處理之后得到的用戶名a、b的分割結(jié)果分別為Xa、Xb,縮寫形式分別為Ya、Yb,需得到用戶名a和b的最長縮寫詞長度m。最長縮寫詞長度是指兩個(gè)用戶名縮寫形式滿足特定條件的最長公共部分,該特定條件為該公共部分的每個(gè)字符對應(yīng)縮寫之前的兩個(gè)用戶的分割結(jié)果中的字符串,均滿足一個(gè)為單個(gè)字符且另一個(gè)為單詞。為獲得該最長縮寫詞長度m,專門設(shè)計(jì)了一動(dòng)態(tài)規(guī)劃算法,其公式如下:
其中,Ya[i]表示字符串Ya的第i個(gè)字符,Yb[j]表示字符串Yb的第j個(gè)字符,|Xa[i]|表示集合Xa中第i個(gè)字符串的長度,|Xb[j]|表示集合Xb中第j個(gè)字符串的長度,|Ya|表示字符串Ya的長度,|Yb|表示字符串Yb的長度。
4、識別用戶名縮寫現(xiàn)象
設(shè)給定的閾值為ΔL,如果滿足m≥ΔL,說明用戶名a、b之間存在縮寫現(xiàn)象,否則說明用戶名a、b之間不存在縮寫現(xiàn)象。
結(jié)合上述方法,特舉以下兩個(gè)應(yīng)用于具體場景的實(shí)施例,以說明本方法切實(shí)可行。
實(shí)施例1:
本實(shí)施例1用于識別用戶名之間是否存在姓名拼音的縮寫現(xiàn)象。根據(jù)中國人的姓名特征來看,姓名至少為兩個(gè)字,例如張偉、史小明等,以張偉為例,其姓名拼音為Zhang Wei或Wei Zhang,拼音縮寫個(gè)例是具有隨機(jī)性的,而從統(tǒng)計(jì)學(xué)上來看,拼音縮寫很大概率上是取姓名的首字母,即zw或wz;而史小明的姓名拼音Shi Xiaoming或Xiaoming Shi,其拼音縮寫很可能是sxm或xms,由上述分析可認(rèn)為W為字符串長度不小于2的拼音的集合,ΔL=2。同理,如果要識別英文人名的縮寫,由于英文名一般情況下middle name較少使用,即英文名至少是由first name和last name組成,例如英文名Sheldon Lee Cooper,常為Sheldon Cooper,縮寫為sc,所以要識別的縮寫形式的最小長度可設(shè)置為2,即ΔL=2。
給定兩個(gè)用戶名a=zgxxidian123、b=zhangguoxin012,本實(shí)施例欲通過本發(fā)明提供的方法識別這兩個(gè)用戶名之間是否存在縮寫現(xiàn)象,通過上述第2步提供方法計(jì)算得到用戶名a、b的分割結(jié)果分別為Xa={z,g,x,xi,dian,1,2,3}、Xb={zhang,guo,xin,0,1,2},縮寫形式分別為Ya=zgxxd123、Yb=zgx012,進(jìn)一步地,通過上述第3步計(jì)算得到用戶名a和b的最長縮寫詞長度m=3。由上段已知ΔL=2,則m≥ΔL,說明用戶名a、b之間存在縮寫現(xiàn)象。
實(shí)施例2:
本實(shí)施例2用于識別用戶名之間是否存在姓名拼音的縮寫現(xiàn)象,由上述實(shí)施例的分析可知,W為字符串長度不小于2的拼音的集合,ΔL=2。
給定兩個(gè)用戶名a=wanxia68、b=wanter_123,通過上述第2步提供方法計(jì)算得到用戶名a、b的分割結(jié)果分別為Xa={wan,xia,6,8}、Xb={wan,te,r,1,2,3},縮寫形式分別為Ya=wx68,Yb=wtr123,進(jìn)一步地,通過上述第3步計(jì)算得到用戶名a和b的最長縮寫詞的長度m=0。由于m<ΔL,說明用戶名a、b之間不存在縮寫現(xiàn)象。
本發(fā)明提供的方法是通過算法自動(dòng)識別用戶名是否存在縮寫現(xiàn)象,無需像現(xiàn)有技術(shù)那樣列舉用戶名所有的子串,簡便可行。在識別、判斷用戶名之前,預(yù)先對用戶名進(jìn)行分割、縮寫,相比于現(xiàn)有技術(shù)減少了識別過程中字符串自身的長度,從而減少了計(jì)算量。在識別用戶名縮寫現(xiàn)象時(shí),本方法通過判斷最長縮寫詞長度的值便可輕易判定,而最長縮寫詞長度的獲取采用的是一種動(dòng)態(tài)規(guī)劃算法,相比于現(xiàn)有技術(shù)逐一枚舉子串的過程減少了大量重復(fù)的計(jì)算。
最后應(yīng)當(dāng)說明的是,雖然本發(fā)明已以實(shí)施例公開如上,但這些實(shí)施例并非用于限定本發(fā)明,所屬技術(shù)領(lǐng)域中普通技術(shù)人員可以對其進(jìn)行改動(dòng)或替換,而不脫離本發(fā)明的精神和范圍,故本發(fā)明的保護(hù)范圍以權(quán)利要求書為準(zhǔn)。