周永福,曾 志,黃日勝
(1.河源職業(yè)技術(shù)學(xué)院電信學(xué)院,廣東 河源 517000;2.惠州學(xué)院計算機科學(xué)與工程學(xué)院,廣東 惠州 516007)
政務(wù)云網(wǎng)站是政府信息發(fā)布、政務(wù)公開、政民互動的重要平臺,“錯別字”現(xiàn)象屢見不鮮,嚴重損壞了黨和政府的形象。根據(jù)權(quán)威機構(gòu)統(tǒng)計,目前中國網(wǎng)站平均存在錯別字在5 000 個以上,錯別字發(fā)生率為0.08%以上,而且隨著OCR 設(shè)備大量裝備和發(fā)稿量的激增,網(wǎng)站錯別字發(fā)生率將呈快速增長趨勢,因此對政府網(wǎng)站或者其他網(wǎng)站進行錯別字和敏感信息檢測是很有必要的。自2015 年中國政府網(wǎng)第一次普查以來,決定將敏感詞匯的考核即嚴重錯別字列入“嚴重錯誤”的指標,重點清除政務(wù)云系統(tǒng)網(wǎng)站中存在的損害政府形象、造成不良影響的敏感詞,引導(dǎo)各級政府宣傳部門增強責任意識,實時監(jiān)測完善網(wǎng)站信息內(nèi)容的檢查與糾錯機制。
監(jiān)測系統(tǒng)出現(xiàn)后,網(wǎng)站信息發(fā)布前不用人工進行內(nèi)容的審核,相比于人工審核,監(jiān)測系統(tǒng)的檢測效率是人工的幾千甚至上萬倍,大大減輕了工作人員的工作量。使用者可自定義敏感詞或者錯別字,提高了監(jiān)測的靈活性。在這個信息化的時代,監(jiān)測系統(tǒng)能更好監(jiān)測網(wǎng)站信息,從而為政府樹立更良好的形象。
隨著敏感詞匯檢測技術(shù)的進一步發(fā)展,國內(nèi)外相關(guān)研究機構(gòu)與組織也相繼推出了一些原型系統(tǒng)和產(chǎn)品,如中科天鞏公司研發(fā)的天機網(wǎng)絡(luò)網(wǎng)頁關(guān)鍵字監(jiān)測系統(tǒng)、北京理工大學(xué)研發(fā)的網(wǎng)絡(luò)網(wǎng)頁關(guān)鍵字分析與預(yù)警平臺、上海交通大學(xué)信息安全工程學(xué)院的網(wǎng)絡(luò)媒體內(nèi)容監(jiān)管系統(tǒng),均取得了良好的效果。到目前為止,可實現(xiàn)Web 服務(wù)監(jiān)測、網(wǎng)絡(luò)爬取、多媒體檢索等的相關(guān)技術(shù)有很多,如使用Java、Python 語言,采用Contains、正則表達式實現(xiàn)的過濾技術(shù),其檢索效率也不盡相同,系統(tǒng)的性能也略有不同。
鑒于此,本文借鑒DFA 算法快速構(gòu)建搜索樹在檢索方面的優(yōu)勢,探討一種輔以DFA 算法的政務(wù)云平臺敏感詞匯的動態(tài)自動監(jiān)測系統(tǒng),最終完成一種針對媒體糾錯與屏蔽功能的提升自動檢測效率的系統(tǒng)平臺。
通常文本檢測的方法有在線輸入文本過濾、提交文本進行檢測、輸入URL 檢測網(wǎng)站3 種。以URL 檢測為例,用戶輸入被檢測URL 網(wǎng)址后,Web 端將URL為參數(shù)使用GET 方法發(fā)送請求給服務(wù)端,服務(wù)端處理請求。服務(wù)端拿到URL,向指定Web 服務(wù)器發(fā)起請求,服務(wù)端返回一個HTML 文件,再調(diào)用過濾器將HTML文件過濾,敏感詞和錯別字均用*代替。若是第一次處理請求,則會先創(chuàng)建敏感詞搜索樹,服務(wù)端處理相應(yīng)的在線文本過濾請求并向下調(diào)用過濾器接口,將敏感詞用字符“*”代替并且將結(jié)果返回給前端,具體過程如圖1 所示。
圖1 URL 敏感詞檢測流程圖
DFA 即確定有窮自動機,其算法思路是從一個狀態(tài)輸入一個字符集合能到達下一個確定的狀態(tài)。DFA原理用例如圖2 所示。如圖2(a)所示,狀態(tài)S 讀入字符a 狀態(tài)轉(zhuǎn)換為U,即S→a→U,確定的含義是狀態(tài)以及引起狀態(tài)轉(zhuǎn)換的事件都是可以確定的,不存在“意外”。有窮的含義是狀態(tài)以及事件的數(shù)量都是可以窮舉的。
文字過濾器是整個系統(tǒng)最核心的部分,它主要提供了過濾敏感詞錯別字,過濾HTML 標簽、SQL 語句、中文及<script>標簽的功能,添加和刪除敏感詞錯別字。以上功能均要為上層服務(wù)提供接口。最核心的功能是過濾敏感詞錯別字,它主要通過DFA 算法構(gòu)建搜索樹,從而達到高效的字符串檢索效果。
DFA 算法用例分析如圖2(b)所示?!?”狀態(tài)表示開始狀態(tài),當輸入“中國人”時候,狀態(tài)由開始“0”轉(zhuǎn)到“1”到“2”最后到達最終狀態(tài)“3”。當輸入“中華人民”時候,狀態(tài)由開始“0”到“1”到“4”到“5”達到最終狀態(tài)“6”,這也就是DFA 算法確定和有窮的含義。
圖2 DFA 原理用例圖
DFA 算法用于匹配敏感詞再合適不過?,F(xiàn)給定DFA 搜索樹數(shù)據(jù)結(jié)構(gòu),所有的開始節(jié)點用HaspMap 數(shù)據(jù)結(jié)構(gòu)保存。將詞庫中的詞全部取出,針對每一個詞采用循環(huán),依據(jù)語句按序建立多顆搜索樹,DFA 搜索樹構(gòu)建完成,即可匹配字符了。根據(jù)句子的頭結(jié)點與搜索樹進行匹配,直到子節(jié)點為Null 即算法停止。DFA 匹配與識別算法如圖3 所示。
圖3 DFA 匹配與識別算法
為實現(xiàn)實時自動監(jiān)測,設(shè)計了基于B/S 架構(gòu)的政務(wù)云敏感詞錯別字監(jiān)測系統(tǒng)。采用目前比較流行的前后端分離的方式進行開發(fā)。Web 頁面端采用VUE+Element UⅠ進行設(shè)計,前期可以使用靜態(tài)數(shù)據(jù)查看完成效果,待服務(wù)端的接口完成再請求相應(yīng)的數(shù)據(jù)即可,是整個系統(tǒng)最簡單的步驟。服務(wù)端的設(shè)計采用的是Spring Boot 開源框架。整個服務(wù)端又包括業(yè)務(wù)處理層、核心過濾層、數(shù)據(jù)層。業(yè)務(wù)處理層主要處理前端頁面發(fā)送過來的請求。核心過濾層是整個系統(tǒng)最核心的層面。核心過濾層將實現(xiàn)數(shù)據(jù)的過濾任務(wù)并且向業(yè)務(wù)層提供過濾的接口,核心過濾層采用的算法是DFA 算法,通過DFA 算法構(gòu)建搜索樹,達到快速檢索的目的。數(shù)據(jù)層是和數(shù)據(jù)庫對接的層面,過濾層通過數(shù)據(jù)層中提供的接口將數(shù)據(jù)庫中的敏感詞取出,同時數(shù)據(jù)層也向業(yè)務(wù)層提供增刪改查的接口,數(shù)據(jù)層采用JPA 持久層框架對數(shù)據(jù)庫進行操作。具體架構(gòu)如圖4所示。
圖4 軟件框架設(shè)計圖
要實現(xiàn)敏感詞匯的自動監(jiān)測,必須關(guān)注詞庫的生成、詞匯的搜索技術(shù)、自動監(jiān)測、記錄網(wǎng)址日志等幾大功能。為此,需進一步驗證DFA 算法的可用性與有效性,定義并實現(xiàn)了DFA 搜索樹結(jié)構(gòu)、搜索樹構(gòu)建算法、詞匯匹配算法。
用戶通過搜索欄輸入網(wǎng)站的URL,該URL 作為參數(shù)傳輸給服務(wù)端,服務(wù)端代替用戶請求與URL 對應(yīng)的網(wǎng)站,網(wǎng)站則會返回一個HTML 文件,HTML 文件經(jīng)過過濾之后,返回給Web 端的內(nèi)嵌瀏覽器(內(nèi)嵌瀏覽器的默認SRC 為“https://www.baidu.com/”)。瀏覽器解析過濾后的HTML 文件,敏感詞用*代替。用戶人工審核將結(jié)果進行存儲,之所以需要人工存儲是因為敏感詞具有一定的時效性,所以需要再進一步進行人工審核。運行效果如圖5 所示。
圖5 輸入URL 檢測指定網(wǎng)站效果圖
用戶可以根據(jù)自己的需要添加敏感詞到詞庫中,若敏感詞已存在則會提示該詞已存在,插入失敗。若所插入詞不重復(fù)則將輸入詞作為參數(shù)向服務(wù)器發(fā)送GET 請求,服務(wù)器收到請求后,調(diào)用數(shù)據(jù)庫接口,將詞存入數(shù)據(jù)庫,存儲成功后返回“succeed”并調(diào)用reinit方法重新構(gòu)造DFA 搜索樹。若插入失敗則返回“faild”,如圖6 所示。
圖6 自定義敏感詞入庫
自動監(jiān)測功能是本系統(tǒng)最主要的功能,用戶可以根據(jù)需要設(shè)置監(jiān)測周期(10 s、30 s、1 min、1 h、12 h、24 h),基于Java 的定時框架完成。用戶點擊監(jiān)測網(wǎng)站頁面再點擊開始爬取,客戶端則向服務(wù)端發(fā)送啟動爬蟲請求,服務(wù)器收到請求后,啟動爬蟲,爬蟲程序爬取新聞網(wǎng)站的新聞的URL,并將URL 以及當前時間存入數(shù)據(jù)庫。爬蟲程序運行結(jié)束后,用戶頁面重新加載??蛻舳嗽俅蜗蚍?wù)端發(fā)起查詢所有監(jiān)測網(wǎng)站的請求,服務(wù)端調(diào)用數(shù)據(jù)庫接口返回查詢監(jiān)測網(wǎng)站的數(shù)據(jù)。系統(tǒng)一旦開始監(jiān)測,向服務(wù)器發(fā)送請求,服務(wù)端啟動WebSocket 與客戶端建立通道連接,定時向客戶端推送監(jiān)測結(jié)果(前期為了方便測試默認是10 s 監(jiān)測1 次)同時生成日志將日志存儲在數(shù)據(jù)庫中??蛻舳四玫奖O(jiān)測結(jié)果,以時間線的形式展示給用戶,如圖7 所示。用戶若需要進一步審核,找到對應(yīng)的URL 點擊查看,頁面跳轉(zhuǎn)到檢測指定URL 頁面,點擊搜索按鈕,網(wǎng)頁的具體內(nèi)容則會呈現(xiàn)給用戶,用戶根據(jù)自己的判斷再次判定是否含有敏感信息,將結(jié)果存入數(shù)據(jù)庫。用戶可以手動停止某個頁面的檢測,只需要點擊停止監(jiān)測即可。
圖7 監(jiān)測結(jié)果圖
使用JConsole 可視化工具對Web 端進程進行監(jiān)控,觀察程序的內(nèi)存消耗情況、CPU 占用率,如圖8所示。此外還可以通過BadBoy 錄制腳本,導(dǎo)入JMeter對Web 進行性能測試。
圖8 系統(tǒng)運行內(nèi)存損耗與CPU 占用率
本文詳細闡述了政務(wù)云敏感詞檢測系統(tǒng)的設(shè)計與實現(xiàn),整個開發(fā)過程完全按照軟件開發(fā)的流程。重點探討了敏感詞檢測的DFA 算法構(gòu)建DFA 搜索樹的過程。系統(tǒng)采用了Spring Boot+VUE 的前后端分離的方式加以實現(xiàn),以及使用WebSocket 與客戶端建立連接并推送消息機制,借助Spring Boot 的Scheduling 框架完成服務(wù)器主動向客戶端發(fā)送消息實現(xiàn)定時檢測??紤]到政務(wù)云平臺的頁面多少不同,采用Python 實現(xiàn)的爬蟲技術(shù)時間與DFA 算法的時間性能也不同,總體上效率不相上下,下一步可以探討多種算法對于提升效率的影響。