本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種信息匹配方法及裝置。
背景技術(shù):
隨著信息技術(shù)的不斷發(fā)展,越來(lái)越多的應(yīng)用場(chǎng)景需要進(jìn)行信息匹配,例如:搜索引擎的檢索詞匹配、論文的相似度匹配、拼寫檢查等。
目前,信息匹配技術(shù)通常為利用java語(yǔ)言的index of函數(shù)實(shí)現(xiàn)關(guān)鍵字匹配,即,建立預(yù)先寫有若干關(guān)鍵字的文件,將用戶在客戶端輸入的內(nèi)容與該文件中所含的每個(gè)關(guān)鍵字進(jìn)行匹配。假設(shè)預(yù)先建立的文件中包括100個(gè)關(guān)鍵字,那么,則需要進(jìn)行100次的全文掃描才能完成對(duì)用戶輸入內(nèi)容的信息匹配。在這個(gè)信息爆炸的時(shí)代,采用上述匹配方式進(jìn)行匹配的效率非常低,無(wú)法適應(yīng)信息量較大的場(chǎng)景。
現(xiàn)有技術(shù)不足在于:
現(xiàn)有的信息匹配方式效率低下,不能適應(yīng)信息量較大的場(chǎng)景。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例提出了一種信息匹配方法及裝置,以解決現(xiàn)有技術(shù)中信息匹配方式效率低下,不能適應(yīng)信息量較大的場(chǎng)景的技術(shù)問(wèn)題。
本申請(qǐng)實(shí)施例提供了一種信息匹配方法,包括如下步驟:
按照待匹配信息的字符順序接收所述待匹配信息;
將待匹配信息在預(yù)先構(gòu)建的有窮狀態(tài)機(jī)DFA中進(jìn)行匹配,所述DFA由預(yù) 設(shè)的關(guān)鍵字構(gòu)成,所述DFA中每個(gè)狀態(tài)的輸出列表包含所述狀態(tài)的子孫失敗狀態(tài)的輸出列表,所述狀態(tài)的子孫失敗狀態(tài)與所述狀態(tài)的字符相同;
在匹配過(guò)程中,如果當(dāng)前狀態(tài)沒(méi)有與所述待匹配信息的字符相匹配的下一狀態(tài),跳轉(zhuǎn)到所述當(dāng)前狀態(tài)的失敗狀態(tài)繼續(xù)匹配。
本申請(qǐng)實(shí)施例提供了一種信息匹配裝置,包括:
接收模塊,用于按照待匹配信息的字符順序接收所述待匹配信息;
匹配模塊,用于將待匹配信息在預(yù)先構(gòu)建的有窮狀態(tài)機(jī)DFA中進(jìn)行匹配,所述DFA由預(yù)設(shè)的關(guān)鍵字構(gòu)成,所述DFA中每個(gè)狀態(tài)的輸出列表包含所述狀態(tài)的子孫失敗狀態(tài)的輸出列表,所述狀態(tài)的子孫失敗狀態(tài)與所述狀態(tài)的字符相同;在匹配過(guò)程中,如果當(dāng)前狀態(tài)沒(méi)有與所述待匹配信息的字符相匹配的下一狀態(tài),跳轉(zhuǎn)到所述當(dāng)前狀態(tài)的失敗狀態(tài)繼續(xù)匹配。
有益效果如下:
本申請(qǐng)實(shí)施例所提供的信息匹配方法及裝置,預(yù)先構(gòu)建由預(yù)設(shè)關(guān)鍵字構(gòu)成的有窮狀態(tài)機(jī)DFA,將待匹配信息在所述DFA中進(jìn)行匹配,由此關(guān)鍵字的匹配即變成了狀態(tài)機(jī)的跳轉(zhuǎn);由于本申請(qǐng)實(shí)施例中所述DFA每個(gè)狀態(tài)的輸出列表包含所述狀態(tài)的子孫失敗狀態(tài)的輸出列表,在匹配過(guò)程中,如果當(dāng)前狀態(tài)沒(méi)有與所述待匹配信息的字符相匹配的下一狀態(tài),則跳轉(zhuǎn)到所述當(dāng)前狀態(tài)的失敗狀態(tài)繼續(xù)匹配,所述待匹配信息的匹配過(guò)程只需要隨著所述DFA狀態(tài)一步一步地往下一狀態(tài)跳轉(zhuǎn),無(wú)需返回上一狀態(tài)以匹配其他關(guān)鍵字,從而可以確保所述待匹配信息只需要掃描一遍即可完成匹配,極大地提高了匹配效率。
附圖說(shuō)明
下面將參照附圖描述本申請(qǐng)的具體實(shí)施例,其中:
圖1示出了本申請(qǐng)實(shí)施例中信息匹配方法實(shí)施的流程示意圖;
圖2示出了本申請(qǐng)實(shí)施例中DFA結(jié)構(gòu)示意圖;
圖3示出了本申請(qǐng)實(shí)施例中DFA初始化時(shí)的示意圖;
圖4示出了本申請(qǐng)實(shí)施例中DFA構(gòu)建完成后的結(jié)構(gòu)示意圖;
圖5示出了本申請(qǐng)實(shí)施例中群組聊天限制的DFA示意圖;
圖6示出了本申請(qǐng)實(shí)施例中信息匹配裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本申請(qǐng)的技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖對(duì)本申請(qǐng)的示例性實(shí)施例進(jìn)行進(jìn)一步詳細(xì)的說(shuō)明,顯然,所描述的實(shí)施例僅是本申請(qǐng)的一部分實(shí)施例,而不是所有實(shí)施例的窮舉。并且在不沖突的情況下,本說(shuō)明中的實(shí)施例及實(shí)施例中的特征可以互相結(jié)合。
針對(duì)現(xiàn)有技術(shù)的不足,本申請(qǐng)實(shí)施例提出了一種信息匹配方法及裝置,下面進(jìn)行說(shuō)明。
圖1示出了本申請(qǐng)實(shí)施例中信息匹配方法實(shí)施的流程示意圖,如圖所示,所述信息匹配方法可以包括如下步驟:
步驟101、按照待匹配信息的字符順序接收所述待匹配信息;
步驟102、將待匹配信息在預(yù)先構(gòu)建的有窮狀態(tài)機(jī)(DFA,Deterministic Finite Automata)中進(jìn)行匹配,所述DFA由預(yù)設(shè)的關(guān)鍵字構(gòu)成,所述DFA中每個(gè)狀態(tài)的輸出列表包含所述狀態(tài)的子孫失敗狀態(tài)的輸出列表,所述狀態(tài)的子孫失敗狀態(tài)與所述狀態(tài)的字符相同;
步驟103、在匹配過(guò)程中,如果當(dāng)前狀態(tài)沒(méi)有與所述待匹配信息的字符相匹配的下一狀態(tài),跳轉(zhuǎn)到所述當(dāng)前狀態(tài)的失敗狀態(tài)繼續(xù)匹配。
具體實(shí)施中,所述待匹配信息可以為網(wǎng)絡(luò)博客中的一篇文章,也可以為word文檔中的某段文字。根據(jù)實(shí)際場(chǎng)景的及時(shí)性需要,所述待匹配信息可以為既有信息,也可以在用戶實(shí)時(shí)輸入的信息,例如:所述待匹配信息可以為已公開博文的標(biāo)題,也可以為用戶在搜索引擎中實(shí)時(shí)輸入的檢索詞語(yǔ)。
除此之外,本申請(qǐng)實(shí)施例中所述待匹配信息還可以為語(yǔ)音,即,可以接收用戶輸入的語(yǔ)音信息,將所述語(yǔ)音(或轉(zhuǎn)換成對(duì)應(yīng)的文本)在預(yù)先構(gòu)建的DFA 中進(jìn)行匹配,從而實(shí)現(xiàn)所述用戶言語(yǔ)內(nèi)容的檢測(cè)。
本申請(qǐng)實(shí)施例中所述預(yù)先構(gòu)建的DFA,可以由預(yù)設(shè)的若干關(guān)鍵字組成,每個(gè)關(guān)鍵字所包含的字符均可以為所述DFA中的狀態(tài)節(jié)點(diǎn)。所述DFA中與某個(gè)狀態(tài)的字符相同的狀態(tài),可以作為所述狀態(tài)的子孫失敗狀態(tài),每個(gè)狀態(tài)的子孫失敗狀態(tài)可以在DFA構(gòu)建初始化時(shí)預(yù)先設(shè)定。
在具體匹配過(guò)程中,可以從所述DFA的初始狀態(tài)開始匹配,如果當(dāng)前狀態(tài)的關(guān)鍵字集合包含所述待匹配信息中某個(gè)字符,則根據(jù)跳轉(zhuǎn)路徑跳轉(zhuǎn)到下一狀態(tài),以開始所述待匹配信息中下一字符的讀入;如果當(dāng)前狀態(tài)沒(méi)有與所述待匹配信息的字符相匹配的下一狀態(tài),則立即跳轉(zhuǎn)到所述當(dāng)前狀態(tài)的失敗狀態(tài)繼續(xù)匹配;如果當(dāng)前狀態(tài)的輸出列表不為空,則說(shuō)明已經(jīng)匹配到有相應(yīng)的關(guān)鍵字,所述當(dāng)前狀態(tài)的輸出列表即為本次新增的匹配到的所有關(guān)鍵字集合。
本申請(qǐng)實(shí)施例所提供的信息匹配方法,可以將待匹配信息在預(yù)先構(gòu)建的DFA中進(jìn)行匹配,所述DFA中每個(gè)狀態(tài)的輸出列表包含所述狀態(tài)的子孫失敗狀態(tài)的輸出列表,在匹配過(guò)程中,如果當(dāng)前狀態(tài)沒(méi)有與所述待匹配信息的字符相匹配的下一狀態(tài),跳轉(zhuǎn)到所述當(dāng)前狀態(tài)的失敗狀態(tài)繼續(xù)匹配,所述待匹配信息的匹配過(guò)程只需要隨著所述DFA中各個(gè)狀態(tài)的跳轉(zhuǎn)條件一步一步地向下一狀態(tài)跳轉(zhuǎn),無(wú)需返回上一狀態(tài)以匹配其他關(guān)鍵字,從而可以確保所述待匹配信息只需要掃描一遍即可完成匹配,極大地提高了匹配效率。
實(shí)施中,所述方法可以進(jìn)一步包括:
輸出與所述待匹配信息匹配的關(guān)鍵字集合。
例如,預(yù)設(shè)的關(guān)鍵字可以為“紅顏薄命”、“燈紅酒綠”、“酒色”等,生成的DFA可以如圖2所示,其中,虛線代表某個(gè)狀態(tài)與其失敗狀態(tài)的關(guān)聯(lián)關(guān)系。
DFA初始化時(shí),只有葉子節(jié)點(diǎn)默認(rèn)獲得輸出列表,其他非葉子節(jié)點(diǎn)的輸出列表為空,即:
H的outputlist為{“紅顏薄命”};
I的outputlist為{“燈紅酒綠”};
J的outputlist為{“酒色”};
在DFA初始化完畢時(shí),可以立即構(gòu)建各狀態(tài)與其子孫失敗狀態(tài)的關(guān)聯(lián)關(guān)系,A狀態(tài)的子孫失敗狀態(tài)為E,G狀態(tài)的子孫失敗狀態(tài)為C,并分別獲得其子孫失敗狀態(tài)的輸出列表。
本申請(qǐng)實(shí)施例中雖然A、G存在子孫失敗狀態(tài),但由于它們的子孫失敗狀態(tài)的輸出列表也為空,故A、G的輸出列表依舊為空。
假設(shè)待匹配信息為“察看紅酒色澤為品酒方法之一”,從start開始,匹配“紅”,跳轉(zhuǎn)到A狀態(tài)節(jié)點(diǎn)后,沒(méi)有與下一字符相匹配的狀態(tài),所以立即跳轉(zhuǎn)到E狀態(tài),從E開始繼續(xù)匹配,下一字符與“酒”匹配,故跳轉(zhuǎn)到G狀態(tài)節(jié)點(diǎn);在跳轉(zhuǎn)到G狀態(tài)節(jié)點(diǎn)后,沒(méi)有與下一字符相匹配的狀態(tài),所以立即跳轉(zhuǎn)到C狀態(tài),從C開始繼續(xù)匹配,存在與“色”匹配的下一狀態(tài)節(jié)點(diǎn),故跳轉(zhuǎn)到J節(jié)點(diǎn),得到輸出列表為J的輸出列表,即輸出與所述待匹配信息匹配的關(guān)鍵字集合為“酒色”。
本申請(qǐng)實(shí)施例中在匹配結(jié)束后輸出與所述待匹配信息匹配的關(guān)鍵字集合,可以為后續(xù)的統(tǒng)計(jì)、分析等操作提供數(shù)據(jù)支持。
實(shí)施中,所述方法可以進(jìn)一步包括:
確定匹配的關(guān)鍵字在所述待匹配信息中的位置;
根據(jù)關(guān)鍵字所在位置、預(yù)設(shè)關(guān)鍵字權(quán)重和關(guān)鍵字的匹配次數(shù)計(jì)算所述待匹配信息的重要度。
具體實(shí)施中,在匹配時(shí)可以記錄每個(gè)匹配的關(guān)鍵字在所述待匹配信息中的位置,假設(shè)所述待匹配信息為一篇包括標(biāo)題和正文的文章,每當(dāng)匹配到一個(gè)關(guān)鍵字時(shí),則可以記錄所述關(guān)鍵字是在所述文章的標(biāo)題部分還是在所述文章的正文部分;在匹配結(jié)束后,統(tǒng)計(jì)每個(gè)關(guān)鍵字的匹配次數(shù),例如:假設(shè)標(biāo)題出現(xiàn)“酒色”1次,正文出現(xiàn)“酒色”12次,計(jì)算所述文章的重要度。
具體的,計(jì)算所述待匹配信息的重要度,可以結(jié)合預(yù)先設(shè)定的關(guān)鍵字等級(jí)/打分來(lái)實(shí)現(xiàn),例如:預(yù)先設(shè)定關(guān)鍵字“酒色”在標(biāo)題出現(xiàn)時(shí)分值為0.8、正文 出現(xiàn)時(shí)分值為0.2,那么,所述文章的重要度可以為0.8*1+0.2*12=3.2。
本申請(qǐng)實(shí)施例可以在匹配時(shí)確定匹配的關(guān)鍵字在所述待匹配信息中的位置、關(guān)鍵字的匹配次數(shù),結(jié)合預(yù)設(shè)關(guān)鍵字權(quán)重,來(lái)得到所述待匹配信息的重要度。
實(shí)施中,在所述按照待匹配信息的字符順序接收所述待匹配信息之后,將待匹配信息在有窮狀態(tài)機(jī)DFA中進(jìn)行匹配之前,所述方法可以進(jìn)一步包括:
對(duì)所述待匹配信息進(jìn)行預(yù)處理操作。
本申請(qǐng)實(shí)施例中,當(dāng)接收到所述待匹配信息時(shí),可以首先對(duì)所述待匹配信息進(jìn)行一些預(yù)處理操作,以便于后續(xù)所述待匹配信息在有窮狀態(tài)機(jī)中的匹配,提高匹配效率或精度。
實(shí)施中,所述預(yù)處理操作可以包括以下至少一種:中英文轉(zhuǎn)換、拼音漢字轉(zhuǎn)換、繁簡(jiǎn)體轉(zhuǎn)換、全角半角轉(zhuǎn)換、數(shù)字大小寫轉(zhuǎn)換、去除干擾字符。
其中,干擾字符可以為標(biāo)簽符號(hào)、html標(biāo)簽等字符。
具體實(shí)施時(shí),由于同一個(gè)詞語(yǔ)可以通過(guò)不同形式標(biāo)示出來(lái),為了提高防變種能力,本申請(qǐng)實(shí)施例可以將所述待匹配信息中的某個(gè)或全部字符進(jìn)行中英文轉(zhuǎn)換、拼音漢字轉(zhuǎn)換、繁簡(jiǎn)體轉(zhuǎn)換、全角半角轉(zhuǎn)換、數(shù)字大小寫轉(zhuǎn)換等。例如:預(yù)設(shè)關(guān)鍵字包括“酒色”,但待匹配信息中為“酒se”,此時(shí),本申請(qǐng)實(shí)施例可以將“se”轉(zhuǎn)換為“色”之后進(jìn)行匹配。
本申請(qǐng)實(shí)施例中,在接收所述待匹配信息之后,可以對(duì)所述待匹配信息進(jìn)行中英文轉(zhuǎn)換、拼音漢字轉(zhuǎn)換、繁簡(jiǎn)體轉(zhuǎn)換、全角半角轉(zhuǎn)換、數(shù)字大小寫轉(zhuǎn)換、去除干擾字符等預(yù)處理操作,從而防止關(guān)鍵字由于變種而導(dǎo)致匹配失敗的情況出現(xiàn),在一定程度上提高匹配的成功率,增強(qiáng)所述DFA防變種能力。
實(shí)施中,在所述按照待匹配信息的字符順序接收所述待匹配信息之前,所述方法可以進(jìn)一步包括:
根據(jù)預(yù)先設(shè)置的關(guān)鍵字構(gòu)建有窮狀態(tài)機(jī)DFA,所述DFA初始化時(shí)所有葉子節(jié)點(diǎn)分別獲得各自的輸出列表;
建立所述DFA中各狀態(tài)與其子孫失敗狀態(tài)的關(guān)聯(lián)關(guān)系,每個(gè)狀態(tài)獲得所述狀態(tài)的子孫失敗狀態(tài)的輸出列表。
本申請(qǐng)實(shí)施例中可以預(yù)先構(gòu)建有窮狀態(tài)機(jī),然后再將接收到的待匹配信息在所述有窮狀態(tài)機(jī)中進(jìn)行匹配。
本申請(qǐng)實(shí)施例中,有窮狀態(tài)機(jī)的數(shù)據(jù)結(jié)構(gòu)可以包括:匹配成功時(shí)所有跳轉(zhuǎn)狀態(tài)(gotoMap)、匹配失敗時(shí)下一個(gè)跳轉(zhuǎn)狀態(tài)(failureState)和關(guān)鍵字列表(outputlist)。
具體實(shí)施時(shí),failurestate構(gòu)建過(guò)程可以如下:
首先,可以創(chuàng)建一個(gè)鏈表LinkedList;
在所述DFA中自頂向下進(jìn)行搜索,搜索與其中的每個(gè)狀態(tài)包含相似信息的節(jié)點(diǎn)。
如果經(jīng)搜索,找到了與某個(gè)狀態(tài)包含相似信息的節(jié)點(diǎn),則可以將該節(jié)點(diǎn)作為所述狀態(tài)的子孫failureState加入到所述鏈表中,將DFA中每個(gè)狀態(tài)State的failureState對(duì)應(yīng)的輸出列表outputlist加入到所述狀態(tài)自己的outputlist中。
如果經(jīng)搜索,沒(méi)有找到與某個(gè)狀態(tài)包含相似信息的節(jié)點(diǎn),那么,可以默認(rèn)設(shè)置該狀態(tài)的failureState為startState,重新開始匹配狀態(tài)。
在搜索過(guò)程中,可以設(shè)置當(dāng)所述failureState為開始狀態(tài)時(shí)跳出循環(huán),從而避免搜索陷入死循環(huán)。
經(jīng)過(guò)上述過(guò)程后,每個(gè)狀態(tài)的整個(gè)子孫failureState均已加入到所述鏈表中,其中,鏈表指針越靠近頭結(jié)點(diǎn)其對(duì)應(yīng)的狀態(tài)所包含的信息越和頭結(jié)點(diǎn)接近。
failureState可以在DFA初始化時(shí)基于敏感詞之間本身的關(guān)聯(lián)性而設(shè)定,可以通過(guò)廣度優(yōu)先搜索策略完成DFA的重建。
本申請(qǐng)實(shí)施例通過(guò)在匹配無(wú)法繼續(xù)的情況下跳轉(zhuǎn)到failurestate繼續(xù)匹配,來(lái)保證整個(gè)文本掃描一遍即可完成匹配,只需要向前走、無(wú)需返回。
本申請(qǐng)實(shí)施例中的匹配過(guò)程可以如下:
首先,在開始匹配時(shí)進(jìn)行初始化操作,可以將當(dāng)前狀態(tài)curState設(shè)置為初 始狀態(tài)startState,設(shè)置變量i初始值為0;
從變量i=0開始進(jìn)行匹配過(guò)程,如果DFA構(gòu)建存在循環(huán)則執(zhí)行跳出匹配操作;如果DFA構(gòu)建不存在循環(huán),則可以從初始狀態(tài)開始匹配,直至變量i=文本長(zhǎng)度text.length。
在匹配過(guò)程中,如果當(dāng)前狀態(tài)關(guān)鍵字集合包含文本中某一字符,那么,則根據(jù)跳轉(zhuǎn)路徑跳轉(zhuǎn)到下一狀態(tài),以開始文本中下一字符的讀入。
如果當(dāng)前狀態(tài)的輸出列表不為空,則說(shuō)明本次匹配過(guò)程已經(jīng)匹配到有相應(yīng)的關(guān)鍵字,其中的輸出列表outputlist正是本輪匹配新增的匹配到的所有關(guān)鍵字集合,記錄本輪新增的關(guān)鍵字匹配信息,其中可以包括關(guān)鍵字本身和匹配位置。
本申請(qǐng)實(shí)施例在匹配時(shí),可以從初始狀態(tài)startstate進(jìn)行匹配,如果當(dāng)前狀態(tài)關(guān)鍵字集合中包含待匹配信息中某一字符,則根據(jù)跳轉(zhuǎn)路徑跳轉(zhuǎn)到下一狀態(tài),開始所述待匹配信息的下一字符的讀入,如果初始狀態(tài)一直指向所述初始狀態(tài)的失敗狀態(tài),則提示“DFA構(gòu)建存在循環(huán)”警告。
按照上述跳轉(zhuǎn)方式繼續(xù)匹配,如果到達(dá)某個(gè)狀態(tài)(讀入到所述待匹配信息中某個(gè)字符)時(shí),該狀態(tài)的輸出列表不為空,則說(shuō)明已經(jīng)匹配到相應(yīng)關(guān)鍵字,該狀態(tài)的輸出列表即為本輪匹配過(guò)程得到的所有關(guān)鍵字集合,本輪匹配結(jié)束。記錄本輪匹配得到的關(guān)鍵字以及關(guān)鍵字的所在位置。
具體實(shí)施中,可以從所述待匹配信息的當(dāng)前字符的下一字符開始,重新在DFA中startstate開始匹配。
本申請(qǐng)實(shí)施例所提供的信息匹配方法,可以首先根據(jù)預(yù)先設(shè)置的關(guān)鍵字構(gòu)建有窮狀態(tài)機(jī),所述有窮狀態(tài)機(jī)中每個(gè)狀態(tài)均獲得其子孫失敗狀態(tài)的輸出列表;然后接收待匹配信息,對(duì)待匹配信息進(jìn)行預(yù)處理操作后將所述待匹配信息從所述有窮狀態(tài)機(jī)的初始狀態(tài)開始匹配;在某個(gè)狀態(tài)匹配失敗時(shí)直接跳轉(zhuǎn)到所述狀態(tài)的子孫失敗狀態(tài)繼續(xù)匹配,無(wú)需返回所述狀態(tài)的之前狀態(tài),直至獲得存在輸出列表的狀態(tài),輸出所述輸出列表中包含的關(guān)鍵字集合,本輪匹配結(jié)束;如果此時(shí)所述待匹配信息的當(dāng)前字符之后還存在未匹配字符,則將所述待匹配 信息中當(dāng)前字符之后的字符從狀態(tài)機(jī)的初始狀態(tài)開始重新開啟新一輪的匹配。
為了便于本申請(qǐng)的實(shí)施,下面以實(shí)例進(jìn)行說(shuō)明。
實(shí)施例一、
以過(guò)濾文本中敏感詞這一應(yīng)用場(chǎng)景為例,進(jìn)行說(shuō)明如下:
敏感詞,一般是指帶有敏感政治傾向(反執(zhí)政黨傾向)、暴力傾向、不健康色彩或不文明的詞語(yǔ),也可以指一些企業(yè)根據(jù)自身實(shí)際情況,自行設(shè)定的適用于企業(yè)內(nèi)部的特殊違禁詞語(yǔ)。
假設(shè)敏感詞為:很邪惡的、很邪門、邪惡、惡、邪性;
圖3示出了本申請(qǐng)實(shí)施例中這5個(gè)敏感詞作為關(guān)鍵詞構(gòu)成的DFA初始化時(shí)的示意圖,如圖所示,所述DFA初始化時(shí)所有的葉子節(jié)點(diǎn)都可以默認(rèn)獲得outputlist,其他節(jié)點(diǎn)的outputlist均為空。
各葉子節(jié)點(diǎn)的outputlist如下所示:
C狀態(tài)的outputList為{“惡”};
E的outputList為{“邪惡”};
G的outputList為{“很邪門”};
H的outputList為{“很邪惡的”};
I的outputList為{“邪性”}。
在DFA初始化完畢時(shí),可以立即構(gòu)建各狀態(tài)的failurestate,每個(gè)狀態(tài)都可以獲取它子孫failurestate的outputlist。
圖4示出了本申請(qǐng)實(shí)施例中DFA構(gòu)建完成后的結(jié)構(gòu)示意圖,圖4中以虛線表示狀態(tài)與其failurestate的關(guān)系,如圖所示,D狀態(tài)的子孫failurestate為B,F(xiàn)狀態(tài)的子孫failurestate為E、C。
由于C狀態(tài)的outputList為{“惡”},C為E的子孫failurestate,因此,E的outputlist變?yōu)閧“邪惡”,“惡”};
由于E的outputlist變?yōu)閧“邪惡”,“惡”},E為F的子孫failurestate,因此,F(xiàn)的outputList變?yōu)閧“邪惡”,“惡”}。
雖然B為D的子孫failurestate,但由于B狀態(tài)為非葉子節(jié)點(diǎn)、outputlist為空,所以,D的outputList依然為空。
假設(shè)待匹配的文本為:
1)這玩意真的很邪惡呼?
2)這玩意真的很邪性呼?
當(dāng)對(duì)整個(gè)文本“這玩意真的很邪惡呼?”匹配時(shí),字符“很”與A狀態(tài)匹配,A狀態(tài)的下一級(jí)存在與“邪”匹配的狀態(tài)(即D狀態(tài)),故跳轉(zhuǎn)到D;D狀態(tài)的下一級(jí)存在與“惡”匹配的狀態(tài)(即F狀態(tài)),故跳轉(zhuǎn)到F狀態(tài);走到F狀態(tài),由于F狀態(tài)的下一級(jí)沒(méi)有與“呼”匹配的狀態(tài),匹配不下去,立即跳轉(zhuǎn)到E,直接獲取到E的outputList{“邪惡”,“惡”}。輸出匹配得到的關(guān)鍵字為邪惡、惡。
當(dāng)對(duì)整個(gè)文本“這玩意真的很邪性呼?”匹配時(shí),字符“很”與A狀態(tài)匹配,A狀態(tài)的下一級(jí)存在與“邪”匹配的狀態(tài)(即D狀態(tài)),故跳轉(zhuǎn)到D;走到D狀態(tài),由于D狀態(tài)的下一級(jí)沒(méi)有與“性”匹配的狀態(tài),匹配不下去,立即跳轉(zhuǎn)到B,從B開始繼續(xù)跳轉(zhuǎn)。B狀態(tài)的下一級(jí)存在與“性”匹配的狀態(tài)(即I狀態(tài)),故跳轉(zhuǎn)到I,獲得I的outputList{“邪性”}。輸出匹配得到的關(guān)鍵字集合為{“邪性”}。
具體應(yīng)用時(shí),可以預(yù)先設(shè)定“邪性”這一關(guān)鍵字位于文檔的標(biāo)題、正文的分值,或者預(yù)先設(shè)定“邪性”這一關(guān)鍵字位于文檔的正文首段、正文中段、正文結(jié)尾的不同等級(jí),從而可以確定出該文檔的重要度。
還可以進(jìn)一步將所有待匹配信息按照計(jì)算得到的重要度進(jìn)行排序,設(shè)定過(guò)濾閾值,如果超過(guò)所述預(yù)設(shè)閾值,則將該文檔進(jìn)行屏蔽。
綜上可以看出,采用本申請(qǐng)實(shí)施例所提供的信息匹配方法,對(duì)于待匹配的文本而言,匹配過(guò)程始終是往前走、不需要返回,全文掃描一次即可完成匹配。
采用本申請(qǐng)實(shí)施例所提供的信息匹配方法,測(cè)試樣本為幾千字的博客文本、敏感詞字庫(kù)有上千個(gè)時(shí),測(cè)試的平均匹配性能可以達(dá)到O(ms)級(jí)別,效率 遠(yuǎn)遠(yuǎn)高于現(xiàn)有的匹配算法。
實(shí)施例二、
以網(wǎng)絡(luò)聊天文明用語(yǔ)這一應(yīng)用場(chǎng)景為例,進(jìn)行說(shuō)明如下:
實(shí)際使用時(shí),為了確保群組成員的用語(yǔ)文明,群管理員可以預(yù)先將限制詞語(yǔ)作為關(guān)鍵字,由系統(tǒng)自動(dòng)生成如本申請(qǐng)實(shí)施例中所提供的DFA,當(dāng)有成員輸入帶有預(yù)設(shè)關(guān)鍵字的言語(yǔ)時(shí)進(jìn)行屏蔽。
圖5示出了本申請(qǐng)實(shí)施例中群組聊天限制的DFA示意圖,如圖所示,假設(shè)預(yù)設(shè)的限制成員使用的詞語(yǔ)為:二貨、缺心少肺、心眼、滾,其中F的failurestate為C。
假設(shè)群組內(nèi)成員A輸入“2貨,你是不是缺心眼?”,系統(tǒng)按照A輸入的順序接收所述待匹配信息(即“2貨,你是不是缺心眼?”),然后對(duì)這句話進(jìn)行預(yù)處理操作,將這句話中的標(biāo)點(diǎn)符號(hào)去掉,得到所述待匹配信息為“2貨你是不是缺心眼”,然后進(jìn)一步將其中的小寫數(shù)字“2”轉(zhuǎn)換為大寫數(shù)字“二”,從狀態(tài)機(jī)的start開始進(jìn)行匹配。
A狀態(tài)節(jié)點(diǎn)與待匹配信息的第一個(gè)字符(即“二”)匹配,從start跳轉(zhuǎn)到A,然后E狀態(tài)節(jié)點(diǎn)與待匹配信息的第二個(gè)字符(即“貨”)匹配,從A跳轉(zhuǎn)到E;待匹配信息的第三個(gè)字符是“你”,由于E沒(méi)有與“你”匹配的下一個(gè)狀態(tài)節(jié)點(diǎn),也沒(méi)有failurestate,故輸出E的outputlist(即“二貨”關(guān)鍵字),默認(rèn)E的failurestate為start,重新開始新一輪的匹配。
從start開始,“你”、“是”、“不”、“是”均沒(méi)有匹配的字符,所述待匹配信息中第7個(gè)字符“缺”與B狀態(tài)節(jié)點(diǎn)匹配,故從start跳轉(zhuǎn)到B;所述待匹配信息中第8個(gè)字符“心”與F狀態(tài)節(jié)點(diǎn)匹配,故從B跳轉(zhuǎn)到F;待跳轉(zhuǎn)到F之后,由于F沒(méi)有與第9個(gè)字符“眼”匹配的下一狀態(tài),但F有failurestate(即C),因此,直接從F跳轉(zhuǎn)到C繼續(xù)匹配;C的下一狀態(tài)I與所述待匹配信息的第9個(gè)字符“眼”匹配,故輸出I的outputlist(即“心眼”關(guān)鍵字)。
至此,待匹配信息完成匹配過(guò)程,最終輸出關(guān)鍵字集合為{“二貨”,“心 眼”}。
由于群組成員A輸入的語(yǔ)言包括了上述兩個(gè)關(guān)鍵字,為了確保組員之間的和諧,可以限制成員A的上述言論或進(jìn)一步發(fā)出警告。
本申請(qǐng)實(shí)施例所提供的方案,在每一輪匹配過(guò)程中只需要從start節(jié)點(diǎn)逐步向下一節(jié)點(diǎn)跳轉(zhuǎn),中途無(wú)需向前節(jié)點(diǎn)跳轉(zhuǎn)返回匹配,從而可以提高匹配效率,滿足聊天及時(shí)性檢測(cè)的需求;另外,還可以對(duì)待匹配信息進(jìn)行預(yù)處理,以提高匹配的成功率,防止由于關(guān)鍵字變種導(dǎo)致匹配失敗的情況發(fā)生。
基于同一發(fā)明構(gòu)思,本申請(qǐng)實(shí)施例中還提供了一種信息匹配裝置,由于這些設(shè)備解決問(wèn)題的原理與一種信息匹配方法相似,因此這些設(shè)備的實(shí)施可以參見方法的實(shí)施,重復(fù)之處不再贅述。
圖6示出了本申請(qǐng)實(shí)施例中信息匹配裝置的結(jié)構(gòu)示意圖,如圖所示,所述信息匹配裝置可以包括:
接收模塊601,用于按照待匹配信息的字符順序接收所述待匹配信息;
匹配模塊602,用于將待匹配信息在預(yù)先構(gòu)建的有窮狀態(tài)機(jī)DFA中進(jìn)行匹配,所述DFA由預(yù)設(shè)的關(guān)鍵字構(gòu)成,所述DFA中每個(gè)狀態(tài)的輸出列表包含所述狀態(tài)的子孫失敗狀態(tài)的輸出列表,所述狀態(tài)的子孫失敗狀態(tài)與所述狀態(tài)的字符相同;在匹配過(guò)程中,如果當(dāng)前狀態(tài)沒(méi)有與所述待匹配信息的字符相匹配的下一狀態(tài),跳轉(zhuǎn)到所述當(dāng)前狀態(tài)的失敗狀態(tài)繼續(xù)匹配。
實(shí)施中,所述裝置可以進(jìn)一步包括:
輸出模塊603,用于輸出與所述待匹配信息匹配的關(guān)鍵字集合。
實(shí)施中,所述裝置可以進(jìn)一步包括:
確定模塊604,用于確定匹配的關(guān)鍵字在所述待匹配信息中的位置;
計(jì)算模塊605,用于根據(jù)關(guān)鍵字所在位置、預(yù)設(shè)關(guān)鍵字權(quán)重和關(guān)鍵字的匹配次數(shù)計(jì)算所述待匹配信息的重要度。
實(shí)施中,所述裝置可以進(jìn)一步包括:
預(yù)處理模塊606,用于在所述按照待匹配信息的字符順序接收所述待匹配 信息之后,將待匹配信息在有窮狀態(tài)機(jī)DFA中進(jìn)行匹配之前,對(duì)所述待匹配信息進(jìn)行預(yù)處理操作。
實(shí)施中,所述預(yù)處理模塊606具體可以用于在所述按照待匹配信息的字符順序接收所述待匹配信息之后,將待匹配信息在有窮狀態(tài)機(jī)DFA中進(jìn)行匹配之前,對(duì)所述待匹配信息進(jìn)行以下至少一種操作:中英文轉(zhuǎn)換、拼音漢字轉(zhuǎn)換、繁簡(jiǎn)體轉(zhuǎn)換、全角半角轉(zhuǎn)換、數(shù)字大小寫轉(zhuǎn)換、去除干擾字符。
實(shí)施中,所述裝置可以進(jìn)一步包括:
狀態(tài)機(jī)構(gòu)建模塊607,用于在所述按照待匹配信息的字符順序接收所述待匹配信息之前,根據(jù)預(yù)先設(shè)置的關(guān)鍵字構(gòu)建有窮狀態(tài)機(jī)DFA,所述DFA初始化時(shí)所有葉子節(jié)點(diǎn)分別獲得各自的輸出列表;建立所述DFA中各狀態(tài)與其子孫失敗狀態(tài)的關(guān)聯(lián)關(guān)系,每個(gè)狀態(tài)獲得所述狀態(tài)的子孫失敗狀態(tài)的輸出列表。
為了描述的方便,以上所述裝置的各部分以功能分為各種模塊或單元分別描述。當(dāng)然,在實(shí)施本申請(qǐng)時(shí)可以把各模塊或單元的功能在同一個(gè)或多個(gè)軟件或硬件中實(shí)現(xiàn)。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本申請(qǐng)是參照根據(jù)本申請(qǐng)實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
盡管已描述了本申請(qǐng)的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本申請(qǐng)范圍的所有變更和修改。