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