周永福,曾 志,黃日勝
(1.河源職業技術學院電信學院,廣東 河源 517000;2.惠州學院計算機科學與工程學院,廣東 惠州 516007)
政務云網站是政府信息發布、政務公開、政民互動的重要平臺,“錯別字”現象屢見不鮮,嚴重損壞了黨和政府的形象。根據權威機構統計,目前中國網站平均存在錯別字在5 000 個以上,錯別字發生率為0.08%以上,而且隨著OCR 設備大量裝備和發稿量的激增,網站錯別字發生率將呈快速增長趨勢,因此對政府網站或者其他網站進行錯別字和敏感信息檢測是很有必要的。自2015 年中國政府網第一次普查以來,決定將敏感詞匯的考核即嚴重錯別字列入“嚴重錯誤”的指標,重點清除政務云系統網站中存在的損害政府形象、造成不良影響的敏感詞,引導各級政府宣傳部門增強責任意識,實時監測完善網站信息內容的檢查與糾錯機制。
監測系統出現后,網站信息發布前不用人工進行內容的審核,相比于人工審核,監測系統的檢測效率是人工的幾千甚至上萬倍,大大減輕了工作人員的工作量。使用者可自定義敏感詞或者錯別字,提高了監測的靈活性。在這個信息化的時代,監測系統能更好監測網站信息,從而為政府樹立更良好的形象。
隨著敏感詞匯檢測技術的進一步發展,國內外相關研究機構與組織也相繼推出了一些原型系統和產品,如中科天鞏公司研發的天機網絡網頁關鍵字監測系統、北京理工大學研發的網絡網頁關鍵字分析與預警平臺、上海交通大學信息安全工程學院的網絡媒體內容監管系統,均取得了良好的效果。到目前為止,可實現Web 服務監測、網絡爬取、多媒體檢索等的相關技術有很多,如使用Java、Python 語言,采用Contains、正則表達式實現的過濾技術,其檢索效率也不盡相同,系統的性能也略有不同。
鑒于此,本文借鑒DFA 算法快速構建搜索樹在檢索方面的優勢,探討一種輔以DFA 算法的政務云平臺敏感詞匯的動態自動監測系統,最終完成一種針對媒體糾錯與屏蔽功能的提升自動檢測效率的系統平臺。
通常文本檢測的方法有在線輸入文本過濾、提交文本進行檢測、輸入URL 檢測網站3 種。以URL 檢測為例,用戶輸入被檢測URL 網址后,Web 端將URL為參數使用GET 方法發送請求給服務端,服務端處理請求。服務端拿到URL,向指定Web 服務器發起請求,服務端返回一個HTML 文件,再調用過濾器將HTML文件過濾,敏感詞和錯別字均用*代替。若是第一次處理請求,則會先創建敏感詞搜索樹,服務端處理相應的在線文本過濾請求并向下調用過濾器接口,將敏感詞用字符“*”代替并且將結果返回給前端,具體過程如圖1 所示。

圖1 URL 敏感詞檢測流程圖
DFA 即確定有窮自動機,其算法思路是從一個狀態輸入一個字符集合能到達下一個確定的狀態。DFA原理用例如圖2 所示。如圖2(a)所示,狀態S 讀入字符a 狀態轉換為U,即S→a→U,確定的含義是狀態以及引起狀態轉換的事件都是可以確定的,不存在“意外”。有窮的含義是狀態以及事件的數量都是可以窮舉的。
文字過濾器是整個系統最核心的部分,它主要提供了過濾敏感詞錯別字,過濾HTML 標簽、SQL 語句、中文及<script>標簽的功能,添加和刪除敏感詞錯別字。以上功能均要為上層服務提供接口。最核心的功能是過濾敏感詞錯別字,它主要通過DFA 算法構建搜索樹,從而達到高效的字符串檢索效果。
DFA 算法用例分析如圖2(b)所示。“0”狀態表示開始狀態,當輸入“中國人”時候,狀態由開始“0”轉到“1”到“2”最后到達最終狀態“3”。當輸入“中華人民”時候,狀態由開始“0”到“1”到“4”到“5”達到最終狀態“6”,這也就是DFA 算法確定和有窮的含義。


圖2 DFA 原理用例圖
DFA 算法用于匹配敏感詞再合適不過。現給定DFA 搜索樹數據結構,所有的開始節點用HaspMap 數據結構保存。將詞庫中的詞全部取出,針對每一個詞采用循環,依據語句按序建立多顆搜索樹,DFA 搜索樹構建完成,即可匹配字符了。根據句子的頭結點與搜索樹進行匹配,直到子節點為Null 即算法停止。DFA 匹配與識別算法如圖3 所示。

圖3 DFA 匹配與識別算法
為實現實時自動監測,設計了基于B/S 架構的政務云敏感詞錯別字監測系統。采用目前比較流行的前后端分離的方式進行開發。Web 頁面端采用VUE+Element UⅠ進行設計,前期可以使用靜態數據查看完成效果,待服務端的接口完成再請求相應的數據即可,是整個系統最簡單的步驟。服務端的設計采用的是Spring Boot 開源框架。整個服務端又包括業務處理層、核心過濾層、數據層。業務處理層主要處理前端頁面發送過來的請求。核心過濾層是整個系統最核心的層面。核心過濾層將實現數據的過濾任務并且向業務層提供過濾的接口,核心過濾層采用的算法是DFA 算法,通過DFA 算法構建搜索樹,達到快速檢索的目的。數據層是和數據庫對接的層面,過濾層通過數據層中提供的接口將數據庫中的敏感詞取出,同時數據層也向業務層提供增刪改查的接口,數據層采用JPA 持久層框架對數據庫進行操作。具體架構如圖4所示。

圖4 軟件框架設計圖
要實現敏感詞匯的自動監測,必須關注詞庫的生成、詞匯的搜索技術、自動監測、記錄網址日志等幾大功能。為此,需進一步驗證DFA 算法的可用性與有效性,定義并實現了DFA 搜索樹結構、搜索樹構建算法、詞匯匹配算法。
用戶通過搜索欄輸入網站的URL,該URL 作為參數傳輸給服務端,服務端代替用戶請求與URL 對應的網站,網站則會返回一個HTML 文件,HTML 文件經過過濾之后,返回給Web 端的內嵌瀏覽器(內嵌瀏覽器的默認SRC 為“https://www.baidu.com/”)。瀏覽器解析過濾后的HTML 文件,敏感詞用*代替。用戶人工審核將結果進行存儲,之所以需要人工存儲是因為敏感詞具有一定的時效性,所以需要再進一步進行人工審核。運行效果如圖5 所示。

圖5 輸入URL 檢測指定網站效果圖
用戶可以根據自己的需要添加敏感詞到詞庫中,若敏感詞已存在則會提示該詞已存在,插入失敗。若所插入詞不重復則將輸入詞作為參數向服務器發送GET 請求,服務器收到請求后,調用數據庫接口,將詞存入數據庫,存儲成功后返回“succeed”并調用reinit方法重新構造DFA 搜索樹。若插入失敗則返回“faild”,如圖6 所示。

圖6 自定義敏感詞入庫
自動監測功能是本系統最主要的功能,用戶可以根據需要設置監測周期(10 s、30 s、1 min、1 h、12 h、24 h),基于Java 的定時框架完成。用戶點擊監測網站頁面再點擊開始爬取,客戶端則向服務端發送啟動爬蟲請求,服務器收到請求后,啟動爬蟲,爬蟲程序爬取新聞網站的新聞的URL,并將URL 以及當前時間存入數據庫。爬蟲程序運行結束后,用戶頁面重新加載。客戶端再次向服務端發起查詢所有監測網站的請求,服務端調用數據庫接口返回查詢監測網站的數據。系統一旦開始監測,向服務器發送請求,服務端啟動WebSocket 與客戶端建立通道連接,定時向客戶端推送監測結果(前期為了方便測試默認是10 s 監測1 次)同時生成日志將日志存儲在數據庫中。客戶端拿到監測結果,以時間線的形式展示給用戶,如圖7 所示。用戶若需要進一步審核,找到對應的URL 點擊查看,頁面跳轉到檢測指定URL 頁面,點擊搜索按鈕,網頁的具體內容則會呈現給用戶,用戶根據自己的判斷再次判定是否含有敏感信息,將結果存入數據庫。用戶可以手動停止某個頁面的檢測,只需要點擊停止監測即可。

圖7 監測結果圖
使用JConsole 可視化工具對Web 端進程進行監控,觀察程序的內存消耗情況、CPU 占用率,如圖8所示。此外還可以通過BadBoy 錄制腳本,導入JMeter對Web 進行性能測試。

圖8 系統運行內存損耗與CPU 占用率
本文詳細闡述了政務云敏感詞檢測系統的設計與實現,整個開發過程完全按照軟件開發的流程。重點探討了敏感詞檢測的DFA 算法構建DFA 搜索樹的過程。系統采用了Spring Boot+VUE 的前后端分離的方式加以實現,以及使用WebSocket 與客戶端建立連接并推送消息機制,借助Spring Boot 的Scheduling 框架完成服務器主動向客戶端發送消息實現定時檢測。考慮到政務云平臺的頁面多少不同,采用Python 實現的爬蟲技術時間與DFA 算法的時間性能也不同,總體上效率不相上下,下一步可以探討多種算法對于提升效率的影響。