王龍霄,李 健,沈麗民
(戰(zhàn)略支援部隊(duì)信息工程大學(xué)洛陽校區(qū),洛陽 471003)
隨著互聯(lián)網(wǎng)媒體的發(fā)展,新聞行業(yè)邁向互聯(lián)網(wǎng)時(shí)代,人們可以在新聞網(wǎng)站閱覽熱點(diǎn)信息,新聞網(wǎng)站也是信息獲取的重要途經(jīng)。新聞信息具有時(shí)效性的特點(diǎn),而且伴隨著大數(shù)據(jù)時(shí)代的到來,新聞信息變得越來越多,越來越復(fù)雜,用人力將所有信息逐一分析不僅是對(duì)人力資源的巨大浪費(fèi),而且實(shí)施的過程困難重重。許多信息由于來不及整理、匯總、分析,使得信息的時(shí)效性價(jià)值大打折扣。因此,亟需設(shè)計(jì)一套新聞分析系統(tǒng)對(duì)時(shí)事新聞進(jìn)行獲取和分析。
針對(duì)上述提到的問題,本文建立了基于網(wǎng)絡(luò)爬蟲技術(shù)和自然語言處理技術(shù)的新聞獲取分析系統(tǒng)。系統(tǒng)使用網(wǎng)絡(luò)爬蟲技術(shù)抓取新聞網(wǎng)站的全部信息,將信息存儲(chǔ)在數(shù)據(jù)庫中,并在存儲(chǔ)的過程中對(duì)信息進(jìn)行語音分析與翻譯,提取關(guān)鍵詞、關(guān)鍵句等,使用者可使用系統(tǒng)內(nèi)檢索工具對(duì)所需信息進(jìn)行模糊搜索,以方便給予使用者掌握社會(huì)、國際熱點(diǎn)及輿情動(dòng)向。
以美國有線電視新聞網(wǎng)(CNN)為例設(shè)計(jì)新聞獲取分析系統(tǒng)。系統(tǒng)分為3 個(gè)模塊,爬蟲模塊、自然語言處理模塊和系統(tǒng)可視化與交互模塊。系統(tǒng)總體架構(gòu)如圖1所示。
圖1 整體架構(gòu)
1.1.1 URL管理功能
URL 管理的設(shè)計(jì)思路是將URL 存儲(chǔ)在兩個(gè).txt文本中,其中一個(gè)文本內(nèi)儲(chǔ)存待獲取的新聞信息URL,另一個(gè)文本內(nèi)儲(chǔ)存已爬取新聞信息的URL。利用.txt 文本方便增加與刪除的特點(diǎn),實(shí)現(xiàn)全部新聞信息URL 的動(dòng)態(tài)管理,也為后續(xù)增量式爬蟲設(shè)計(jì)提供方便。除使用.txt文本外,也可使用csv文件對(duì)URL進(jìn)行管理??梢詫⑽磁廊〉腢RL 標(biāo)記為0,已爬取的URL 標(biāo)記為1。兩種方法在均不涉及數(shù)據(jù)庫的方式下實(shí)現(xiàn)了URL管理功能,避免了系統(tǒng)過于復(fù)雜。
1.1.2 網(wǎng)頁下載與解析
首先給定新聞網(wǎng)站(美國有線電視新聞網(wǎng))URL,并對(duì)該網(wǎng)站架構(gòu)進(jìn)行分析。網(wǎng)絡(luò)爬蟲總體分為三次爬取。第一次爬取為爬取網(wǎng)站各個(gè)欄目的URL。目前,Python 主要的網(wǎng)頁數(shù)據(jù)抓取方法有正則表達(dá)式匹配方法、BeautifulSoup 方法、LXML 方法[1]。網(wǎng)頁下載過程使用Python 第三方庫request 完成,網(wǎng)頁解析過程使用BeautifulSoup 第三方庫或LXML 第三方庫進(jìn)行網(wǎng)頁的結(jié)構(gòu)化解析。經(jīng)過比較發(fā)現(xiàn),使用LXML 第三方庫比使用BeautifulSoup 第三方庫效率高。效率對(duì)比如表1所示。經(jīng)過下載解析后,得到各個(gè)欄目的URL,將URL 存放在列表之中。第二次爬取為按照獲取的各個(gè)欄目的URL 獲取新聞詳情頁的URL。
表1 效率對(duì)比
在第二次爬取過程中,新聞詳情頁URL是利用ajax技術(shù)或js技術(shù)動(dòng)態(tài)請(qǐng)求,傳統(tǒng)的爬取方式無法爬取新聞詳情頁的URL??梢允褂脙煞N方式進(jìn)行爬取。第一種為分析JS源碼,完成爬取。首先在網(wǎng)頁控制臺(tái)中選擇XHR異步加載數(shù)據(jù),抓取網(wǎng)絡(luò)數(shù)據(jù)包,得到Json文件的URL地址,查詢參數(shù),解析js 源碼完成爬取。第二種為使用selenium 第三方庫進(jìn)行爬取。下載與瀏覽器匹配的webdriver驅(qū)動(dòng),計(jì)算機(jī)自動(dòng)模擬瀏覽器進(jìn)行網(wǎng)頁的下載與解析。將得到的新聞詳情頁URL置于URL管理庫中,以方便后續(xù)的爬取。
第三次爬取過程為爬取新聞詳細(xì)的內(nèi)容,包括題目、作者、時(shí)間、內(nèi)容。系統(tǒng)使用threading 第三方庫進(jìn)行多線程的爬取,最大程度地節(jié)約時(shí)間??梢越⒕€程池,將爬取函數(shù)置于線程池中,既節(jié)約時(shí)間,也節(jié)省計(jì)算機(jī)資源。爬取的新聞信息寫入.txt文本文件中,文件名稱為新聞標(biāo)題,并在寫入文件的同時(shí)進(jìn)行自然語言處理模塊的工作。系統(tǒng)爬取新聞信息部分結(jié)果如圖2所示。
圖2 爬取部分結(jié)果
在使用基于廣度的通用爬蟲獲取新聞網(wǎng)站全部的新聞信息后,針對(duì)網(wǎng)站新發(fā)布的新聞信息,系統(tǒng)增添了增量式爬蟲設(shè)計(jì),以便在后續(xù)系統(tǒng)維護(hù)和信息更新中盡可能地爬取新的新聞信息。增量式爬蟲的關(guān)鍵在于新聞詳情頁URL的去重,可使用以hash 函數(shù)為基礎(chǔ)的布隆過濾器進(jìn)行URL的去重操作。
布隆過濾器由元素位圖與k個(gè)hash 函數(shù)構(gòu)成,當(dāng)新的元素至于位圖中,k個(gè)hash函數(shù)將此元素映射到k個(gè)元素位圖上的點(diǎn),標(biāo)記為1。在檢索過程中,通過k個(gè)hash 函數(shù)推測(cè)元素位圖中k個(gè)點(diǎn)標(biāo)記是否均為1。布隆過濾器避免了單獨(dú)的hash 函數(shù)可能將兩個(gè)及以上的元素標(biāo)記為同一地址,產(chǎn)生hash碰撞。
自然語言處理模塊實(shí)現(xiàn)了系統(tǒng)的分析功能,其表現(xiàn)為提取關(guān)鍵詞與關(guān)鍵句,并使用API 接口對(duì)新聞信息全文及提取的關(guān)鍵詞句進(jìn)行翻譯。系統(tǒng)采取基于詞圖模型的TextRank 無監(jiān)督算法進(jìn)行關(guān)鍵詞句的提取。無監(jiān)督相比有監(jiān)督算法優(yōu)點(diǎn)在于有監(jiān)督算法在訓(xùn)練過程中的成本過高,無監(jiān)督算法利用某些方法進(jìn)行詞的提取,不需要人工手動(dòng)進(jìn)行訓(xùn)練。
TextRank 算法是基于詞圖的關(guān)鍵詞抽取排序及文章摘要算法,由PageRank 網(wǎng)頁重要性排序算法衍進(jìn)而來。TextRank 算法將整篇文章視作有向圖,將文章內(nèi)每個(gè)句子視作圖內(nèi)節(jié)點(diǎn),將兩個(gè)句子的相似程度視作轉(zhuǎn)移概率。在算法遍歷運(yùn)算過程中形成了一階馬爾科夫鏈,形成一個(gè)平穩(wěn)分布,兩個(gè)句子之間的相似性分值儲(chǔ)存在矩陣之中,在經(jīng)過排序后選取排名較前的若干句子形成摘要。在抽取關(guān)鍵詞時(shí),首先對(duì)文本進(jìn)行分詞,保留名詞、動(dòng)詞、形容詞、副詞等實(shí)義詞,將實(shí)義詞作為候選關(guān)鍵詞,即:
其中:T為文本全體信息,Si為文本內(nèi)所有句子,tij表示句子內(nèi)所有分詞。
其次,構(gòu)建詞圖關(guān)系:
其中:V為節(jié)點(diǎn)集合,采用共現(xiàn)關(guān)系構(gòu)造任意兩個(gè)節(jié)點(diǎn)之間的邊,共現(xiàn)最多K個(gè)單詞,K等于2。根據(jù)公式迭代各個(gè)節(jié)點(diǎn)的權(quán)重至收斂,即:
其中:WS(Vi)代表第i句的權(quán)重;d為阻尼系數(shù),為0.85;Vi,Vj為任意兩節(jié)點(diǎn),Wji表示兩節(jié)點(diǎn)邊的權(quán)重[2];WS(Vj)代表迭代之前句子j的權(quán)重;out(Vj)為指向節(jié)點(diǎn)的結(jié)合,根據(jù)權(quán)重排名選取m個(gè)詞作為關(guān)鍵詞。
系統(tǒng)使用Textrank4zh 第三方庫內(nèi)Text-Rank4Keyword 與TextRank4Sentece 模塊進(jìn)行關(guān)鍵詞與關(guān)鍵句的抽取,選定關(guān)鍵詞數(shù)量為5,關(guān)鍵句數(shù)量為3。系統(tǒng)對(duì)某文本處理結(jié)果如圖3所示。
圖3 文本自然語言處理結(jié)果
系統(tǒng)采用百度翻譯API 接口,百度翻譯提供了中英翻譯與小語種翻譯的服務(wù),通過注冊(cè)百度開放平臺(tái)得到的APIID 與Key,實(shí)現(xiàn)文檔對(duì)百度翻譯引擎的請(qǐng)求。百度翻譯API 工作流程分為兩步:第一步為使用HTTP 協(xié)議get 或post請(qǐng)求方式調(diào)用API 接口,第二步為翻譯引擎工作根據(jù)設(shè)置的參數(shù)返回?cái)?shù)據(jù)并調(diào)整格式。利用百度開放平臺(tái)中給出的代碼Demo,可極為方便地實(shí)現(xiàn)API接口的設(shè)置。
Tornado 是基于Python 的輕量級(jí)Web 框架,為異步非阻塞IO式處理方式,較Django框架具有少而精、性能高的特點(diǎn)。系統(tǒng)采用Tornado框架作為使用者與服務(wù)器的交互平臺(tái),由四個(gè)部分組成:
(1)IOLoop 模塊是Tornado 框架的核心模塊,Tornado 利用此模塊開啟循環(huán)監(jiān)聽并處理全部I/O事項(xiàng)。
(2)Handler 模塊是實(shí)現(xiàn)框架不同頁面功能的模塊,一個(gè)頁面功能一般對(duì)應(yīng)一個(gè)handler類。系統(tǒng)有5個(gè)交互功能,登錄頁面、全部新聞信息標(biāo)題縮略頁面、模糊檢索功能、新聞信息詳情、自然語言處理詳情。在編寫Handler 類時(shí),可使用第三方的模板或JavaScript 語言進(jìn)行網(wǎng)絡(luò)頁面的編寫制作。
(3)Application 模塊表示Tornado 框架后端服務(wù)實(shí)例,可利用實(shí)例進(jìn)行端口的接聽等。
(4)路由映射模塊通過指定URL 規(guī)則與Handler 類關(guān)聯(lián)。使用者請(qǐng)求數(shù)據(jù)時(shí),根據(jù)訪問的路由映射查詢找到相應(yīng)功能的Handler 類處理請(qǐng)求[3]。
Tornado框架Web結(jié)構(gòu)如圖4所示。
圖4 Tornado框架結(jié)構(gòu)
使用Javascript 語言制作網(wǎng)頁作為系統(tǒng)的可視化交互平臺(tái),實(shí)現(xiàn)使用者對(duì)數(shù)據(jù)庫內(nèi)全部信息的檢索功能。系統(tǒng)響應(yīng)過程為使用者向系統(tǒng)發(fā)出檢索請(qǐng)求,檢索數(shù)據(jù)提交數(shù)據(jù)庫以Json 格式返回,頁面對(duì)數(shù)據(jù)進(jìn)行處理后顯示給使用者[4]。系統(tǒng)頁面如圖5所示。
圖5 系統(tǒng)頁面展示
本文建立了對(duì)美國有限電視新聞網(wǎng)的新聞信息爬取與分析的系統(tǒng),分析了有關(guān)爬蟲過程、自然語言處理過程及交互過程中細(xì)節(jié)的實(shí)現(xiàn)。爬蟲過程考慮了新聞網(wǎng)站時(shí)間跨度問題,盡可能全面地獲取新聞網(wǎng)站的數(shù)據(jù),系統(tǒng)通過分析功能對(duì)單個(gè)新聞文本信息進(jìn)行關(guān)鍵詞句的抽取并翻譯,方便使用者快速掌握國際熱點(diǎn)信息,也可用于進(jìn)一步的文本數(shù)據(jù)挖掘。