用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法
【專利摘要】本發(fā)明提供一種用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法,包括如下步驟:1)自動機(jī)建立:a用Trie樹結(jié)構(gòu)保存所有關(guān)鍵詞,其中樹節(jié)點(diǎn)視為狀態(tài),樹邊視為狀態(tài)跳轉(zhuǎn);b為每個(gè)節(jié)點(diǎn)的跳轉(zhuǎn)信息建立哈希表;c為每個(gè)詞尾狀態(tài)添加詞尾標(biāo)記和整詞信息;d為每個(gè)節(jié)點(diǎn)添加fail跳轉(zhuǎn);e結(jié)束;2)自動機(jī)運(yùn)行:a逐字讀取文本,根據(jù)當(dāng)前狀態(tài)的跳轉(zhuǎn)信息和讀入字符進(jìn)行跳轉(zhuǎn)操作;b每當(dāng)跳轉(zhuǎn)到詞尾狀態(tài)時(shí),輸出該狀態(tài)內(nèi)保存的整詞信息;c結(jié)束。本發(fā)明用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法在保證正確性的前提下,利用自動機(jī)方法大大提高了海量文本信息發(fā)現(xiàn)的效率,利用哈希表的方法減少了自動機(jī)跳轉(zhuǎn)時(shí)查找跳轉(zhuǎn)表的耗時(shí),全程自動化,用戶體驗(yàn)友好。
【專利說明】用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及多模式匹配領(lǐng)域,是一種用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法。
【背景技術(shù)】
[0002]隨著大數(shù)據(jù)時(shí)代的來臨,我們的現(xiàn)實(shí)生活中經(jīng)常會產(chǎn)生諸如微博、短信、QQ聊天記錄等信息,這些信息有很多共同特點(diǎn),如內(nèi)容少——微博最多140字,短信80字,數(shù)量大——僅2012年全國短信發(fā)送量已達(dá)8973.1億條(數(shù)據(jù)來自工信部)。如何處理這種多文本信息是分析、處理大數(shù)據(jù)的重點(diǎn)之一。
[0003]多關(guān)鍵詞匹配是指通過嗅探指定的文本是否含有關(guān)鍵詞,判定此文本信息是否通過檢測。多關(guān)鍵詞過匹配術(shù)如今也有了廣泛應(yīng)用,最知名的應(yīng)用之一就是我國的GFW系統(tǒng)。它的主要原理是將包含關(guān)鍵詞匯的網(wǎng)站在路由器層就屏蔽掉。雖然這個(gè)系統(tǒng)采用的技術(shù)是多關(guān)鍵詞過濾,但是多關(guān)鍵詞過濾與多關(guān)鍵詞匹配的原理非常類似,都是通過嗅探關(guān)鍵詞的方法。可以說,它們是同一個(gè)方法的正反兩個(gè)應(yīng)用。
[0004]在本系統(tǒng)中,我們需要對海量的短信信息進(jìn)行分析。其中,我們需要找出每個(gè)短信是否含有一些敏感單位名稱,依此確定信息接收人的一些社會屬性,在這個(gè)需求中,我們需要用到多文本多關(guān)鍵詞過濾技術(shù)。
【發(fā)明內(nèi)容】
[0005]本發(fā)明解決的問題是海量短文本信息發(fā)現(xiàn),主要關(guān)注其效率,準(zhǔn)確性,自動性為解決這個(gè)問題,本發(fā)明用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法的步驟如下:
[0006]I)自動機(jī)建立:
[0007]a用Trie樹結(jié)構(gòu)保存所有關(guān)鍵詞,其中樹節(jié)點(diǎn)視為狀態(tài),樹邊視為狀態(tài)跳轉(zhuǎn);
[0008]b為每個(gè)節(jié)點(diǎn)的跳轉(zhuǎn)信息建立哈希表;c為每個(gè)詞尾狀態(tài)添加詞尾標(biāo)記和整詞信息;
[0009]c為每個(gè)詞尾狀態(tài)添加詞尾標(biāo)記和整詞信息;
[0010]d為每個(gè)節(jié)點(diǎn)添加fail跳轉(zhuǎn);
[0011]e 結(jié)束;
[0012]2)自動機(jī)運(yùn)行:
[0013]a逐字讀取文本,根據(jù)當(dāng)前狀態(tài)的跳轉(zhuǎn)信息和讀入字符進(jìn)行跳轉(zhuǎn)操作;
[0014]b每當(dāng)跳轉(zhuǎn)到詞尾狀態(tài)時(shí),輸出該狀態(tài)內(nèi)保存的整詞信息;
[0015]c 結(jié)束。
[0016]本發(fā)明中,步驟l)_a中所說的Trie樹是一種樹形結(jié)構(gòu),它的優(yōu)點(diǎn)是利用字符串的公共前綴來減少查詢時(shí)間。此步完成的Trie樹結(jié)構(gòu)是自動機(jī)的框架。
[0017]本發(fā)明中,步驟l)_b中為每個(gè)節(jié)點(diǎn)的跳轉(zhuǎn)信息建立哈希表的目的是將查詢轉(zhuǎn)換為計(jì)算,減少查詢跳轉(zhuǎn)表的開銷。此處哈希表采用動態(tài)哈希表方法,初始容量為16,加載因子固定為0.75。當(dāng)哈希表中的條目大于當(dāng)前容量乘以加載因子時(shí),會自動執(zhí)行容量翻倍操作,并執(zhí)行rehash操作,將表中的條目重新添加進(jìn)新表中。
[0018]本發(fā)明中,步驟l)-c中詞尾標(biāo)記用于在自動機(jī)運(yùn)行時(shí)識別當(dāng)前狀態(tài)是否已經(jīng)識別出關(guān)鍵詞。添加整詞信息的目的是將已識別的關(guān)鍵詞輸出。
[0019]本發(fā)明中,步驟l)_d中fail跳轉(zhuǎn)是指當(dāng)輸入字符在當(dāng)前跳轉(zhuǎn)表中查不到時(shí),默認(rèn)的下一跳的狀態(tài)。某一狀態(tài)的fail跳轉(zhuǎn)指向的是當(dāng)前狀態(tài)的輸入字符的能夠?qū)崿F(xiàn)跳轉(zhuǎn)的最長包含后綴,其中狀態(tài)的輸入字符指的是從初始狀態(tài)轉(zhuǎn)移到此狀態(tài)需要輸入的最短字符串,包含后綴指的是字符串除自身以外的所有后綴。
[0020]本發(fā)明中,步驟2)_a中跳轉(zhuǎn)操作需要注意的是,fail跳轉(zhuǎn)是立即執(zhí)行的,即當(dāng)狀態(tài)A輸入某字符X時(shí)發(fā)生fail跳轉(zhuǎn)到狀態(tài)B時(shí),X字符需要繼續(xù)輸入給狀態(tài)B,依此類推,直到最終狀態(tài)是初始狀態(tài),或存在X字符的跳轉(zhuǎn)。
[0021]本發(fā)明的有益效果是:本發(fā)明用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法在保證正確性的前提下,利用自動機(jī)方法大大提高了海量文本信息發(fā)現(xiàn)的效率,利用哈希表的方法減少了自動機(jī)跳轉(zhuǎn)時(shí)查找跳轉(zhuǎn)表的耗時(shí),全程自動化,用戶體驗(yàn)友好。
【專利附圖】
【附圖說明】
[0022]圖1是本發(fā)明用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法的流程圖。
【具體實(shí)施方式】
[0023]為了更了解本發(fā)明的技術(shù)內(nèi)容,特舉具體實(shí)施例并配合所附圖式說明如下。
[0024]圖1是本發(fā)明實(shí)施例的用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法的流程圖。用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法包括兩個(gè)階段:自動機(jī)建立階段和自動機(jī)執(zhí)行階段。其具體步驟如下:
[0025]步驟I用Trie樹結(jié)構(gòu)保存所有關(guān)鍵詞,Trie樹的建立過程如下:
[0026]I)新建根節(jié)點(diǎn),即初始狀態(tài),并令當(dāng)前狀態(tài)為此初始狀態(tài)。
[0027]2)取得要添加的一個(gè)關(guān)鍵詞的第一個(gè)字符,若當(dāng)前狀態(tài)無此字符的跳轉(zhuǎn),則新建一個(gè)狀態(tài),并使當(dāng)前狀態(tài)此字符的跳轉(zhuǎn)指向它,令當(dāng)前狀態(tài)為此新建狀態(tài);若當(dāng)前狀態(tài)有此字符的跳轉(zhuǎn),則跳轉(zhuǎn),并令當(dāng)前狀態(tài)為此跳轉(zhuǎn)狀態(tài)。
[0028]3)循環(huán)步驟2)直到關(guān)鍵詞詞尾。
[0029]4)循環(huán)步驟2) 3),加入所有關(guān)鍵詞。
[0030]步驟2為每個(gè)節(jié)點(diǎn)的跳轉(zhuǎn)信息建立哈希表。此處使用的哈希算法為31進(jìn)制算法,即對于長度為n+1的字符串,其哈希值為:
[0031]此處哈希表采用動態(tài)哈希表方法,初始容量為16,加載因子固定為0.75。當(dāng)哈希表中的條目大于當(dāng)前容量乘以加載因子時(shí),會自動執(zhí)行容量翻倍操作,并執(zhí)行rehash操作,將表中的條目重新添加進(jìn)新表中。
[0032]步驟3為每個(gè)詞尾節(jié)點(diǎn)添加詞尾標(biāo)記和整詞信息。詞尾標(biāo)記用于在自動機(jī)運(yùn)行時(shí)識別當(dāng)前狀態(tài)是否已經(jīng)識別出關(guān)鍵詞。添加整詞信息的目的是將已識別的關(guān)鍵詞輸出。
[0033]步驟4為每個(gè)節(jié)點(diǎn)添加fail跳轉(zhuǎn)。fail跳轉(zhuǎn)是指當(dāng)輸入字符在當(dāng)前跳轉(zhuǎn)表中查不到時(shí),默認(rèn)的下一跳的狀態(tài)。某一狀態(tài)的fail跳轉(zhuǎn)應(yīng)該指向當(dāng)前狀態(tài)的輸入字符的能夠?qū)崿F(xiàn)跳轉(zhuǎn)的最長包含后綴,其中狀態(tài)的輸入字符指的是從初始狀態(tài)轉(zhuǎn)移到此狀態(tài)需要輸入的最短字符串,包含后綴指的是字符串除自身以外的所有后綴。為某個(gè)節(jié)點(diǎn)添加fail跳轉(zhuǎn)的步驟如下:
[0034]I)獲得此狀態(tài)的輸入字符
[0035]2)對于,依次查找所有包含后綴、直到、,當(dāng)發(fā)現(xiàn)某個(gè)狀態(tài)X的輸入字符時(shí),停止查找,并令此狀態(tài)的fail跳轉(zhuǎn)為狀態(tài)X。
[0036]步驟5從初始狀態(tài)開始,逐字讀取文本,按照跳轉(zhuǎn)表進(jìn)行狀態(tài)跳轉(zhuǎn)。其中,fail跳轉(zhuǎn)是需要立即執(zhí)行的,即當(dāng)狀態(tài)A輸入某字符X發(fā)生fail跳轉(zhuǎn)到狀態(tài)B時(shí),X字符需要繼續(xù)輸入給狀態(tài)B,如果B仍沒有X字符的跳轉(zhuǎn)。仍需要fail跳轉(zhuǎn)到下一個(gè)狀態(tài),依此類推,直到fail跳轉(zhuǎn)到初始狀態(tài),或fail跳轉(zhuǎn)到存在X字符跳轉(zhuǎn)的狀態(tài)。
[0037]步驟6每當(dāng)跳轉(zhuǎn)到有詞尾標(biāo)記的狀態(tài)時(shí),輸出該狀態(tài)內(nèi)保存的整詞信息。
[0038]綜上所述,本發(fā)明用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法在保證正確性的前提下,利用自動機(jī)方法大大提高了海量文本信息發(fā)現(xiàn)的效率,利用哈希表的方法減少了自動機(jī)跳轉(zhuǎn)時(shí)查找跳轉(zhuǎn)表的耗時(shí),全程自動化,用戶體驗(yàn)友好。
[0039]雖然本發(fā)明已以較佳實(shí)施例揭露如上,然其并非用以限定本發(fā)明。本發(fā)明所屬【技術(shù)領(lǐng)域】中具有通常知識者,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可作各種的更動與潤飾。因此,本發(fā)明的保護(hù)范圍當(dāng)視權(quán)利要求書所界定者為準(zhǔn)。
【權(quán)利要求】
1.一種用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法,其特征在于,包括如下步驟: 1)自動機(jī)建立: a用Trie樹結(jié)構(gòu)保存所有關(guān)鍵詞,其中樹節(jié)點(diǎn)視為狀態(tài),樹邊視為狀態(tài)跳轉(zhuǎn); b為每個(gè)節(jié)點(diǎn)的跳轉(zhuǎn)信息建立哈希表;c為每個(gè)詞尾狀態(tài)添加詞尾標(biāo)記和整詞信息; c為每個(gè)詞尾狀態(tài)添加詞尾標(biāo)記和整詞信息; d為每個(gè)節(jié)點(diǎn)添加fail跳轉(zhuǎn); e結(jié)束; 2)自動機(jī)運(yùn)行: a逐字讀取文本,根據(jù)當(dāng)前狀態(tài)的跳轉(zhuǎn)信息和讀入字符進(jìn)行跳轉(zhuǎn)操作; b每當(dāng)跳轉(zhuǎn)到詞尾狀態(tài)時(shí),輸出該狀態(tài)內(nèi)保存的整詞信息; c結(jié)束。
2.根據(jù)權(quán)利要求1所述的用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法,其特征在于,其中步驟l)_a中所說的Trie樹是一種樹形結(jié)構(gòu),它的優(yōu)點(diǎn)是利用字符串的公共前綴來減少查詢時(shí)間。此步完成的Trie樹結(jié)構(gòu)是自動機(jī)的框架。
3.根據(jù)權(quán)利要求1所述的用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法,其特征在于,其中步驟l)_b中為每個(gè)節(jié)點(diǎn)的跳轉(zhuǎn)信息建立哈希表的目的是將查詢轉(zhuǎn)換為計(jì)算,減少查詢跳轉(zhuǎn)表的開銷。此處哈希表采用動態(tài)哈希表方法,初始容量為16,加載因子固定為0.75。當(dāng)哈希表中的條目大于當(dāng)前容量乘以加載因子時(shí),會自動執(zhí)行容量翻倍操作,并執(zhí)行rehash操作,將表中的條目重新添加進(jìn)新表中。
4.根據(jù)權(quán)利要求1所述的用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法,其特征在于,其中步驟l)-c中詞尾標(biāo)記用于在自動機(jī)運(yùn)行時(shí)識別當(dāng)前狀態(tài)是否已經(jīng)識別出關(guān)鍵詞。添加整詞信息的目的是將已識別的關(guān)鍵詞輸出。
5.根據(jù)權(quán)利要求1所述的用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法,其特征在于,其中步驟I) -d中fail跳轉(zhuǎn)是指當(dāng)輸入字符在當(dāng)前跳轉(zhuǎn)表中查不到時(shí),默認(rèn)的下一跳的狀態(tài)。某一狀態(tài)的fail跳轉(zhuǎn)指向的是當(dāng)前狀態(tài)的輸入字符的能夠?qū)崿F(xiàn)跳轉(zhuǎn)的最長包含后綴,其中狀態(tài)的輸入字符指的是從初始狀態(tài)轉(zhuǎn)移到此狀態(tài)需要輸入的最短字符串,包含后綴指的是字符串除自身以外的所有后綴。
6.根據(jù)權(quán)利要求1所述的用于海量短文本信息發(fā)現(xiàn)的自動機(jī)方法,其特征在于,其中步驟2)-a中跳轉(zhuǎn)操作需要注意的是,fail跳轉(zhuǎn)是立即執(zhí)行的,即當(dāng)狀態(tài)A輸入某字符X時(shí)發(fā)生fail跳轉(zhuǎn)到狀態(tài)B時(shí),X字符需要繼續(xù)輸入給狀態(tài)B,依此類推,直到最終狀態(tài)是初始狀態(tài),或存在X字符的跳轉(zhuǎn)。
【文檔編號】G06F17/30GK104077358SQ201410243718
【公開日】2014年10月1日 申請日期:2014年6月3日 優(yōu)先權(quán)日:2014年6月3日
【發(fā)明者】王崇駿, 楊駿元, 彭岳, 楊駿, 謝俊元 申請人:南京大學(xué)