鄭宇
(國(guó)網(wǎng)福建省電力有限公司 電力科學(xué)研究院, 福州 350007)
隨著互聯(lián)網(wǎng)信息技術(shù)的快速發(fā)展,通過網(wǎng)絡(luò)獲取科技信息以其快速便捷的優(yōu)勢(shì)成為信息獲取的重要途徑之一,對(duì)科技信息管理系統(tǒng)的開發(fā)與實(shí)現(xiàn)成為研究的熱點(diǎn),能夠?qū)崿F(xiàn)科技信息的自動(dòng)跟蹤管理,通過對(duì)互聯(lián)網(wǎng)科技信息的跟蹤與獲取,并據(jù)此完成分析與處理,便于其掌握科技信息的焦點(diǎn)最新動(dòng)向,完成網(wǎng)絡(luò)信息簡(jiǎn)報(bào)的自動(dòng)生成,滿足用戶的信息獲取需求。
系統(tǒng)主要由信息管理、信息采集、數(shù)據(jù)庫(kù)等服務(wù)器構(gòu)成,相互間的通信均通過互聯(lián)網(wǎng)實(shí)現(xiàn),系統(tǒng)主要面向兩類用戶:普通用戶和系統(tǒng)管理員(按照操作權(quán)限可細(xì)分為操作員和管理員),普通用戶只有查看和下載相應(yīng)文檔的權(quán)限,管理員登錄信息管理服務(wù)器可對(duì)采集任務(wù)進(jìn)行創(chuàng)建,并將相關(guān)配置數(shù)據(jù)存入數(shù)據(jù)庫(kù),信息采集服務(wù)器負(fù)責(zé)讀取采集任務(wù)相關(guān)配置數(shù)據(jù)后對(duì)信息進(jìn)行采集和分析,再將分析結(jié)果存儲(chǔ)至數(shù)據(jù)庫(kù)中;信息管理服務(wù)器讀取采集任務(wù)結(jié)果后完成相關(guān)統(tǒng)計(jì)和展示,系統(tǒng)總體拓?fù)浣Y(jié)構(gòu)如圖1所示[1]。
圖1 總體拓?fù)浣Y(jié)構(gòu)圖
系統(tǒng)功能主要?jiǎng)澐譃樾畔⒉杉⑿畔⑻幚?、信息分析、信息服?wù)四個(gè)子系統(tǒng),具體如圖2所示。
(1) 信息采集子系統(tǒng)
系統(tǒng)抓取收集指定范圍的網(wǎng)站內(nèi)容(定向采集),支持動(dòng)態(tài)內(nèi)容分頁(yè)抓取(JSP、ASP、PHP、Word、PDF等),抓取信息后單獨(dú)保存為文件方式,或存儲(chǔ)于數(shù)據(jù)庫(kù)的字段中,采集過程中可采集部分欄目、版塊內(nèi)容也可整站采集。在主流的搜索引擎中通過關(guān)鍵詞自動(dòng)進(jìn)行數(shù)據(jù)搜索,根據(jù)實(shí)際需要對(duì)采集的數(shù)量、狀態(tài)及開始/結(jié)束采集數(shù)據(jù)進(jìn)行設(shè)置,具備添加、修改、刪除、查找站點(diǎn)資源數(shù)據(jù)等管理操作;對(duì)要采集的主題進(jìn)行自動(dòng)識(shí)別后據(jù)此完成采集任務(wù)的跟蹤,可從多角度對(duì)該
圖2 系統(tǒng)功能劃分
主題進(jìn)行后續(xù)跟蹤[2]。
(2) 信息處理子系統(tǒng)
該子系統(tǒng)的功能在于:對(duì)不同網(wǎng)站站點(diǎn)(包括報(bào)紙類、行業(yè)用戶信息類)進(jìn)行開發(fā)時(shí)可設(shè)置優(yōu)先級(jí),信息分類和管理可通過專題的設(shè)置完成(支持多級(jí)分類),根據(jù)需要對(duì)數(shù)據(jù)進(jìn)行管理和維護(hù)(包括整理、編輯、刪除、新增等);按照媒體來(lái)源、版面、時(shí)間等分類整理目標(biāo)媒體所收集到的信息,分類統(tǒng)計(jì)后生成平面媒體信息目錄;采集到的具體信息內(nèi)容以平面媒體報(bào)告集萃的形式展現(xiàn),可按天、月自動(dòng)生成目錄或集萃;系統(tǒng)同時(shí)支持手動(dòng)錄入后生成簡(jiǎn)報(bào)的功能,己生成的信息簡(jiǎn)報(bào)可進(jìn)行編輯;為簡(jiǎn)化采集配置過程,對(duì)可配置的采集模板(包括平面媒體目錄和報(bào)告集萃)進(jìn)行開發(fā),據(jù)此實(shí)現(xiàn)地址中指定內(nèi)容的獲??;對(duì)于需要采集的站點(diǎn)數(shù)據(jù)可進(jìn)行導(dǎo)入導(dǎo)出操作。
(3) 信息分析子系統(tǒng)
該子系統(tǒng)的功能在于:分析采集到的信息,系統(tǒng)自動(dòng)識(shí)別出主題后進(jìn)行多角度信息跟蹤具體通過聚類、熱詞(包括熱點(diǎn)技術(shù)、話題、事件、詞匯等)等分析方法,提取所需內(nèi)容或預(yù)判其發(fā)展趨勢(shì);在此基礎(chǔ)上對(duì)所采集內(nèi)容按照采集時(shí)間、站點(diǎn)分布等進(jìn)行統(tǒng)計(jì),以圖表等形式展示給用戶。
(4) 信息服務(wù)子系統(tǒng)
該子系統(tǒng)的功能在于:管理系統(tǒng)的賬戶及權(quán)限,設(shè)置具體的信息采集熱詞;進(jìn)行專題(用戶設(shè)定)采集監(jiān)測(cè)及信息詳情顯示;收藏關(guān)注信息以便用戶后續(xù)使用。
整體業(yè)務(wù)功能的運(yùn)作流程如圖3所示。
圖3 信息分析過程
分別對(duì)專題采集和網(wǎng)站采集進(jìn)行更加深入的配置說(shuō)明(根據(jù)專題、詞頻出結(jié)果),包括網(wǎng)站(針對(duì)指定的科技網(wǎng)站)、專題(針對(duì)網(wǎng)站具體的欄目板塊,需提前設(shè)置)、和全網(wǎng)(針對(duì)主流的搜索引擎,如百度、搜狗等搜索引擎)三種采集方式,需指定采集的數(shù)據(jù)類型,全網(wǎng)采集時(shí)需指定具體關(guān)鍵詞[3]。
系統(tǒng)的使用效果取決于信息采集的效率,為提高系統(tǒng)信息采集的效率,本系統(tǒng)采用多線程方式完成總體信息采集框架的設(shè)計(jì),不同操作由各線程執(zhí)行(可并發(fā)執(zhí)行),提高服務(wù)器對(duì)系統(tǒng)資源的操作效率,系統(tǒng)采集時(shí)支持六類線程及多個(gè)隊(duì)列數(shù)據(jù)結(jié)構(gòu),同一隊(duì)列只能由一個(gè)線程訪問通過各隊(duì)列由多個(gè)線程加鎖的方式實(shí)現(xiàn),系統(tǒng)采集框架總體結(jié)構(gòu)如圖4所示。
以具體的數(shù)據(jù)庫(kù)支撐環(huán)境為依據(jù),根據(jù)系統(tǒng)的實(shí)際需求(包括業(yè)務(wù)、功能、用戶等需求),實(shí)現(xiàn)最優(yōu)數(shù)據(jù)庫(kù)模式的構(gòu)建,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)的有效存儲(chǔ)和管理工作,考慮到系統(tǒng)涉及的數(shù)據(jù)表較多,均衡負(fù)載的實(shí)現(xiàn)需采用多表分離方式,因此選用了安全高效、易操作的MySQL數(shù)據(jù)庫(kù)解決數(shù)據(jù)存儲(chǔ)及檢索問題,以便后續(xù)對(duì)信息進(jìn)行分析統(tǒng)計(jì)及管理。數(shù)據(jù)庫(kù)字段的建立與完善可使查詢數(shù)據(jù)的準(zhǔn)確性和全面性得以有效提升。
圖4 采集框架結(jié)構(gòu)圖
采集任務(wù)信息表占據(jù)核心地位,數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)如圖5所示。
圖5 數(shù)據(jù)庫(kù)實(shí)體一關(guān)系圖
對(duì)所涉及的比較關(guān)鍵的數(shù)據(jù)庫(kù)表進(jìn)行關(guān)聯(lián)設(shè)計(jì),并依據(jù)系統(tǒng)功能結(jié)構(gòu)設(shè)計(jì)說(shuō)明了數(shù)據(jù)庫(kù)表間的關(guān)系,展示了各數(shù)據(jù)庫(kù)表的關(guān)鍵字段及表間的主外鍵關(guān)系。
本文完成了數(shù)據(jù)庫(kù)中各表的內(nèi)部結(jié)構(gòu)設(shè)計(jì),對(duì)字段名稱、數(shù)據(jù)類型等要素進(jìn)行了定義,由于涉及到的數(shù)據(jù)表較多,只對(duì)較為重要的表進(jìn)行闡述,其中用戶權(quán)限信息表如表1所示,采集任務(wù)信息表如表2所示,網(wǎng)站配置信息表如表3所示,任務(wù)收藏信息表如表4所示,采集結(jié)果信息表如表5所示,用戶信息表如表6所示[4]。
系統(tǒng)主要面向兩類用戶:普通用戶和系統(tǒng)管理員(按照操作權(quán)限可細(xì)分為操作員和管理員),普通用戶只有查看和下載相應(yīng)文檔的權(quán)限;系統(tǒng)管理員權(quán)限最高,可對(duì)各模塊內(nèi)容進(jìn)行管理(包括增、刪、改、查等操作),完成采集時(shí)間權(quán)限的設(shè)置。操作員對(duì)用戶管理模塊沒有操作權(quán)限,可對(duì)自己在其他模塊中建立的內(nèi)容進(jìn)行增、刪、改查等操作。根據(jù)系統(tǒng)需求在功能實(shí)現(xiàn)過程中,需先確定系統(tǒng)中各模塊的功能,對(duì)這些功能點(diǎn)完成排序標(biāo)號(hào)操作,并組合成對(duì)應(yīng)的三種不同用戶類型后存儲(chǔ)于數(shù)據(jù)庫(kù)的user right表中,降低功能點(diǎn)的耦合度,在此基礎(chǔ)上將指定的用戶類型同新建用戶進(jìn)行關(guān)聯(lián)匹配,實(shí)現(xiàn)了權(quán)限的可配置化管理,同時(shí)提高了系統(tǒng)的擴(kuò)展性。
表1 用戶權(quán)限信息表
表2 采集任務(wù)信息表
表3 網(wǎng)站配置信息表
表4 任務(wù)收藏信息表
表5 采集結(jié)果信息表
表6 用戶信息表
(1) 采集網(wǎng)站的解析配置
對(duì)所需采集的各網(wǎng)站進(jìn)行分析,在此基礎(chǔ)上完成信息的采集規(guī)則和處理流程的定義,對(duì)各科技網(wǎng)站在RootDir/spiders/目錄下,完成相應(yīng).pY格式配置文件的自定義,然后對(duì)相應(yīng)網(wǎng)站的處理代碼進(jìn)行編寫,采集網(wǎng)站各板塊URL配置的核心代碼如下[5]。
1. def parse(self, response):
2. '從給定的開始url爬取網(wǎng)頁(yè),并根據(jù)取得信息確定爬取指定模塊'
3. global n_url, keywords, taskId, webType, last_keyword, now_keyword
4. switch_urls={}
5. switch_urls["1"]="http://www.bjtest.org.cn/News/List.aspx?cid=01"
6. ……
請(qǐng)求網(wǎng)頁(yè)下載功能實(shí)現(xiàn)的核心代碼如下。
1. def parse_content(self, response):
2. '獲取網(wǎng)頁(yè)內(nèi)容,并調(diào)用相應(yīng)Pipeline'
3. global n_url, keywords, taskId, webType, last_keyword, now_keyword
4. item=ItemLoader(item=BJTESTItem(), response=response)
5. item.add_value('url', str(response, url))
6. item.add_xpath('title_time','//td[@class="GCItemTitle"]')
7. item.add_xpath('text', '//table/tr/td/div')
8. item.add_xpath('hit_time','//table/tr[5]/td/span/text()')
9. ……
(2) 采集任務(wù)讀取
讀取時(shí)需先連接數(shù)據(jù)庫(kù),然后編寫SQL語(yǔ)句,部分代碼如下:
1. def main():
2. ……
3. conn=MySQLdb.connect(host=setting.HOST, user=setting.USER, passwd=setting.PASSWD, db=setting.DB, charset='utf8')
4. cur=conn.cursor()
5. cur.execute("SELECT col_id, col_method, col_keyword, col_websitenameNo, col_useornot, col_webtasktype FROM tbl_task where col_useornot=1")
6. data=cur.fetchall()
7. ……
(3) 采集信息
解析讀取采集任務(wù)中的采集方式、關(guān)鍵字、時(shí)間間隔、網(wǎng)站模塊ID等,并據(jù)此開啟采集線程執(zhí)行采集任務(wù),核心代碼如下:
class Mythread(threading.Thread):
def_init_(self, name, Id, d, threadingSum):
super(Mythread, self)._init_()
self.name=name
self.Id=Id
self.d=d
self.threadingSum=threadingSum
def run(self):
with self.threadingSum:
conn=MySQLdb.connect(host=setting.HOST, user=setting.USER, passwd=setting.PASSWD, db=setting.DB, charset='utf8') #連接數(shù)據(jù)庫(kù)
cur=conn.cursor()
……
cmd="python"+setting.Hot_words+"muti.py"+str(self.d[0]).strip()
a=subprocess.Popen(cmd, shell=True)
a.wait()
end_info="TaskId:"+str(self.d[0])+"end……"
time.sleep(s)
在提取成功采集到的結(jié)果中的主要內(nèi)容時(shí),以處理html網(wǎng)頁(yè)為例,先根據(jù)文章位置完成正則表達(dá)式的編寫,將結(jié)構(gòu)化標(biāo)簽過濾掉后,對(duì)文章的主要文本信息進(jìn)行提取。在RootDir/spiders/pipelines.py文件中編寫代碼如下:
1. class SDTJPTPipeline(object):
2. def process_item(self, item, spider, t_url, n_url, keywords, taskId, webType):
3. #處理網(wǎng)頁(yè)正文
4. pattern2=re.compile(r'', re.S)
6. pattern4=re.compile(r'', re.S)
7. text=re.sub(pattern2, "", item['text'][0])
8. text=re.sub(pattern1, "", text)
9. text=item['title'][0].strip()+r' '+text
10. path=settings.SDTJPT_path+"/"+id
11. if os.path.exists(path):
12. pass
13. else:
14. os.makedirs(path)
(4) 信息分析
在spider/HotWords中將文本中的無(wú)用符號(hào)過濾掉后,先完成系統(tǒng)的通用詞庫(kù)的構(gòu)建,具體通過Dir/spider/words.txt文件的創(chuàng)建實(shí)現(xiàn),然后通過Python中jieba.analyse.set_ words方法的調(diào)用實(shí)現(xiàn)文本中的通用詞的去除,然后再使用TextRank算法提取文本中的關(guān)鍵詞,文章標(biāo)題已存放在數(shù)據(jù)庫(kù)中(信息采集階段),文章正文已存放在磁盤上(信息處理階段),對(duì)相關(guān)的文章信息(包括標(biāo)題和正文)進(jìn)行依次讀取,并運(yùn)用TextRank算法對(duì)其進(jìn)行關(guān)鍵詞分析,直到分析完所有同采集任務(wù)相關(guān)的文章后,提取五個(gè)關(guān)鍵詞(熱度最高)作為關(guān)鍵詞[6]。
為檢測(cè)本文所設(shè)計(jì)的基于Web的科技信息管理系統(tǒng)的實(shí)用性和穩(wěn)定性,采用黑盒測(cè)試法對(duì)信息采集、信息處理、信息分析、信息服務(wù)子系統(tǒng)的主要功能進(jìn)行測(cè)試,測(cè)試結(jié)果表明系統(tǒng)管理員可實(shí)現(xiàn)對(duì)系統(tǒng)的有效管理,可根據(jù)實(shí)際用戶需求對(duì)信息采集的主題、時(shí)間間隔、目標(biāo)站點(diǎn)進(jìn)行設(shè)置,可從多角度對(duì)指定主題進(jìn)行后續(xù)跟蹤,并且系統(tǒng)能夠有效實(shí)現(xiàn)信息采集、信息讀取、信息分析等功能,最終以平面媒體報(bào)告集萃的方式展現(xiàn)給用戶,系統(tǒng)具備良好的穩(wěn)定性和可拓展性,具備較高的實(shí)用價(jià)值,為科技信息管理的系統(tǒng)化提供參考。
為有效滿足科技信息管理的用戶需求,本文主要研究了科技信息管理系統(tǒng)的開發(fā)路徑,結(jié)合HTTP協(xié)議及WEB開發(fā)技術(shù),完成了系統(tǒng)總體架構(gòu)的設(shè)計(jì),并對(duì)系統(tǒng)的總體功能進(jìn)行劃分和詳細(xì)的闡述,在系統(tǒng)整體拓?fù)浣Y(jié)構(gòu)的基礎(chǔ)上,采用MYSQL數(shù)據(jù)庫(kù)完成了系統(tǒng)的信息采集、分析及管理過程的設(shè)計(jì),使用Python、Javascript、HTML程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn)主要模塊的功能,設(shè)計(jì)了系統(tǒng)高性能的采集框架。