一種基于關(guān)鍵詞字典樹檢索的中文ac自動機工作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息技術(shù)領(lǐng)域,特別地,涉及一種基于關(guān)鍵詞字典樹檢索的中文AC自動機工作方法。
【背景技術(shù)】
[0002]AC自動機(Aho-Corasick automaton)是一種著名的多模匹配方法,用于在文章當(dāng)中檢索多個關(guān)鍵詞出現(xiàn)的次數(shù)。傳統(tǒng)的AC自動機只能識別26個英文字母,現(xiàn)有技術(shù)則將傳統(tǒng)的AC自動機工作原理套用到了中文文章中,但這種方案下中文AC自動機工作的空間復(fù)雜度過高,缺乏實際應(yīng)用價值。
[0003]針對現(xiàn)有技術(shù)中中文AC自動機工作的空間復(fù)雜度過高的問題,目前尚未有有效的解決方案。
【發(fā)明內(nèi)容】
[0004]針對現(xiàn)有技術(shù)中系統(tǒng)結(jié)構(gòu)識別與優(yōu)化方法抑或主觀片面、計算能力差,抑或耗時費力、仿真精度低的問題,本發(fā)明的目的在于提出一種基于關(guān)鍵詞字典樹檢索的中文AC自動機工作方法,能夠用降低中文AC自動機工作時需要的空間復(fù)雜度,壓縮了中文AC自動機的工作占用空間。
[0005]基于上述目的,本發(fā)明提供的技術(shù)方案如下:
[0006]根據(jù)本發(fā)明的一個方面,提供了一種基于關(guān)鍵詞字典樹檢索的中文AC自動機工作方法,包括:
[0007]獲取所有關(guān)鍵詞,并根據(jù)所有關(guān)鍵詞建立關(guān)鍵詞字典樹;
[0008]在關(guān)鍵詞字典樹中建立并初始化檢索指針;
[0009]獲取待檢測文章,將文章編碼,建立并初始化文章指針;
[0010]判斷當(dāng)前文章指針與當(dāng)前檢索指針的任一子節(jié)點是否匹配并由此移動文章指針與檢索指針;
[0011]判斷當(dāng)前檢索指針的匹配子節(jié)點是否為終止節(jié)點并由此移動文章指針與檢索指針;
[0012]使文章指針掃過整篇文章,統(tǒng)計所有關(guān)鍵詞的出現(xiàn)次數(shù)。
[0013]其中:
[0014]將文章編碼,為將文章中的所有漢字按照指定的漢字編碼方式以數(shù)字組合的形式表不;
[0015]在關(guān)鍵詞字典樹中初始化檢索指針,為在關(guān)鍵詞字典樹中將檢索指針置為指向虛根;
[0016]初始化文章指針,為將文章指針置為指向文件頭第一字符編碼。
[0017]并且,數(shù)字組合為十六進制數(shù)字的數(shù)字組合;指定的漢字編碼方式為以下之一:GB2312、GBK、BIG5、UTF-8。
[0018]同時,判斷當(dāng)前文章指針與當(dāng)前檢索指針的任一子節(jié)點是否匹配并由此移動文章指針與檢索指針包括:
[0019]獲取當(dāng)前文章指針指向的編碼數(shù)字;
[0020]獲取當(dāng)前檢索指針指向節(jié)點的所有子節(jié)點;
[0021]將當(dāng)前文章指針指向的編碼數(shù)字在當(dāng)前檢索指針指向節(jié)點的所有子節(jié)點中進行比對,判斷是否存在一個子節(jié)點上的數(shù)字與當(dāng)前文章指針指向的編碼數(shù)字相匹配;若是,則繼續(xù)判斷當(dāng)前檢索指針的匹配子節(jié)點是否為終止節(jié)點;若否,則將檢索指針置為當(dāng)前檢索指針指向節(jié)點的失敗指針指向的節(jié)點。
[0022]并且,若不存在一個子節(jié)點上的數(shù)字與當(dāng)前文章指針指向的編碼數(shù)字相匹配,且當(dāng)前檢索指針指向虛根或當(dāng)前檢索指針指向節(jié)點的失敗指針指向虛根,則將文章指針后移一位,并重新判斷當(dāng)前文章指針與當(dāng)前檢索指針的任一子節(jié)點是否匹配。
[0023]并且,判斷當(dāng)前檢索指針的匹配子節(jié)點是否為終止節(jié)點并由此移動文章指針與檢索指針包括:
[0024]在關(guān)鍵詞字典樹中獲取匹配子節(jié)點的節(jié)點信息;
[0025]根據(jù)匹配子節(jié)點的節(jié)點信息判斷匹配子節(jié)點是否為終止節(jié)點;若是,則從關(guān)鍵詞字典樹中解碼出該終止節(jié)點所代表的關(guān)鍵詞,并將該關(guān)鍵詞被檢索到的次數(shù)累加1,同時將檢索指針重置為指向虛根、文章指針后移一位;若否,則將檢索指針置為指向匹配子節(jié)點、文章指針后移一位;
[0026]重新判斷當(dāng)前文章指針與當(dāng)前檢索指針的任一子節(jié)點是否匹配。
[0027]并且,使文章指針掃過整篇文章并統(tǒng)計所有關(guān)鍵詞的出現(xiàn)次數(shù),為將文章指針在上述操作中移動到文章末尾,統(tǒng)計每個關(guān)鍵詞被檢索到的次數(shù),并將每個關(guān)鍵詞與其在文章中被檢索到的次數(shù)信息輸出。
[0028]從上面所述可以看出,本發(fā)明提供的技術(shù)方案通過使用檢索指針在字典樹的節(jié)點之間移動來將關(guān)鍵詞與文章進行比對的技術(shù)方案,有效地利用了字典樹中具有相同前綴的關(guān)鍵詞排布在相鄰位置的特性,使得節(jié)點對查詢其子節(jié)點所在位置的信息量被大幅度壓縮,避免使用占用大量空間復(fù)雜度的哈希表,因此降低了中文AC自動機工作時需要的空間復(fù)雜度,壓縮了中文AC自動機的工作占用空間。
【附圖說明】
[0029]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0030]圖1為根據(jù)本發(fā)明實施例的一種基于關(guān)鍵詞字典樹檢索的中文AC自動機工作方法的流程圖;
[0031]圖2為根據(jù)本發(fā)明實施例的一種基于關(guān)鍵詞字典樹檢索的中文AC自動機工作方法中,字典樹各節(jié)點生成過程示意圖;
[0032]圖3為根據(jù)本發(fā)明實施例的一種基于關(guān)鍵詞字典樹檢索的中文AC自動機工作方法中,字典樹各節(jié)點的前綴指針生成過程示意圖;
[0033]圖4為根據(jù)本發(fā)明實施例的一種基于關(guān)鍵詞字典樹檢索的中文AC自動機工作方法中,字典樹各節(jié)點的失敗指針生成過程示意圖。
【具體實施方式】
[0034]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進一步進行清楚、完整、詳細(xì)地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0035]根據(jù)本發(fā)明的實施例,提供了一種基于關(guān)鍵詞字典樹檢索的中文AC自動機工作方法。
[0036]如圖1所示,根據(jù)本發(fā)明的實施例提供了一種基于關(guān)鍵詞字典樹檢索的中文AC自動機工作方法包括:
[0037]步驟SlOl,獲取所有關(guān)鍵詞,并根據(jù)所有關(guān)鍵詞建立關(guān)鍵詞字典樹;
[0038]步驟S103,在關(guān)鍵詞字典樹中建立并初始化檢索指針;
[0039]步驟S105,獲取待檢測文章,將文章編碼,建立并初始化文章指針;
[0040]步驟S107,判斷當(dāng)前文章指針與當(dāng)前檢索指針的任一子節(jié)點是否匹配并由此移動文章指針與檢索指針;
[0041]步驟S109,判斷當(dāng)前檢索指針的匹配子節(jié)點是否為終止節(jié)點并由此移動文章指針與檢索指針;
[0042]步驟S111,使文章指針掃過整篇文章,統(tǒng)計所有關(guān)鍵詞的出現(xiàn)次數(shù)。
[0043]其中:
[0044]將文章編碼,為將文章中的所有漢字按照指定的漢字編碼方式以數(shù)字組合的形式表不;
[0045]在關(guān)鍵詞字典樹中初始化檢索指針,為在關(guān)鍵詞字典樹中將檢索指針置為指向虛根;
[0046]初始化文章指針,為將文章指針置為指向文件頭第一字符編碼。
[0047]并且,數(shù)字組合為十六進制數(shù)字的數(shù)字組合;指定的漢字編碼方式為以下之一:GB2312、GBK、BIG5、UTF-8。
[0048]同時,判斷當(dāng)前文章指針與當(dāng)前檢索指針的任一子節(jié)點是否匹配并由此移動文章指針與檢索指針包括:
[0049]獲取當(dāng)前文章指針指向的編碼數(shù)字;
[0050]獲取當(dāng)前檢索指針指向節(jié)點的所有子節(jié)點;
[0051]將當(dāng)前文章指針指向的編碼數(shù)字在當(dāng)前檢索指針指向節(jié)點的所有子節(jié)點中進行比對,判斷是否存在一個子節(jié)點上的數(shù)字與當(dāng)前文章指針指向的編碼數(shù)字相匹配;若是,則繼續(xù)判斷當(dāng)前檢索指針的匹配子節(jié)點是否為終止節(jié)點;若否,則將檢索指針置為當(dāng)前檢索指針指向節(jié)點的失敗指針指向的節(jié)點。
[0052]并且,若不存在一個子節(jié)點上的數(shù)字與當(dāng)前文章指針指向的編碼數(shù)字相匹配,且當(dāng)前檢索指針指向虛根或當(dāng)前檢索指針指向節(jié)點的失敗指針指向虛根,則將文章指針后移一位,并重新判斷當(dāng)前文章指針與當(dāng)前檢索指針的任一子節(jié)點是否匹配。
[0053]并且,判斷當(dāng)前檢索指針的匹配子節(jié)點是否為終止節(jié)點并由此移動文章指針與檢索指針包括:
[0054]在關(guān)鍵詞字典樹中獲取匹配子節(jié)點的節(jié)點信息;
[0055]根據(jù)匹配子節(jié)點的節(jié)點信息判斷匹配子節(jié)點是否為終止節(jié)點;若是,則從關(guān)鍵詞字典樹中解碼出該終止節(jié)點所代表的關(guān)鍵詞,并將該關(guān)鍵詞被檢索到的次數(shù)累加1,同時將檢索指針重置為指向虛根、文章指針后移一位;若否,則將檢索指針置為指向匹配子節(jié)點、文章指針后移一位;
[0056]重新判斷當(dāng)前文章指針與當(dāng)前檢索指針的任一子節(jié)點是否匹配。
[0057]并且,使文章指針掃過整篇文章并統(tǒng)計所有關(guān)鍵詞的出現(xiàn)次數(shù),為將文章指針在上述操作中移動到文章末尾,統(tǒng)計每個關(guān)鍵詞被檢索到的次數(shù),并將每個關(guān)鍵詞與其在文章中被檢索到的次數(shù)信息輸出。
[0058]下面根據(jù)具體實施例進一步闡述本發(fā)明的技術(shù)方案。
[0059]字典樹又稱單詞查找樹,Trie樹,是一種樹形結(jié)構(gòu),是一種哈希樹的變種,它將所有的模式串組織在一