楊峰, 林鈺杰, 吳麗賢
(廣東電網(wǎng)有限責(zé)任公司 佛山供電局, 佛山 528000)
隨著電網(wǎng)企業(yè)開(kāi)始大規(guī)模的技術(shù)改革,以進(jìn)一步創(chuàng)新管理模式的前提下,面對(duì)每天大量的電網(wǎng)故障設(shè)備信息,如何加強(qiáng)對(duì)電網(wǎng)故障信息的監(jiān)控,保證監(jiān)控人員能最快的找到故障信息,是當(dāng)前電網(wǎng)企業(yè)思考和解決的重要問(wèn)題。但是,目前針對(duì)電力企業(yè)故障信息的篩選,大部分還是以人工篩選為主。在少量的信息面前,人工篩選還能及時(shí)處理,但電網(wǎng)企業(yè)每天會(huì)面臨幾十萬(wàn)條,甚至上百萬(wàn)條的故障信息,則會(huì)極大的增加電力企業(yè)的工作量。因此,迫切需要一種能自動(dòng)對(duì)電力企業(yè)故障信息進(jìn)行自動(dòng)提取和識(shí)別的方法,以提高當(dāng)前故障信息識(shí)別的工作效率。本文則借助當(dāng)前的網(wǎng)絡(luò)爬蟲(chóng)技術(shù),構(gòu)建一個(gè)可用于電力企業(yè)故障信息進(jìn)行自動(dòng)識(shí)別的搜索引擎,并對(duì)該引擎進(jìn)行詳細(xì)的設(shè)計(jì)。
所謂的網(wǎng)絡(luò)爬蟲(chóng),是將互聯(lián)網(wǎng)看成是一個(gè)蜘蛛網(wǎng),Spider就是在這張蜘蛛網(wǎng)上蜘蛛,在這個(gè)網(wǎng)上爬來(lái)爬去。網(wǎng)絡(luò)爬蟲(chóng)就是通過(guò)網(wǎng)頁(yè)的鏈接,進(jìn)而找到目標(biāo)網(wǎng)頁(yè)。而在尋找過(guò)程中,通常是從某個(gè)網(wǎng)站的首頁(yè)開(kāi)始,在讀取網(wǎng)頁(yè)的URL地址后,找到某個(gè)網(wǎng)頁(yè),然后在根據(jù)這個(gè)鏈接,找到其他的網(wǎng)頁(yè)。由此這樣循環(huán),直到將網(wǎng)站所有的網(wǎng)頁(yè)抓取完。網(wǎng)絡(luò)爬蟲(chóng)實(shí)現(xiàn)的具體流程如圖1所示。
本系統(tǒng)構(gòu)建的主要目的是實(shí)現(xiàn)對(duì)電力企業(yè)監(jiān)控頁(yè)面中故障信息的抓取,直接識(shí)別出其中的故障網(wǎng)頁(yè),進(jìn)而將結(jié)果直接展示給廣大的電力監(jiān)控人員,以方便監(jiān)控人員對(duì)故障信息的處理。因此,在本文中首先利用爬蟲(chóng)技術(shù)對(duì)網(wǎng)頁(yè)信息進(jìn)行抓取,在抓取后通過(guò)KMP字符串匹配算法完成對(duì)目標(biāo)網(wǎng)頁(yè)的匹配,最后通過(guò)JSON解析技術(shù),將網(wǎng)頁(yè)中的關(guān)鍵信息解析出來(lái)。具體思路如圖2所示。
要實(shí)現(xiàn)對(duì)網(wǎng)頁(yè)信息的提取,主要包含兩個(gè)部分:一部分是靜態(tài)網(wǎng)頁(yè),另一部分是動(dòng)態(tài)網(wǎng)頁(yè)。在靜態(tài)網(wǎng)頁(yè)的抽取中,本文則主要調(diào)用Crawl類(lèi)中的Injector類(lèi)完成URL地址的注入,然后通過(guò)Crawl類(lèi)中的Generator類(lèi),完成對(duì)采集數(shù)據(jù)列表的創(chuàng)建,最后調(diào)用fetcher包中的fetcher類(lèi)來(lái)完成對(duì)靜態(tài)頁(yè)面的采集。
圖1 網(wǎng)絡(luò)爬蟲(chóng)基本原理
圖2 本系統(tǒng)抓取思路
對(duì)動(dòng)態(tài)網(wǎng)頁(yè)的抓取,是當(dāng)前網(wǎng)頁(yè)解析的難點(diǎn)。動(dòng)態(tài)頁(yè)面抓取最為關(guān)鍵的是其頁(yè)面狀態(tài)的不確定性。在Java網(wǎng)頁(yè)抓取過(guò)程中,頁(yè)面會(huì)通過(guò)Ajax異步加載服務(wù)器的數(shù)據(jù),然后通過(guò)Script來(lái)實(shí)現(xiàn)對(duì)頁(yè)面布局的修改,從而展示數(shù)據(jù)。因此,在抓取的過(guò)程中,動(dòng)態(tài)頁(yè)面往往會(huì)有多個(gè)頁(yè)面形態(tài)。爬蟲(chóng)抽取的頁(yè)面,是在第一次通過(guò)HTTP訪問(wèn)請(qǐng)求后得到的HTML數(shù)據(jù)。因此,在本文中采用兩部對(duì)網(wǎng)頁(yè)信息進(jìn)行抽取,一步是模擬頁(yè)面腳本執(zhí)行,進(jìn)而得到執(zhí)行后的靜態(tài)頁(yè)面信息;二步是在上述靜態(tài)頁(yè)面信息的基礎(chǔ)上,按照靜態(tài)頁(yè)面抽取方法對(duì)URL進(jìn)行抽取。具體實(shí)現(xiàn)則是通過(guò)HttpBase類(lèi)完成。
1) KMP算法
KMP算法是一種用戶(hù)模板與文本之間的匹配技術(shù)。KMP算法在開(kāi)展文本過(guò)程工作時(shí),其主要流程為:首先,以用戶(hù)信息需求為前提,開(kāi)展用戶(hù)需求模型的構(gòu)建工作;然后,借助文本流對(duì)用戶(hù)需求文本進(jìn)行搜索;最后,根據(jù)用戶(hù)反饋對(duì)需求模型進(jìn)行改進(jìn)。具體KMP算法信息過(guò)濾模型如圖3所示。
所謂的字符串匹配,是指在給定一組特定的字符串集合T,在主串S中找到集合T在其中的所有的出現(xiàn),然后按照相似度算法,當(dāng)相似度超過(guò)設(shè)定的中,則判定為兩者匹配。在構(gòu)建匹配規(guī)則的前提下,對(duì)字符串匹配度進(jìn)行計(jì)算,如圖4所示。
圖3 KMP算法信息過(guò)濾模型
圖4 關(guān)鍵詞匹配
假設(shè)圖4中上下紅色部分的字符串匹配度表示為dw≥α,那么我們就判定兩字符串高度匹配。其中α表示為字符串匹配度閾值。
以配網(wǎng)臺(tái)賬管理檢索為例。傳統(tǒng)的方法是在問(wèn)題數(shù)據(jù)庫(kù)中,通過(guò)《站線變戶(hù)一致性-功能位置饋線一致性-生產(chǎn)與GIS一致》表中看到全路徑“禪城供電局->城區(qū)供電所->百花變電站->701百花甲線”,然后人工逐個(gè)路徑點(diǎn)擊進(jìn)去到最后一個(gè)低壓斷路器的設(shè)備,再去查看臺(tái)賬。具體如圖5所示。
圖5 配網(wǎng)臺(tái)賬查看
在本文中,則利用java的jsoup頁(yè)面解析技術(shù)和數(shù)據(jù)抓取技術(shù)來(lái)實(shí)現(xiàn)不需要人工點(diǎn)擊直接打開(kāi)臺(tái)賬。具體步驟為:
首先,臺(tái)賬瀏覽的url為:
http://10.150.22.1/web/top/workbench/app.ac?appCode=equipment_distribution&appName=配網(wǎng)設(shè)備臺(tái)賬管理&tSession= 1539777699084# menuId= 6EEC715F334B42A2A1F2106E401CA036&url=/web/lcam/fwms/equipment/deviceNavi/distribution/tree
使用F12網(wǎng)絡(luò)分析功能,點(diǎn)擊項(xiàng)依次為禪城供電局->城區(qū)供電所->百花變電站->701百花甲線,得到每一步點(diǎn)擊的請(qǐng)求標(biāo)頭和響應(yīng)正文。
其次,使用java的“HttpBase”包獲取url地址,公式為:http://10.150.22.1/web/lcam/fwms/equipment/deviceNavi/distribution/tree/api/tree-child/"+"030610000000641"+"/6/0"
第三,利用KMP算法進(jìn)行字符串匹配“701百花甲線”,使用jsoup解析提取出[{"title": "701百花甲線",”key": "357000000033201"中的357000000033201
解析結(jié)果:
http://10.150.22.1/web/lcam/fwms/equipment/deviceNavi/distribution/feeder/"+"357000000033201"
要實(shí)現(xiàn)上述引擎的設(shè)計(jì),實(shí)現(xiàn)對(duì)電力企業(yè)故障信息的提取,首先要對(duì)數(shù)據(jù)進(jìn)行集成。對(duì)此在本文中,結(jié)合廣東省營(yíng)銷(xiāo)系統(tǒng)、省電力營(yíng)銷(xiāo)系統(tǒng)的數(shù)據(jù),采用ETL處理方法對(duì)系統(tǒng)數(shù)據(jù)進(jìn)行構(gòu)建。該框架如圖6所示。
圖6 數(shù)據(jù)源集成ETL框架
該數(shù)據(jù)源框架充分考慮電力企業(yè)中產(chǎn)生的海量數(shù)據(jù),通過(guò)Hadoop框架對(duì)電力數(shù)據(jù)進(jìn)行集成處理。
通過(guò)圖6看出,在該ETL數(shù)據(jù)集成中,主要是通過(guò)服務(wù)器端完成。在通過(guò)對(duì)不同網(wǎng)頁(yè)信息的抽取后,通過(guò)統(tǒng)一數(shù)據(jù)源信息管理模塊,實(shí)現(xiàn)對(duì)抽取數(shù)據(jù)的管理。
在完成系統(tǒng)的引擎搭建和數(shù)據(jù)搭建之后,還需要一個(gè)交互界面,才能實(shí)現(xiàn)對(duì)電力故障信息的搜索。對(duì)此,本文對(duì)用戶(hù)界面的開(kāi)發(fā)環(huán)境進(jìn)行搭建。具體采用Eclipse3.1+My SQL5.0+Tomcat5.5 的開(kāi)發(fā)思路。其中,Eclipse開(kāi)發(fā)工具具有良好的開(kāi)放性,并且支持多種插件的安裝和工具包的導(dǎo)入。是 Java語(yǔ)言開(kāi)發(fā)很好的選擇平臺(tái)。后面構(gòu)建 web 應(yīng)用程序界面時(shí)需安裝Tomcat Plugin V3 插件。
此外,本系統(tǒng)的開(kāi)發(fā)還需要有開(kāi)源蜘蛛程序包 Heritrix1.12.1和全文檢索工具包 Lucene2.0 的支持。
通過(guò)在檢索首頁(yè)的關(guān)鍵詞檢索,得到檢索后的URL,然后點(diǎn)擊,直接進(jìn)入到經(jīng)過(guò)匹配檢索后的結(jié)果界面。以上述應(yīng)用的檢索結(jié)果為例,具體如圖7所示。
圖7 檢索搜索結(jié)果
通過(guò)上述的設(shè)計(jì)可以看出,本文采用的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)對(duì)網(wǎng)頁(yè)信息的抓取,具有準(zhǔn)確性高,同時(shí)抓取定位效率高的特點(diǎn)。而本文在設(shè)計(jì)中,最大的亮點(diǎn)在于在匹配過(guò)程中,對(duì)傳統(tǒng)的KMP算法進(jìn)行了改進(jìn),以此大大提高了字符串匹配的準(zhǔn)確度。同時(shí)引入ETL抽取工具,建立有效數(shù)據(jù)庫(kù),進(jìn)而為電力故障信息的快速提取提供了新的參考。