![基于網絡爬蟲技術的網絡新聞分析論文_第1頁](http://file4.renrendoc.com/view10/M01/0E/24/wKhkGWW-OQKAMC51AAEAzTP4iss693.jpg)
![基于網絡爬蟲技術的網絡新聞分析論文_第2頁](http://file4.renrendoc.com/view10/M01/0E/24/wKhkGWW-OQKAMC51AAEAzTP4iss6932.jpg)
![基于網絡爬蟲技術的網絡新聞分析論文_第3頁](http://file4.renrendoc.com/view10/M01/0E/24/wKhkGWW-OQKAMC51AAEAzTP4iss6933.jpg)
![基于網絡爬蟲技術的網絡新聞分析論文_第4頁](http://file4.renrendoc.com/view10/M01/0E/24/wKhkGWW-OQKAMC51AAEAzTP4iss6934.jpg)
![基于網絡爬蟲技術的網絡新聞分析論文_第5頁](http://file4.renrendoc.com/view10/M01/0E/24/wKhkGWW-OQKAMC51AAEAzTP4iss6935.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
畢業(yè)設計(論文)任務書第1頁畢業(yè)設計(論文)題目:基于網絡爬蟲技術的網絡新聞分析畢業(yè)設計(論文)要求及原始數據(資料):1.綜述國內外網絡爬蟲技術研究現(xiàn)狀;2.深入了解網絡爬蟲與文字分析的相關技術;3.熟練掌握網絡爬蟲爬取策略以及分析策略;4.設計并實現(xiàn)針對網絡新聞的爬蟲程序;5.深入分析與整合爬取到的網絡新聞數據;6.訓練檢索文獻資料和利用文獻資料的能力;7.訓練撰寫技術文檔與學位論文的能力。第2頁畢業(yè)設計(論文)主要內容:1.綜述網絡爬蟲在大數據分析中的應用;2.了解網絡爬蟲以及文字分析的相關技術;3.熟悉網絡爬蟲的開發(fā)環(huán)境;4.設計以網絡新聞為目標的爬蟲程序;5.學習研究文字分析的關鍵技術與編寫網絡爬蟲的設計流程;6.熟練掌握程序繪制分析結果統(tǒng)計圖的技術;7.設計與實現(xiàn)針對網絡新聞爬取與分析整合的程序。學生應交出的設計文件(論文):1.內容完整、層次清晰、敘述流暢、排版規(guī)范的畢業(yè)設計論文;2.包括畢業(yè)設計論文、源程序等內容在內的畢業(yè)設計電子文檔及其它相關材料。第3頁主要參考文獻(資料):于娟,劉強.主題網絡爬蟲研究綜述[J].計算機工程與科學,2015,37(02):231-237.張紅云.基于頁面分析的主題網絡爬蟲的研究[D].武漢理工大學,2010.張瑩.面向動態(tài)頁面的網絡爬蟲系統(tǒng)的設計與實現(xiàn)[D].南開大學,2012.張曉雷.面向Web挖掘的主題網絡爬蟲的研究與實現(xiàn)[D].西安電子科技大學,2012.奉國和,鄭偉.國內中文自動分詞技術研究綜述[J].圖書情報工作,2011,55(2):41-45.許智宏,張月梅,王一.一種改進的中文分詞在主題搜索中的應用[J].鄭州大學學報,2014(5):44-48.歐振猛,余順爭.中文分詞算法在搜索引擎應用中的研究[J].計算機工程與應用,2000,36(08):80-82.Batsakis.S,PetrakisEGM,MiliosE.Improvingtheperformanceoffocusedwebcrawlers[J].Data&knowledgeengineering,2009,68(10):1001-1013.Pant.G,MenczerF.MySpiders:EvolveYourOwnIntelligentWebCrawlers[J].Autonomousagentsandmulti-agentsystems,2002,5(2):221-229.Ahmadi-AbkenariF,AliS.AClickstream-basedFocusedTrendParallelWebCrawler[J].InternationalJournalofComputerApplications,2010,9(5):24-28.緒論論文研究背景與意義時至2016年,互聯(lián)網大爆炸催生出了一系列新生的網絡產物,如微博、微信、網絡新聞等,這些產物逐漸演化成了互聯(lián)網時代的新興媒體,以全新的方式承載了輿情與輿論。網絡新聞是由于某一時刻發(fā)生的新聞,首先被上傳到互聯(lián)網上,然后經過廣大網民的評論轉發(fā)而廣泛傳播,其中包含了很多的重要而且有價值的信息,例如網民們的評價傾向,人們對待某一事物的看法等等。時至今日,互聯(lián)網信息產業(yè)三足鼎立的局面顯而易見,主要網絡媒體新聞來源:新浪微博、微信公眾號、網絡媒體。其中,最開始顯現(xiàn)這一勢頭的是新浪微博,例如“郭美美事件”,經由個人發(fā)博文,然后通過@一些網絡推手或者微博大V,使得相關信息傳播如星星之火,借助于微博的實時性,很快會形成燎原之勢。正是因為微博擁有這些特征,很多正面或者負面新聞不能通過傳統(tǒng)媒體報道卻能通過微博途徑大肆傳播。隨著新浪微博的發(fā)展與推廣,越來越多的人喜歡將自己的生活“曝光”在微博上,例如心情狀態(tài)、將來的計劃、曬一曬生活、曬一曬人生等等,無形中,微博對輿論分析的潛在價值不斷上升。微博拉近了人們與新聞、與熱點的距離,但是它也帶來了不可忽視的負面影響。針對微博謠言惡性化、輿論暴力不斷、侵權案件層見疊出等問題,完全可以變廢為寶,提早掌握此類信息,提早整改。然而,近兩年新浪微博對爬蟲的預防愈來愈加嚴格,以微博api為首的一批爬蟲已經跌倒,起因是新浪對相關微博SDK的api的封鎖以及限制,故在本文中暫且拋棄了新浪微博這一網絡新聞誕生地。再者,就是微信公眾號,俗話說“十年河東十年河西”,隨著互聯(lián)網傳媒的進一步發(fā)展,更具有效率與價值的“新媒體”不斷推出,在新浪微博如火如荼的情況下,微信公眾號平臺悄悄地來臨了,其發(fā)展速度與推廣力度甚至超過了新浪微博。微信的公眾號與朋友圈功能深受廣大媒體與網民們的歡迎,所以說,又有“新媒體”誕生了。橫向對比微信公眾號的效力,如果其微信訂閱人數超過一萬,那儼然就相當于一本雜志了;如果其微信訂閱人數超過十萬,那完全可以與地方性的報紙的影響力相媲美;但是一旦其微信訂閱用戶數量達到了百萬級,其影響力絕對不會低于電視臺,令人震驚。如今,微信訂閱用戶數量(即粉絲數量)達到百萬級的公眾號比比皆是,由大粉絲量的公眾號推送的文章影響力難以想象,而且速度迅疾,與傳統(tǒng)媒體相比,簡直秒殺傳統(tǒng)傳媒行業(yè)。所以網絡新聞的采集必然不可放過此領域,然而現(xiàn)實很殘酷,微信公眾號文章采集涉及跨平臺,跨應用,以及相關權限token的獲取,相對來說非常繁瑣且自動化效率不高,故本文也放棄了此方式。后者,也就是網絡媒體了,各類門戶網站借助自身的app可以迅速推送由各媒體記者收集到的一線新聞,比較熱的網絡媒體平臺有:鳳凰網新聞、新浪新聞、搜狐新聞、網易新聞等,其專業(yè)程度要遠勝于社交媒體,如微博、微信等,而且網絡媒體信息的商用價值也要大于另外兩家。1.2論文研究內容若要實時監(jiān)測網絡新聞的發(fā)展與變化,則必須使用相關工具,人工的速度太慢,這時候網絡爬蟲就應運而生了。爬蟲需要定時爬取相關網絡媒體頁面,獲取頁面源碼并進行解析,取出正文部分。這里面涉及到過濾算法,或者是網頁結構的解析算法,同時還涉及到如何應對網站反爬蟲策略,主要分為以下幾個部分:爬蟲技術:采用什么語言、什么框架來寫爬蟲,現(xiàn)階段有什么樣的流行的java爬蟲框架?如何從松散、非結構化的網絡新聞中得到結構化的、緊湊的網絡新聞數據。網頁處理技術:如何處理js、面對ajax加載的網站該使用什么樣的策略,以及如何從html語句中準確抽取出文章正文,同時還要提防網站的反爬蟲技術,需要的時候爬蟲請求頭還可能需要帶上cookie等等。中文分詞技術:能夠以相對較高的準確率將抽出出來的正文進行中午分詞,以便后續(xù)使用分詞來確定文章的相似性。網絡新詞層出不窮,所以分詞是否能準確識別未知的新詞很是重要。目前分詞工具準備使用采用Lucene作為核心的IK分詞、或者國產的Ansj中文分詞等分詞工具。中文語料相似度匹配:隨著近幾年的相關理論研究,已經推出了一些半成熟的解決方案,例如有計算余弦定理的方法、分析語義與詞序的方法、計算編輯距離的方法。首先介紹下編輯距離語料相似度計算的算法,具體是在給出任意兩個漢字語句后,計算將這兩個語句中任意一個漢字語句變換成另一個漢字語句的變換過程中所需要的最少的編輯次數。最小編輯距離的算法是首先由俄國的科學家Levenshtein提出的,故又叫做LevenshteinDsitance。當然,算法目前不能做到百分百相似匹配正確,這個問題的解決算是世界上的一大難題了。相似新聞趨勢展示:采用jfreechart或者百度的echarts將分析結果以曲線圖方式展示出來。
2系統(tǒng)需求分析軟件需求分析對軟件系統(tǒng)提出了清楚、準確、全面而具體的要求,是對軟件使用者意圖不斷進行揭示與準確判斷的過程,它并不考慮系統(tǒng)的具體實現(xiàn),而是嚴密地、完整地描述了軟件系統(tǒng)應該做些什么的一種過程。2.1系統(tǒng)需求概述要求爬蟲系統(tǒng)能完成對鳳凰網新聞、網易新聞、新浪新聞、搜狐新聞等網站新聞數據的實時抓取,并正確抽取出正文,獲取新聞的點擊量,實現(xiàn)每日定時抓取。能將抓取回來的新聞進行中文分詞,利用中文分詞結果來計算新聞相似度,將相似的新聞合并起來,同時也合并點擊率,最后一點,能將相似因為一段事件內的用戶點擊趨勢以合適的形式展現(xiàn)出來?;诰W絡爬蟲技術的網絡新聞分析由以下幾個模塊構成:網絡爬蟲模塊。中文分詞模塊。中文相似度判定模塊。數據結構化存儲模塊。數據可視化展示模塊。2.2系統(tǒng)需求分析2.2.1系統(tǒng)功能要求按照對系統(tǒng)需求調用的內容分析,系統(tǒng)功能劃分為了一下五個模塊:數據采集模塊:數據采集模塊負責數據采集,即熱點網絡新聞數據的定時采集,以及數據的初步拆分處理。(1)中文分詞模塊:中文分詞模塊能將數據采集模塊采集到的熱點網絡新聞數據進行較為準確的中文分詞。(2)中文相似度判定模塊:中文相似度判定模塊通過將數據采集模塊采集到的熱點網絡新聞數據結合中文分詞模塊的分詞結果,進行網絡熱點新聞的相似度分析,并能夠將相似新聞進行數據合并。(3)數據結構化存儲模塊:數據結構化存儲模塊貫穿在其他模塊之中,在數據采集模塊中,負責存儲采集拆分后的熱點網絡新聞數據;在中文分詞模塊中,負責從數據庫讀出需要分詞處理的網絡新聞數據;在中文相似度判定模塊中,負責從將分析得到的相似新聞進行存儲;在數據可視化展示模塊中負責將相似熱點新聞數據從數據庫讀出,其中涉及到大量關于數據庫資源的處理。(4)數據可視化展示模塊:數據可視化展示模塊負責將中文相似度判定模塊判定為相似新聞的數據以可視化的形式展示出來,展示形式可以自定義。2.2.2系統(tǒng)IPO圖整個系統(tǒng)的IPO圖如圖2-1。圖2-1系統(tǒng)IPO圖爬蟲輸入新聞數據,然后處理分析,最后用可視化界面展示出來。
2.2系統(tǒng)非功能性需求分析本系統(tǒng)設計的非功能性需求涵蓋了一下幾個方面:性能需求: 要求爬蟲能并行爬取網絡新聞,并行分析,數據庫的并發(fā)處理能力要足夠強。可靠性需求: 要求系統(tǒng)運行能保持穩(wěn)定持久狀態(tài),沒有明顯的BUG易用性需求: 要求爬蟲系統(tǒng)能做到盡可能的自動化,爭取不需要人為操作。維護性需求: 要求系統(tǒng)出現(xiàn)BUG能比較容易的修復,系統(tǒng)的后期拓展功能較強。
3系統(tǒng)概要設計系統(tǒng)概要設計的主要目的是能在此階段將系統(tǒng)的主要功能邏輯設計和數據庫系統(tǒng)的邏輯設計完全從需求分析中提取出來,在提取的過程中,不僅僅是奔著實現(xiàn)軟件的功能而去,還得考慮上下文環(huán)境,例如系統(tǒng)最終的運行環(huán)境,系統(tǒng)以后可能增加的需求等等相關約束,在捋清楚系統(tǒng)約束之后在進行系統(tǒng)概要設計,這樣軟件系統(tǒng)之后的二次開發(fā)也不會太難。3.1設計約束3.1.1需求約束系統(tǒng)能穩(wěn)定運行在最低為JDK1.7的平臺上。數據庫向后兼容,最低適配Mysql5.1。要求程序有較好的跨平臺性,可以同時運行在Linux、windows、Unix系統(tǒng)上。要求數據庫連接方面,設置的密碼足夠復雜,數據庫連接管理良好,數據庫系統(tǒng)能健壯運行。禁止使用商業(yè)性軟件,在本系統(tǒng)中使用的算法或是類庫必須是免費的。系統(tǒng)對系統(tǒng)配置的要求要盡可能低。程序具有良好的可移植性、兼容性、安全性。3.1.2設計策略為了本系統(tǒng)能適應未來的需求與發(fā)展,特制定如下策略:系統(tǒng)具有良好的接口擴展功能,能非常容易地擴展新功能,并將可能會經常調整的部分單獨提取出來作為一個模塊;系統(tǒng)代碼具有非常良好的復用價值,新功能的添加能基于現(xiàn)有功能進行派生;系統(tǒng)代碼優(yōu)化到位,很少出現(xiàn)或者完全不會出現(xiàn)內存泄露的問題,包括數據庫連接池的泄露,獨享資源使用未關閉句柄的問題等;當優(yōu)化問題與代碼健壯性發(fā)生沖突時,則以保證代碼健壯性為首要目標,可以適當調整優(yōu)化。3.1.3技術實現(xiàn)本系統(tǒng)設計與開發(fā)工具采用以下配置:開發(fā)語言:javaJDK版本1.7。Java是一種具有非常棒的面向對象的設計思想的一門計算機語言語言。Java技術具有很高的生產力,原因是大量的程序員為其貢獻了大量的代碼,目前Java程序廣泛應用于Web、企業(yè)管理系統(tǒng)、云計算、大數據計算等方面,同時Java目前在全球的編程語言的穩(wěn)居第一。開發(fā)環(huán)境:Eclipse。Eclipse一開始是IBM旗下的一款開發(fā)工具,知道后來被IBM貢獻給了開源社區(qū),雖然開源,但是其功能一點也不遜于專業(yè)收費類型的開發(fā)IDE,Eclipse有著強大的開源活力,以及良好的擴展性,很容易在論壇上下載到各種各樣為Eclipse量身定制的插件,所以開發(fā)本系統(tǒng)采用了Eclipse作為開發(fā)IDE。3.3模塊結構3.3.1模塊結構圖爬蟲系統(tǒng)軟件結構圖:向爬蟲系統(tǒng)輸入網頁URL,爬蟲打開網頁解析處理抽出網頁正文,然后輸出網頁正文,如圖3-1所示。圖3-1爬蟲子系統(tǒng)結構圖將網頁正文傳入系統(tǒng),系統(tǒng)根據詞庫以及相關策略開始分詞,最后將分詞結果以數據形式(詞組的形式)輸出出來,如圖3-2所示。圖3-2分詞子系統(tǒng)結構圖首先第一步輸入數據:網絡爬蟲系統(tǒng)采集到的數據作為相似度匹配系統(tǒng)的輸入,然后進入處理過程,處理過程采用了改進了的余弦定理進行處理,然后系統(tǒng)返回處理后的結果,最終本系統(tǒng)將處理后的結果作為輸出,并傳遞給下一個子系統(tǒng)進行處理,如圖3-3所示。圖3-3文章相似度匹配系統(tǒng)結構圖
3.3.2系統(tǒng)層次圖本系統(tǒng)設計為分別由三個子系統(tǒng)組成,分別是:網絡爬蟲系統(tǒng)即數據采集系統(tǒng)、新聞分析系統(tǒng)即中文語料相似度分析系統(tǒng)和最終結果展示系統(tǒng),如圖3-4所示。圖3-4系統(tǒng)層次圖3.3.3面向對象設計UML圖(1)在這里首先介紹一下系統(tǒng)中使用的數據庫連接池,MF_DBCP自己寫的一個數據庫連接池,UML類圖如圖3-5所示。圖3-5系統(tǒng)類圖在DBCP連接池UML圖中,定義了數據庫異常拋出類,數據庫配置的POJO類,數據庫連接池核心類Pool以及代理實現(xiàn)了Connection的close()方法、setAutoCommit()等方法,還有數據庫連接池監(jiān)視器類,用來監(jiān)視數據庫的健康狀況等等。(2)爬蟲核心是Web類,鳳凰網新聞、搜狐新聞、網易新聞分別集成了核心Web類,然后各自實現(xiàn)各自的解析規(guī)則,核心Web類負責一些基礎操作,例如打開網頁,獲取網頁源碼,還有一些正則表達式抽取分析算法,其實,Web類也包含了POJO類的作用,也是作為爬蟲爬取新聞后生成的結果的載體,如圖3-5所示。圖3-5爬蟲系統(tǒng)類圖
4系統(tǒng)詳細設計詳細設計是在軟件工程正式開始編碼工作前的最后一個階段。在系統(tǒng)詳細設計階段,也就是本系統(tǒng)正式開始編碼工作前,在此簡單介紹下在編碼過程中所用到的一些工具包,還有一些算法原理等等,同時還有本系統(tǒng)模塊比較細粒度的介紹與設計分析以及其他在軟件詳細設計階段需要做的一些工作。4.1系統(tǒng)模塊設計系統(tǒng)結構邏輯上由四個部分組成:第一個部分是數據采集模塊,負責原生網頁文檔數據采集與正文抽??;第二個部分是采集數據固化模塊,將數據采集模塊采集回來的原始網頁文檔進行入庫固化;第三個部分負責網頁文檔數據的處理與分析,從數據庫讀取原始網頁文檔數據之后進行中文分詞,然后根據分詞結果再進行相似度分析,并將分析結果為同一相似新聞的結果進行存儲;第四層是數據展示模塊,負責將分析整理后的數據以圖表的形式繪制出來。4.1.1數據采集模塊數據采集模塊(爬蟲系統(tǒng))采集工具使用了HttpClient框架,配合正則表達式解析,抽取網頁內容。HttpClient是ApacheJakarateCommon下的一個子項目,開源而且免費,HttpClient起初的目的是為了做web測試用的,后來其功能不斷完善,不斷加強,在功能上基本上可以以假亂真真的瀏覽器,但它并不是一個瀏覽器,僅僅是實現(xiàn)了瀏覽器的部分功能。HttpClient目前已經應用在很多的項目中,比如ApacheJakarta上很有名的另外兩個開源的項目Cactus和HTMLUnit都使用了HttpClient。HttpClient基于標準而且純凈的Java語言,實現(xiàn)了Http1.0和Http2.0,以可擴展的面向對象的機制實現(xiàn)了Http協(xié)議的全部方法(GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACE),并且支持Https協(xié)議,通過Http代理建立起透明的連接,利用CONNECT方法通過Http代理隧道的Https連接,支持NTLM2Session,SNENPGO/Kerberos,Basic,Digest,NTLMv1,NTLMv2等認證方案,而且自帶插件式的自定義認證方案。HttpClient設計時候注重了可擴展性以及自定義性,所以HttpClient能支持各種各樣的不同的配置方案。同時在多線程的環(huán)境下HttpClient使用起來更加方便自如,HttpClient中定義了網頁連接管理器,可以自動管理各種網頁連接,能發(fā)現(xiàn)處于非正常的連接并關閉,起到了很好的防止內存泄漏的作用。HttpClient能自動處理Set-Cookie中的Cookie,可以插件式的自定義Cookie策略,Request的輸出流可以有效地從Socket服務器中直接讀取相關的內容。在Http1.0和Http1.1中利用Keep-Alive保持長久(持久)連接,可以直接獲取服務器發(fā)送的responsecode和headers。另外,HttpClient可以設置連接超時,實驗性的支持Http1.1responsecahing。使用HttpClientGetMethod來爬取一個URL對應的網頁,需要如下步驟:生成一個HttpClient對象并設置相應的參數。生成一個GetMethod對象并設置相應的參數。利用HttpClient生成的對象來執(zhí)行GetMethod生成的Get方法。處理返回的響應狀態(tài)碼。如果響應正常,則處理Http響應內容。釋放連接。獲取了響應內容后需要解析HtmlDOM對象,這里選用了jsoup。Jsoup是一款Java的Html文檔解析器,可以直接解析某個URL地址,但是這里選用了HttpClient代替了他去獲取HtmlDOM對象,因為jsoup自帶的打開并解析URL的功能是一個比較基礎的功能,遠不如HttpClient提供的豐富,在這里,本文采用別的工具來替代Jsoup來獲取HtmlDOM對象,比如上文介紹的HttpClient,獲取了網頁文檔數據之后,可以把網頁文檔數據以字符串的形式傳遞給Jsoup來進行Html解析。在Html文檔的解析方面,Jsoup自帶了很多非常非常方便的方法與API,例如:可以像jQuery那樣來直接操作HTML網頁元素,此外還有其他提取HTML文檔中需要的內容的方法,讀者可以自行閱讀Jsoup的官方使用文檔。最后一點,也是很重要的一點,使用Jsoup是完全免費的,包括對其進行代碼上的復制與克隆,可以根據項目的不同需求來修改Jsoup的源碼,作為一個相當受歡迎的Html文檔解析器,Jsoup具有以下的優(yōu)點:Jsoup能直接解析網頁URL從中取出需要的內容,也可以直接抽取Html文檔字符串來進行解析工作;Jsoup是實現(xiàn)了CSS的選擇器,可以像jQuery那樣直接操作元素;Jsoup不僅能方便的處理Html文檔正文內容,還能處理Html文檔元素的相關元素,如獲取Html標簽的屬性等功能;除此之后,有一個很重要的特性,目前很多網站采用了不同的后臺環(huán)境,有Java、PHP、Python、Node.js等作為開發(fā)工具,Web開發(fā)框架更是五花八門,所以很可能會出現(xiàn)一些紕漏,如網頁標簽缺乏閉合的部分,熟悉Html的人都知道,Html語言是一種容錯性極高的語言,即使標簽未能適時的閉合,瀏覽器也是能正常顯示網頁的,但是對于這些通過網站Html文檔來獲取網頁信息的人來說,這個特點是非常致命的,會對最終的解析結果產生很大的負面影響。然而使用Jsoup完全可以避免這個問題,Jsoup設計的時候已經想到了這些問題,其對Html標簽的閉合等特性也是具有容錯性的,例如下面幾種狀態(tài):1.Html文檔出現(xiàn)了沒有關閉的html標簽(比如:<p>陳晉豪的論文<p>論文寫起來挺難<p>內容有了就好了</p><p>AB123</p>)2.Html文檔數據中的隱式標簽(比如:它可以自動將<td>表格</td>包裝成<table><tr><td>)3.能創(chuàng)建非??煽康腍tml文檔結構(比如:html標簽包含head和body,在head只出現(xiàn)恰當的元素)爬蟲系統(tǒng)的爬取對象分別選擇了鳳凰網新聞、網易新聞、搜狐新聞,因為這些新聞都開放了點擊數量查詢,且這三大媒體無論是影響上,還是覆蓋面上,都是非常巨大非常廣泛的,非常適合作為爬取對象,爬取過程中也沒有復雜的Ajax需要處理,而且這些新聞的訪問數據都是每天更新的。爬蟲程序需要以循環(huán)定時運行在響應的服務器上,每天定時爬取以上網站的新聞內容,并存入數據庫,數據庫采用了Mysql,因為Mysql比較輕量級,有免費的學術研究的版本,而且比較適合當前場景。Mysql數據庫引擎采用了MyIASM,按理來說,MyIASM是比較古老的引擎,但是MyIASM存儲引擎在曲度方面的性能要好于INNODB,雖然不支持事務,但是爬蟲存儲暫時不涉及事務的使用,再加上MyIASM優(yōu)秀的插入查詢速度,使得爬蟲數據的存取非??旖?、迅速,所以這里選擇了MyIASM作為Mysql的存儲引擎。數據采集系統(tǒng)的爬蟲在爬取網站是采用多線程并發(fā)爬取的,所以多線程的爬蟲對數據庫的并發(fā)操作會有很多很多,在進行數據庫操作的時候,第一步是建立數據庫連接,在多線程的環(huán)境下,這些操作會進行得非常頻繁,但是這些操作又非常的耗費網絡、內存空間等,這些操作會對系統(tǒng)資源、系統(tǒng)運行效率有很大的負面影響,所以必須采用數據庫連接池。網上有很多開源而且優(yōu)秀的數據庫連接池,比如Apache開源的dbcp,平時tomcat使用DateSource配置連接池的時候就是使用了tomcat內置的dbcp連接池,此外還有c3p0數據庫連接池,也是非常優(yōu)秀的連接池,SSH三大框架之一的Hibernate就采用了c3p0作為其內置連接池,其優(yōu)秀性能可見一斑,不過這些連接池相對來說都比較重量級,所以自己在這里寫了一個相對比較輕量級的連接池MF_DBCP,下面會介紹下自定義連接池相關內容。關系型數據庫的連接池有幾個基本原則:1.池化數據庫連接的目的就是實現(xiàn)對資源的重復使用,使用數據庫連接池可以很方便的復用數據庫連接,在復用資源的過程中還能輔之以相關的管理策略,使得整個連接池具有自發(fā)性、智能性、低耗能、高效率等特征,便于應對高并發(fā)等極其耗費計算機資源的操作。2.數據庫連接池的設計過程中最重要的是能精確把握關系型數據庫的事務原子性的原則,保證事務在任何時候都不會被其他數據庫操作干擾,也就是事務會單獨占用一個數據庫連接,反之,在沒有開始事務或者相關數據庫操作不涉及事務的情況下,多個數據庫請求可以共用一條數據庫連接,數據庫在處理同一個數據庫連接具有的多個請求方面采用的是隊列模式,各個請求之間不會產生干擾,同時處理速度也能保證高效。3.策略維護連接池,以確保連接池的健壯性,建立適當的策略創(chuàng)建一個數據庫連接池監(jiān)視器,用來監(jiān)視數據庫的情況,這里可以總結成一句話:在任何時候,連接池既要能扛得住來自業(yè)務調用方面的壓力,也要時刻能保證對數據庫系統(tǒng)的負載最小,在業(yè)務層與數據庫系統(tǒng)之間建立了一個優(yōu)化處理的環(huán)節(jié)。ConfigurationException用來拋出用戶配置的異常,DataSourceException用來拋出連接池運行中的異常,詳見代碼。內部類Config類似JavaBean類,保存從配置文件讀取到的最原始的數據。Configuraiton繼承Config并且提供了構造連接池的方法,這里補充說明下,應該將Configuration特有的功能抽象出一個功能接口,這樣Configuration擴充功能的時候會更加明晰。Pool類是連接池核心,對外提供getInstance()方法(單例模式)獲取唯一連接池,concs為單個連接池容器隊列(下面會介紹),busy字段指出當前連接池正處于忙碌狀態(tài)的連接(負載大于0),free字段指出當前連接池正處于空閑狀態(tài)的連接(負載等于0),sum字段指出當前連接池的大小(busy+free)。ConnectionContainer類,當其中的連接未開啟事務的狀態(tài)下,多個數據庫請求是可以共享同一個連接的,load字段作為負載指標,記錄了連接當前被使用的次數。DataSource對外提供getInstance()方法獲取唯一的面向用戶使用的數據庫連接池(單例模式)。PoolSnapshot類創(chuàng)建一個當前連接池在使用中的連接的一個快照,以判斷連接池是否需要收縮,這是數據庫的監(jiān)視器策略中的一部分。MonitorControler接口可擴充監(jiān)視器的功能,被ConnectionStatusMonitor與ConnectionNumMonitor兩個監(jiān)視類實現(xiàn)。監(jiān)視器初始化后開啟兩個線程:1.號線程根據配置文件中的status_checktime字段來周期性運行實現(xiàn)掃描連接池中的壞鏈接并修復2.號線程根據配置文件中的num_checktime字段來周期行創(chuàng)建連接池使用狀態(tài)的快照,當足夠三個狀態(tài)時,根據三點畫出的曲線來確定數據庫連接池中到底需要保存多少連接,并保證連接數不小于最小連接數。以下用+表示當前快照連接數大于前一快照,–表示當前快照連接數小于前一快照:+++監(jiān)視器不做任何動作,因為連接數在穩(wěn)步增加;-+-監(jiān)視器末尾保留最后兩個連接快照的平均連接數,剩下的多余連接回收;—監(jiān)視器保留三個快照平均連接數作為當前連接,剩下的多余連接回收;自定義數據庫連接池的相關API如下:addNew()方法為連接池增加新的連接;addLast()方法為未開啟事務從而可以共享的連接提供”負載均衡”的策略(當一個連接被使用一次,則將他放入隊列末尾,試想這樣可以循環(huán)隊列);deleteFirst()方法循環(huán)調用可以清空連接池隊列;delete()方法提供了從連接池中移除某個連接的方法;getFirst()方法提供了獲取負載最輕即隊首的連接;getLoad()方法提供了獲取指定連接負載大小的方法;getConnectionContainer()方法提供了獲取某個連接所在的連接容器(從而操作連接池中的連接池容器隊列);remove()方法提供了從連接池中移除某個開啟了事務的連接,deleteLater()方法提供了獲取數據庫中可以清除(負載等于0)的連接;getMinLoadConnection()方法提供了獲取連接池中負載最低的連接以便創(chuàng)造專用的事務連接;getConnectionContainers()方法為外界提供了獲取數據庫連接池隊列的方法;isFullFree()方法判斷當前連接池是否完全處于空閑狀態(tài)(關閉連接池判斷);size()方法提供獲取連接池除去事務連接剩余連接的數量;createConnection()方法為連接池提供創(chuàng)造新連接的方法;destoryConnection()方法指定關閉某個連接;repairPool()方法提供了修復連接池中壞連接的方法,并用新的可用的連接替換; releasePool()方法提供了連接池收縮大小的方法,確保保留的連接數是最合適的;revokeConnection()方法提供了回收連接,將其重新加入連接池隊列的方法;getConnection()當用戶需要連接時調用;getPoolStatus()返回當前連接池的使用情況;close()關閉數據庫連接池;4.1.2中文分詞模塊首先簡單地介紹下中文分詞的概念,中文分詞也就是經過相關的算法,把原來的漢語句子或者更長的漢語語料正確分割成為一個一個的漢語詞語的過程。說到中文分詞,先來介紹下英文的分詞,計算機由歐美人發(fā)明,所以他們很早就進行了有關英文分詞的研究,本文從簡到繁進行介紹,英文分詞很簡單,人們平時閱讀到的英文文章,英文單詞與單詞之間都有一個空格,利用這個特點,程序可以非常迅速的將英文文章進行英文分詞。這時候回過頭來看看漢語,發(fā)現(xiàn)問題來了,除了語句中的標點符號,基本上所有的漢語都是連續(xù)的,并沒有非常明顯的分割的特征。這時候原來用于英文分詞的那一套工具在漢語語料的分詞方面完全沒有一點作用了,當然,也不能要求在漢語寫作中學習英文的方式,在詞語與詞語之間用空格作為間隔,所以需要專門研究下漢語的分詞策略。這時候,再回到英文分詞的思路上,從小到大,可沒少學過英語短語,是不是發(fā)現(xiàn)了什么?英文短語與短語之間的分詞也不能單純的用空格作為判斷了。但是英文單詞之間的組合以及規(guī)律要明顯比漢語強很多很多,但是漢語擁有世界上最大的使用群體,研究漢語中文分詞技術還是非常非常有必要的。到底怎么進行漢語中文分詞呢?所以首先得研究研究漢語的語法。在這里聲明下,漢語中文分詞目前并不涉及到漢語古文的分詞,具體的原因是因為古文的分詞難度泰國巨大,基本上無規(guī)律可言。經過這些年大量計算機愛好者和學術工作者的研究探索,逐漸推出了一些半成熟的中文分詞的算法,中文分詞的路上舉步維艱,還需要各位加油研究。在這里本文先介紹下幾種比較常見中文分詞的算法:(1)字符匹配的中文分詞方法字符匹配的中文分詞方法時基于語料詞典的分詞算法,分詞結果的準確性很是依賴是否有一個好的分詞詞典,算法的具體內容是,首先將分詞詞典以某種數據結構的形式載入內存,一般都是Hash散列存儲的方式,因為這個方式有極快的查找速度,然后根據分詞詞典中的詞語去匹配要分詞的中文語料字符串,經過一些比較細膩的匹配規(guī)則,最終能夠成功將該漢語語料字符串拆分成不重復的若干漢語詞語,即匹配完成。再拆分要分詞的漢語語料時候,應該結合多種多樣的拆分方法,因為不同的拆分方法可能會帶來完全不同的分詞結果。面對一個隨機的符合規(guī)范的漢語語料,如果它具有足夠的長度,足夠清晰而且不存在理解歧義的情況下,從不同的拆分方法出發(fā),最終得到的分詞結果一定是一致的。利用計算機分詞的話,必定存在著很多奇奇怪怪的分詞結果,完全可以采用統(tǒng)計學的方法來提高最終的分詞結果集的正確命中率。具體的做法是,定制多個拆分漢語語料的算法,然后分別計算其最終的分詞結果,然后統(tǒng)計最終的結果集,哪一部分分詞結果在最終分詞的結果集中出現(xiàn)的次數最多,則就取該分詞作為最終的分詞結果。本文最終采用的分詞方法即為本分詞方法的改進版本,結合了IK分詞和Lucene的一些特性。字符匹配的中文分詞算法對一個合適的分詞詞典依賴非常大,那么如何得到這個分詞詞典呢?最笨的辦法就是人工審閱新聞資料,或者下載漢語字典,提取其中的詞語作為分詞詞典,其次,分詞詞典還需要進行不斷進化。層出不窮的網絡新詞,對分詞結果造成了巨大的挑戰(zhàn),這里就不討論程序自學習以及詞典的自動擴展算法了。常用的中文分詞算法有下面幾種:(2)語義分析理解的中文分詞方法這種中文語料的分詞方法時首先要分析得出漢語的語義、語法、句法等,得出這些規(guī)律目標是能利用這些規(guī)律來讓計算機能理解漢語語句的意義,但是這種方法看似完美,但是有很遙遠。首先想要徹底能總結出這些規(guī)律本身就是非常復雜的,因為漢語整個語法體系的復雜性,還有就是漢語的靈活組合性,不同的組合就是不同的意思,例如“我還欠了他的錢”,這句話如果把“還”念作“hai”,整個句子的意思是“我現(xiàn)在還欠著他的錢”,但如果把“還”念作“huai”,那整個句子的意思就變成“我還錢了,把欠他的錢都還給他了”,這種情況識別就一定會出現(xiàn)問題。再者就是如果得出了這些規(guī)律,也要把這些規(guī)律以編程的方式實現(xiàn)出來,這個過程也是非常困難的。語義分析理解的中文分詞方法是跟人工智能的發(fā)展息息相關的,如果能實現(xiàn)基于語義分析的中文語料的分詞,那么人工智能也能獲得長足的發(fā)展。因為本算法的研制工程周期長,且困難,目前在國際上都還處于概念階段。就算實現(xiàn)了對漢語的語義語法理解,世界上還有其他語言:英語、俄語、法語、阿拉伯語等等語言,發(fā)展歷程必然艱難。本文在此提及此方法僅作為一種思路,目前沒有實現(xiàn)的思路。(3)統(tǒng)計的中文分詞方法如果從漢語詞語的角度出發(fā)去研究詞語的規(guī)律,很快就可以得到一個結論,那就是相互組成一個詞語的兩個漢字順序出現(xiàn)在一起的頻率會很高??梢岳眠@個特點來判定任意相鄰的漢字是否組成了一個詞,但是很明顯存在一個問題,到底多高的頻率才能證明這幾個字組成了一個詞?從數學的角度來看,這不是單一系數就能解決的問題,也絕對不是單一的函數關系,因為變量太多了,可能不同的漢字本身達到可以判定它跟某個漢字組合成詞的閾值是不同的,比如一些生僻的字,本文在這塊獻丑舉個例子:“好”這個字,它可以組成“好人”,“美好”,“剛好”,“恰好”,“好運”,“好奇”,“合好”,“友好”,“問好”,“討好”……等等詞語,在百度上搜到的結果有7500條之多;舉另外一個字“馭”,用“馭”組詞,有“駕馭”,“馭風”……等詞語,僅僅只有120條左右,明顯“好”跟“馭”兩個字不能用一樣的判定標準,它們出現(xiàn)的頻率差異太大,是不能共用一套判定方案來判斷它們是否組字成詞的。其次,還有一個問題,有一些特殊的漢字,他們也會對整個中文分詞結果產生不可忽視的干擾作用,例如“了”,“的”,“著”,這些詞語各自可以組字成詞,例如“了解”,“目的”,“著手”等等,但是他們在整個中文語料中更多的形式是類似于這樣的形式:“走了”,“累了”,“掉了”,“好的”,“你的”,“他的”,“走著”,“跑著”,“著了”等等形式,這樣的形式明顯不是詞語,這些字經常作為結束語出現(xiàn),可能對整個基于詞頻的漢語分詞算法產生巨大的干擾作用,而在中文語料中,列舉出來的這幾個詞還僅僅是冰山一角。所以這種方法僅僅單靠詞頻是完全不夠的。不過,到目前,人工智能越來越熱,發(fā)展也變得迅速起來,不得不說這種方法是具有一定的前瞻性的,如果事先能給出大量的漢語語料的訓練集,再輔以人工糾錯與修正操作,是這種統(tǒng)計的中文分詞算法越來越準確,相信這種方法在不久的未來會替代其他的分詞算法。在處理自然語言上,去理解語義、語法這才是正道。通過建立相關的語法模型,不斷地進行統(tǒng)計分詞的訓練,后期算法一定會有非常不錯的分詞成果,不過本文研究僅僅是借用中文分詞的工具,也不會在這方面進行太過深入的討論。順便提下,作為訓練集的語料完全可以采用類似本文的爬蟲系統(tǒng)從網絡上每天搜集到最新的新聞情報進行訓練,人工糾錯,因為沒有比新聞更有實效性的漢語語料訓練集了,這樣“網絡新詞”也能得到及時的補充與學習,后期需要人工參與糾正的次數會越來越少,分詞結果也會越來越準確。本文使用了IKAnalyzer作為漢語分詞的工具。IKAnalyzer是一個完全免費開源的中文分詞的工具,基于Java開發(fā)的非常優(yōu)秀、快速的中文分詞的工具包。國內還有一個較為著名的中文分詞工具Ansj,號稱能很好的識別人名與地名,而且處理速度方面完全超越IK分詞,不過由于IK分詞基于Lucene,最近自己又在研究Lucene的原因,況且對IK的分詞結果也還算滿意。本系統(tǒng)使用的IKAnalyzer的版本為2012u6,作者林良益是一名自身的Java程序開發(fā)工程師。在IKAnalyzer中能看到很多Lucene的影子,比如IK分詞的核心就是基于Lucene的,其中大量的導包也能看出來源于ApacheLucene?,F(xiàn)在有空也在研究IK分詞的算法以及原理,希望能給許久未更新的IK分詞加入自己的貢獻,IK分詞系統(tǒng)結構圖如圖4-1所示。圖4-1IK分詞的設計結構圖4.1.3相似度匹配模塊利用中文分詞工具將爬蟲系統(tǒng)采集回來的數據進行中文分詞之后,則需要分析文章的相似度,之后再將相似的文章的數據整合到一起,為之后可視化展示同一條新聞的變化趨勢打下基礎,其中計算文章相似度的算法有很多,主要來說是有兩種,一種是余弦定理,另一種是計算杰卡德距離的方法。1.余弦定理相似度計算法余弦定理是怎么能應用到計算文章的相似度呢?先想想余弦定理的概念,如果能將兩篇文章轉換為數學中的兩條向量,那么可以用過余弦定理來計算這兩條向量之間的夾角。具體應該怎么能將文章轉換為數學中的向量呢?這里就用到了中文分詞,然后可以將帶分析的漢語語料進行中文分詞,并保存各自的分詞結果集A,B。分詞結束后再另外設置一個集合S,令S=A∪B,那么分別計算A,B兩個集合中的詞語在原始預料中的詞頻,然后建立A、B到S的映射,如果S中有而A或者B中沒有,那么記該詞語的詞頻為0,那么就能得到兩條維度相同的向量,這樣就可以用余弦定理來計算相似度了。第一步,進行中文語料的分詞。句子A:我/喜歡/看/電視,不/喜歡/看/電影。句子B:我/不/喜歡/看/電視,也/不/喜歡/看/電影。第二步,列出所有漢語詞語的集合。我,喜歡,看,電視,電影,不,也。第三步,計算集合中每個詞語的詞頻。句子A:我1,喜歡2,看2,電視1,電影1,不1,也0。句子B:我1,喜歡2,看2,電視1,電影1,不2,也1。第四步,寫出每句話的詞頻向量。句子A:[1,2,2,1,1,1,0]。句子B:[1,2,2,1,1,2,1]。有了詞頻向量,中文文章的相似度計算問題就簡化了,變成了如何去計算這兩個詞頻向量的離合程度。首先可以把這兩條詞頻向量想象成存在于空間中的兩條任意線段,這兩條線段必然能組成類似于下圖的夾角,再計算夾角的余弦值。在這里討論下最簡單的維度,也就是二維空間,下圖的a和b是兩個字母分別代表兩個不同的向量,需要計算它們夾角的余弦值COSθ,如圖4-2所示。圖4-2兩向量形成夾角向量a,b所構成的夾角如圖4-3所示。
圖4-3向量a,b所構成的夾角可以采用下列公式來計算出夾角θ的余弦值,計算公式如圖4-4所示。圖4-4計算ab兩向量的余弦值公式如果是多維向量呢?如何計算多維向量在空間中的夾角的余弦值?經由數學推導,可以使用下面多維向量的余弦值計算公式如圖4-5所示。圖4-5多維向量的余弦值計算公式兩個漢語詞組的詞頻向量的余弦值可以作為這兩篇漢語語料整體相似度的度量,因為從數學上來講,當兩向量的余弦值越接近或完全等于0,則表明兩個向量的夾角是兩條方向完全垂直的,在中文語法的角度來解釋向量垂直,就是兩篇語料的分詞結果是完全沒有一樣的,這樣有很大的可信度表明,這兩篇文章內容是完全不相干的,反過來,如果倆向量的夾角的余弦接近或完全等于1,則表明這兩條向量幾乎可以看做成同一條向量,從中文語法的角度來解釋,也就是兩篇中文語料的分詞結果基本上是一致的,有很大的可信度表明,這兩篇文章的內容是完全類似的。由此,就得到了“找出相似文章”的一種算法:(1)使用中文分詞算法,首先需要找出這兩篇帶分析文章的重要關鍵詞。(2)從每篇文章分別取出所有的關鍵詞,將其合并成為一個集合,然后來計算這兩篇文章相對于關鍵詞集合的詞頻,這樣就生成了這兩篇文章兩條待分析的詞頻向量。(3)最后計算這兩個詞頻向量的余弦值,余弦值越接近于1則文章越相似?!坝嘞蚁嗨贫取笔且环N非常有用的算法,凡事想要知道任意兩個向量的相似程度,都可以使用余弦定理。4.1.4數據展示模塊經過相似度匹配算法匹配為相似文章的算法則存儲到同一條數據記錄之中存入數據庫,然后將相似數據讀取出來,將數據以可視化的形式展示出來,步驟如下:(1)將POJO對象轉換為JSON:JSON(JavaScriptObjectNotation)是一種非常輕量級的類似而又超越可擴展標記語言的數據交換的格式。JSON是基于ECMAScript的一個子集。JSON采用了完全獨立于任何編程語言的書寫格式,但也使用了非常類似C語言家族的一些語法習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。JSON一經推出,直到現(xiàn)在,在數據交換載體的選擇上完全有替代XML的趨勢。最近在公司寫的一個金融項目,是為財新網寫的債券實時行情的金融項目,項目中后臺數據傳送到前臺用的是Servlet,Servlet中是將從Service層中得到的數據對象(一般都是List、Map、或者其他的POJO對象),經過fastjson轉換成為JSON字符串,最終輸出在Servlet上。然后前臺js用ajax異步加載的方式調用Servlet,可以很容易的將獲取到的JSON字符串轉化為相關的對象。此外,有大量的測試表明,同樣字節(jié)數同樣大小的JSON可以裝載的數據信息量要比XML多出很多,這樣就表明,JSON的壓縮性更好,自身的負載效率高,所以,如今越來越多的網站數據交互、以及企業(yè)級的信息交互、經典的C-S模式都逐漸改用了JSON作為數據傳遞的載體。從JavaScript語言層來看,JSON儼然就是JavaScript中的數組類型與對象類型之間的組合體,有點類似與C語言中結構體strut的語法定義模式,很明顯,strut能通過對不同數據結構的組合,再添加各種各樣的數據嵌套,可以表示世界上任意一種信息格式,JSON非常類似于這種結構體,正因為JSON作為一種高效的數據載體來說可謂是“無所不能”,近些年,有關JSON的發(fā)展飛速而且迅猛。下面分別簡單介紹下JavaScript中的對象與數組:對象:JSON對象在js中表示為用“{}”括起來的內容,其數據結構為{key:value,key:value,...}的鍵值對的結構,在絕大多數的面向對象的編程語言中,key即鍵是對象屬性的名字,而value即值則是對象的屬性值。在C語言、Java、Python等語言中通過Object.key來取得value的具體的值。數組:數組在js中是中用括號“[]”符號包含起來的內容,js數組的數據結構如[“this”,“a”,“test”,...],使用數組的索引可以來獲取數據相應位置的數值,數值的數據類型包括各種各樣的數據類型:對象、字符串、數字、數組等等。實驗證明經過對象、數組2種數據結構是可以組合成各種各樣任意復雜度的數據結構。現(xiàn)如今,可以把POJO對象轉換為JSON的工具有很多,比如谷歌的Gson工具包,比如阿里貢獻的開源JSON轉換工具fastjson,本文使用了阿里巴巴的fastjson。Fastjson提供了包括JSON數據的“序列化”和“反序列化”兩部分的JSON相關的功能,其優(yōu)勢有:號稱對JSON數據的解析與反解析速度最快,測試表明,fastjson具有極快的性能,超越任其他的JavaJsonparser,包括自稱最快的JackJson。FastJson功能強大,完全支持Date、Enum、JavaBean、Set、Map、等常見的數據模式與類型,并且原生,能在所有Java能運行的地方運行。Java對象轉換為JSON格式,一般有以下幾種情況:Java普通單節(jié)點對象轉換為JSON的原理:通過對象的get()方法來獲取對象的屬性的值即JSON數據的值,然后通過get()方法的函數名得出具體是get的哪個成員變量,于是這樣就能得出了JSON數據的鍵,然后經過復合JSON語法的拼接與組合,就成功將對象轉換為了JSON。但如果對象沒有提供響應的get()方法呢?那么就需要通過Java的反射機制來拿出要轉換成JSON的對象的字段,然后判定哪些字段是必須的,同時拋棄掉“垃圾數據”的字段,最終將字段組合成JSON。組合成JSON的時候,其字段名稱作為String類型的key存在,其屬性值作為相對應數據類型的key存在,如圖4-6所示。圖4-6對象轉換為JSON原理圖Java普通單節(jié)點數組轉換為JSON的原理:Java普通單節(jié)點數組轉換為JSON可以由單節(jié)點轉換JSON拓展而來,如圖4-7所示。圖4-7對象數組轉換為JSON原理Java復合對象轉換為JSON的原理:Java符合對象轉換為JSON其實就是Java普通單節(jié)點對象轉換為JSON的原理的拓展,獲取了字段名字之后,獲取字段對應的屬性的時候,需要判定該屬性具體的數據類型,如果該屬性的具體數據類型是基本數據類型中的一種,就必須使用該數據類型對應的JSON表示方法表示出來(例如有沒有引號之分就是區(qū)別字符串變量與其他變量之間的區(qū)別的),如圖4-8所示。圖4-8復合對象轉換為JSON原理(2)將Json數據以可視化的形式展示出來顯示相似新聞數據使用了開放的圖表繪制類庫JfreeChart,JfreeChart工具使用純Java語言編寫而來,完全是為applications,applets,servlets以及JSP等的使用而設計。JFreeChart可以生成例如散點圖(scatterplots)、柱狀圖(barcharts)、餅圖(piecharts)、甘特圖(Ganttcharts)、時序圖(timeseries)等等多種圖表,此外還可以生成PNG和JPEG格式進行輸出,也可以和PDF和EXCEL等工具關聯(lián)。到目前為止,在Java中JFreeChart是非常不錯的統(tǒng)計圖形解決方案,JFreeChart基本上能夠滿足目前的Java在統(tǒng)計繪圖方面的各種需求。JFreeChart的優(yōu)秀特性包括以下幾點:一致的和清晰明確的API,而且支持多種圖表類型。設計非常靈活,對各種應用程序來說非常容易擴展。支持多種多樣的輸出類型,包括Swing組件、圖像文件(PNG、JPEG)、矢量圖形文件(PDF、EPS、SVG)。JFreeChart是完全“開源”的,或者更具體地說,自由軟件。它是遵循GNU協(xié)議的。JfreeChart優(yōu)點如下:穩(wěn)定、輕量級且功能非常強大。免費開源,但是開發(fā)手冊和示例要花錢購買。其API學習起來非常簡單,整個工具容易上手。生成的圖表運行非常地順暢。
4.2系統(tǒng)異常處理系統(tǒng)在運行過程中因為復雜的運行環(huán)境,可能會產生種種異常問題。4.2.1爬蟲異??傮w概況爬蟲異??傮w概況就是能讓爬蟲的維護人員能及時了解爬蟲的整體運行狀態(tài),例如當前爬蟲是否處于阻塞狀態(tài),阻塞的原因是什么,目前已經爬取了多少內容,還有多少內容有待爬?。慨斍芭老x正在爬取哪個頁面?爬蟲在進行數據存儲的過程中有哪些異常?通過上面的數據可以得到下列結論:
爬蟲程序的健壯性。觀察爬蟲爬取的網頁文檔數據,通過分析就能夠得出爬蟲在網頁文檔數據的時候出現(xiàn)的各種異常問題,便于爬蟲系統(tǒng)代碼的優(yōu)化。爬蟲程序的爬取效率。通過log系統(tǒng)記錄爬蟲爬取網頁時打印的Log,經過一些統(tǒng)計整合,可以得出爬蟲的數據采集能力究竟有多強,如果采集速度太慢,可以進行一些多線程方面的優(yōu)化處理,同時也要檢查是否是代碼某處出的BUG。爬蟲對客體網站的影響。如果發(fā)現(xiàn)爬蟲運行一段時間后,無法再從某個網站中采集到網頁文檔數據,這時候就算考慮下是否是爬蟲爬取網頁文檔數據過于頻繁而被網站管理員封鎖。4.2.2爬蟲訪問網頁被拒絕爬蟲大量爬取網站時,會對網站資源占用嚴重,所以很多網站加入了反爬蟲機制,大量爬取網站數據時,會出現(xiàn)AccessDenied一類的錯誤,網頁服務器直接拒絕了訪問,這時候爬蟲就得需要能偽裝的像一個真正的瀏覽器一樣,有如下方法:(1)偽裝User-AgentUser-Agent標明了瀏覽器的類型,以便Web網站服務器能識別不同類型的瀏覽器。為什么要識別不同類型的瀏覽器呢?現(xiàn)在主流的優(yōu)秀瀏覽器有windows10的Edge瀏覽器、微軟的IE系列瀏覽器、谷歌的Chrome瀏覽器、Mozilla的FireFox瀏覽器,還有來自挪威的Opera瀏覽器,這些瀏覽器五花八門,分別出自各自的廠家,所以面對同樣的html元素,他們的解析效果有可能是非常不同的,甚至會出現(xiàn)無法解析一些Html元素的情況,正式因為如此,所以Web網站服務器要判斷不同的瀏覽器以便提供不同支持方案(例如CSS中針對不同的瀏覽器可能需要不同的標注)。所以現(xiàn)在絕大部分的爬蟲為了能夠及時獲取網站的數據,通常會設置一個某種瀏覽器的User-Agent以此來“欺騙”網站,告訴Web網站服務器自己是某一種瀏覽器,然后網站Web服務器才會返回真實的網頁數據,一般比較常見幾個瀏覽器的User-Agent如下:Chrome的User-Agent:Mozilla/5.0(WindowsNT6.3;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/50.0.2661.102Safari/537.36火狐的User-Agent:Mozilla/5.0(WindowsNT6.3;WOW64;rv:44.0)Gecko/20100101Firefox/44.0IE的User-Agent:Mozilla/5.0(WindowsNT6.3;WOW64;Trident/7.0;.NET4.0E;.NET4.0C;.NETCLR3.5.30729;.NETCLR2.0.50727;.NETCLR3.0.30729;rv:11.0)likeGeckoHttpClient設置UserAgent的方法如下: HttpGetgetMethod=newHttpGet("URL");getMethod.setHeader("User-Agent","useragent內容");(2)需要登錄后才能訪問網頁數據雖然絕大部分網站不登陸就能訪問各個頁面的內容,隨著各個研究機構對互聯(lián)網數據的需求越來越多的情況下,各種各樣的爬蟲隨之誕生,但是一部分爬蟲會無節(jié)制的爬取網站,大大地消耗了網站的帶寬,導致正常的用戶都無法訪問網站,所以現(xiàn)在的絕大部分網站都相應推出了一些防護“惡意爬蟲”的策略,例如網站一旦檢測到某個IP的訪問量有異常,就會要求這個IP訪問的時候必須登錄后才能訪問。不過這樣也有解決方法,可以直接在該IP所在主機上用瀏覽器登錄,登錄成功之后,如果瀏覽器是Chrome或者firefox那么可以直接查看瀏覽器的cookie,用HttpClient設置cookie即可訪問即可。不過還有一些檢測機制特別嚴格的網站,登錄網站的時候必須填寫隨機驗證碼,這類網站的爬取難度可就大了,需要能識別網站隨機扭曲的驗證碼,這些問題在本文不做討論。(3)使用代理IP訪問如果網站服務器維護人員用某段時間內某IP的訪問次數來判定爬蟲,然后將這些爬蟲的IP都封掉的話,以上偽裝就失效了。為了解決爬蟲的IP被相關網站封停,仔細一想,如果爬蟲能模擬出一批用戶來訪問該網站不就能解決這個問題嗎?具體應該如何模擬呢?首先需要模擬出一個一個分散而又獨立的用戶,這就需要隨機而又分散到全國各地的IP代理,爬蟲運行的時候從這些IP代理中隨機選取一部分IP作為代理使用,這樣就能比較完美地解決單IP高頻率高流量訪問網站的問題了。擁有了這些IP代理之后,應該如何去管理這些代理IP呢?這里可以做一個類似于數據庫連接池的東西,當然這里存放的不是數據庫連接,而是一個一個的代理IP,然后指定相關的代理IP分配策略。代理IP池做好之后,要做一個負載均衡,每次輪流使用代理IP池中可以正常使用的IP做循環(huán)訪問,這樣單一IP對網頁服務器會迅速下降,非常明顯。
5軟件測試軟件測試是軟件系統(tǒng)開發(fā)的一系列流程與活動中的最后一個部分也是最重要的一個部分,是一種為了能保證軟件的邏輯上的嚴密性、嚴謹性、高可用性的解決方案。通過對軟件的邏輯分支的校驗,來確定軟件是否能達到需求分析中的要求,并且在最大程度上能保證軟件不會帶來其他的BUG。只有通過了軟件測試,整個軟件工程的最終產物才能交付給用戶使用。5.1白盒測試白盒測試是一種基于軟件邏輯結構設計的測試,在整個測試過程中,測試的參與者是完全熟知整個系統(tǒng)的邏輯分支的。白盒測試的盒子是指被測試的軟件系統(tǒng),白盒指的是程序結構與邏輯代碼是已知的,非常清楚盒子內部的邏輯結構以及運行邏輯的?!鞍缀小狈ㄈ媪私獬绦騼炔窟壿嫿Y構、對所有邏輯路徑都進行相關測試?!鞍缀袦y試”會爭取能夠測試完軟件系統(tǒng)中所有的可能的邏輯路徑。使用白盒測試的方式時,一定要先畫出軟件所有的邏輯順序結構與設計,然后再分別設計出合適而又全面的測試用例,最終完成白盒測試。5.1.1爬蟲系統(tǒng)測試結果因為爬蟲系統(tǒng)邏輯設計相對來說是比較簡單的,不涉及到基本路徑法,因為整個正序只需要定時運行就行,不像其他軟件系統(tǒng)那樣,有較深的用戶需求根基,需要相關人員配合使用。本次開發(fā)的爬蟲系統(tǒng)是全自動的,所以百合測試結果與黑盒測試結果一致。下圖為爬蟲系統(tǒng)的百合測試結果截圖,測試方法即定時運行爬蟲即可,下圖中的條目為爬蟲此次執(zhí)行所爬取到結果中的一部分,爬取結果如圖5-1所示。圖5-1爬蟲爬取結果5.1.2中文分詞系統(tǒng)測試結果中文分詞系統(tǒng)測試也比較簡單,沒有復雜的業(yè)務邏輯,結果基本呈線程順序,且執(zhí)行路徑唯一,下圖為中文分詞系統(tǒng)的白盒測試結果,首先是測試的語料的截圖,如圖5-2所示。圖5-2中文分詞原文最終的分詞結果如下,目前想要提高分詞結果非常困難,需要加大詞庫的準確性,白盒測試結果如圖5-3所示:圖5-3中文分詞結果5.1.3中文文章相似度匹配系統(tǒng)測試結果中文文章相似度計算方法采用了余弦定理計算兩篇文章所對應的漢語詞語的詞頻向量的夾角的余弦值,在經過大量的試驗后發(fā)現(xiàn)其準確率還是非常非常高的,測試結果如圖5-4所示。
圖5-4余弦定理相似度匹配可以看出,“國家專項計劃引蘇鄂家長擔憂教育部回應”這篇新聞與“向中西部調劑生源致高考減招數萬?湖北江蘇連夜回應”兩條新聞均是有關高考的,完美匹配到了一起,其次不排除有些極端的情況,導致匹配結果不正確,這個也會繼續(xù)研究,提高準確率。
5.1.4相似新聞趨勢展示系統(tǒng)測試結果相似新聞的展示采用了JfreeChart作為白盒測試的測試對象,測試結果如下圖所示,精確顯示了每一條新聞的關注度走勢,如圖5-5所示。圖5-5JfreeChart測試圖
5.2黑盒測試黑盒測試與白盒測試恰好相反,從名字就能看出,一黑一白,白盒測試者熟悉盒子中的內容,而黑盒測試者是完全不知道盒子中的內容的。黑盒測試主要是面向程序的功能實現(xiàn)而進行的測試,例如檢驗程序是否具有某一功能,而完全不必關心程序的邏輯設計。也就是說,整個黑盒測試關注的是軟件系統(tǒng)的功能完整性,而不考慮程序邏輯上的BUG等問題。5.2.1爬蟲系統(tǒng)測試結果上面已經提到,本爬蟲系統(tǒng)邏輯較為簡單,白盒測試結果與黑盒測試結果一致,結果如圖5-6所示。圖5-6爬蟲系統(tǒng)黑盒測試
5.2.2中文文章相似度匹配系統(tǒng)測試結果總體來說,黑盒測試的結果也是比較令人滿意的,同樣,瑕疵還是有的,這也是編程的挑戰(zhàn)與樂趣所在之處,黑盒測試結果如圖5-7所示。 圖5-7中文匹配黑盒測試5.2.3相似新聞趨勢展示系統(tǒng)測試結果黑盒測試相似新聞趨勢展示系統(tǒng)測試了Echarts的效果,以便能跟白盒測試JfreeChart區(qū)別開來,測試結果如圖5-8所示。
圖5-8黑盒測試新聞排行點擊上面的相關新聞會出現(xiàn)單個新聞的趨勢發(fā)展圖,如圖5-9所示。圖5-9echarts黑盒測試
6結論終于完成了,歷時三個月,我終于完成了《基于網絡爬蟲的網絡新聞分析》論文與程序的設計。整個歷程中,我真是感觸頗深,不過成就感是最大的,我可以高興地對全世界說“我做到了!”,雖然在系統(tǒng)的實現(xiàn)過程中,還有在論文的寫作過程中,困難重重,不過最終都被我一一解決克服了。首先來談一談收獲吧,之前有很多與本系統(tǒng)和論文相關的內容僅僅是略知一二,自己真正要使用這些知識的時候才發(fā)現(xiàn),自己了解的太片面了,知識面也太窄了,從對網絡爬蟲一無所知,對HttpClient,中文分詞等相關技術很不了解的狀態(tài),到現(xiàn)在能非常熟練的使用HttpClient來編寫具有我想要的功能的爬蟲,而且對現(xiàn)在的中文分詞理論有了很多自己的看法,同時也能非常熟練的調用IK分詞來進行中文分詞。不過這么一段時間的充電與學習,我也發(fā)現(xiàn)認識到了基于網絡新聞分析的網絡新聞挖掘所蘊含的巨大的潛力,非常具有商業(yè)價值。在這回論文的寫作與探究中,我接觸到了輿情分析這一門科學,《國語·周語上》上有句古語是這樣說的,“防民之口,甚于防川,川壅而潰,傷人必多,民亦如之”,這句話看似很簡單卻能在深層次地體現(xiàn)出人民輿情的重要與戰(zhàn)略性,不僅僅是針對國家,更是對各大商業(yè)機構的挑戰(zhàn)。當今各種商業(yè)競爭已經不僅僅局限于商業(yè)手段了,已經有很多公司開始利用輿情分析來作為消息獲取入口,分析這些消息的作用也越來越能顯現(xiàn)出來了。比如網絡上激增“某東”假貨橫行(例如“某東”之前賣的女士LV挎包是假貨這個消息被傳得沸沸揚揚),在網上引起了網民們的激輪,當其中一種觀點論調得到網民的認同認可后,網民們的輿情是很有可能對該事件的發(fā)展走向發(fā)生非常重大的影響。雖然事后有證明表示,這是競爭對手雇傭的網絡水軍故意抹黑的,假若在這之中,有相對專業(yè)的機構或單位收集了大量的輿情,勢必會利用這些網絡輿情進行分析抽取,定會得到很有價值的信息,得到些建議與批評,結合分析結果,可以做出一個最中肯最正確的決定。所以說輿情分析,就是一個風向標。最后總結下,輿情分析的價值與相關科學的發(fā)展必定在未來還會繼續(xù)火熱下去,做完了這個系統(tǒng),我自身也對整個互聯(lián)網的發(fā)展有點“刮目相看”了,我所在的角度還很低,需要不斷地學習,不斷地研究,這樣自己的研究成果才有所用,才不會過時。日新月異的互聯(lián)網,日新月異的互聯(lián)網價值。
參考文獻于娟,劉強.主題網絡爬蟲研究綜述[J].計算機工程與科學,2015,37(02):231-237.張紅云.基于頁面分析的主題網絡爬蟲的研究[D].武漢理工大學,2010.張瑩.面向動態(tài)頁面的網絡爬蟲系統(tǒng)的設計與實現(xiàn)[D].南開大學,2012.張曉雷.面向Web挖掘的主題網絡爬蟲的研究與實現(xiàn)[D].西安電子科技大學,2012.奉國和,鄭偉.國內中文自動分詞技術研究綜述[J].圖書情報工作,2011,55(2):41-45.許智宏,張月梅,王一.一種改進的中文分詞在主題搜索中的應用[J].鄭州大學學報,2014(5):44-48.歐振猛,余順爭.中文分詞算法在搜索引擎應用中的研究[J].計算機工程與應用,2000,36(08):80-82.Batsakis.S,PetrakisEGM,MiliosE.Improvingtheperformanceoffocusedwebcrawlers[J].Data&knowledgeengineering,2009,68(10):1001-1013.Pant.G,MenczerF.MySpiders:EvolveYourOwnIntelligentWebCrawlers[J].Autonomousagentsandmulti-agentsystems,2002,5(2):221-229.Ahmadi-AbkenariF,AliS.AClickstream-basedFocusedTrendParallelWebCrawler[J].InternationalJournalofComputerApplications,2010,9(5):24-28.
致謝最后我還要感謝我的老師,這次畢業(yè)設計在老師的悉心指導和嚴格要求下終于完成,從開題報告、方案論證到算法的研究,具體設計和調試,無不處處存留著老師們的心血和汗水,在四年的本科學習和生活期間,也始終能感受到老師們的精心指導、啟蒙和無私的關懷,我確實受益匪淺。在此向郭苗老師、武淑紅老師表示深深的感激感謝和崇高的敬意。
到如今,我所學的知識,細數來點點滴滴都是各位任課老師的認真負責一絲不茍的治學態(tài)度辛勤“耕耘”的結果,使我能夠熟練地掌握理解和運用專業(yè)知識,能做到厚積薄發(fā),我在此向大學,軟件工程專業(yè)的全體老師表示由衷的謝意,感謝他們四年來的辛苦栽培。
外文資料AFocusedTrendWebCrawler1.INTRODUCTIONThedimensionoftheWorldWideWebisbeingexpandedbyanunpredictablespeed.Asaresult,searchenginesencountermanychallengessuchasyieldingaccurateandup-to-dateresultstotheusers,andrespondingtheminanappropriatetimelymanner.Acentralizedsingle-processcrawlerisapartofasearchenginethattraversestheWebgraphandfetchesanyURLsfromtheinitialorseedURLs,keepstheminaprioritybasedqueueandtheninaniteratedmanner,accordingtoanimportancemetricselectsthefirstmostimportantKURLsforfurtherprocessingbasedonaversionofBest-firstalgorithm.Aparallelcrawlerontheotherhandisamulti-processescrawlerinwhichuponpartitioningtheWebintodifferentsegments,eachparallelagentisresponsibleforcrawlingoneoftheWebpartitions[9].Ontheotherendofspectrum,allpurposeunfocusedcrawlersattempttosearchovertheentireWebtoconstructtheirindexwhileafocusedcrawlerlimitsitsfunctionuponasemanticWebzonebyselectivelyseekingouttherelevantpagestopre-definedtopictaxonomyasanefforttomaintainareasonabledimensionoftheindex[8],[18].ThebottleneckintheperformanceofanycrawlerisapplyinganappropriateWebpageimportancemetricinordertoprioritizethecrawlfrontier.Sincewearegoingtoemployaclickstream-basedmetricasaheuristic,ourhypothesisistheexistenceofastandarduponwhichtheauthorizedcrawlershavetherighttoaccesstheserverlogfiles.Incontinue,wefirstreviewontheliteratureofparallelcrawlers,focusedcrawlersandtheexistedlink-basedandtext-basedWebpageimportancemetricsbydefiningthedrawbacksofeachofthem.Then,webrieflydiscussourclickstream-basedmetricsinceithasbeenthoroughlydiscussedinacompanionpaper.Next,theapplicationoftheclickstream-basedmetricwithinthearchitectureofafocusedparallelcrawlerwhichwecallitCFPcrawlerwillbepresented.2. PARALLELCRAWLRSAnappropriatearchitectureforaparallelcrawleristheoneinwhichtheoverlapoccurrenceof
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 七年級上冊 第四單元 14 回憶我的母親 公開課一等獎創(chuàng)新教學設計(表格式)
- 湖南醫(yī)藥學院《影視視聽語言》2023-2024學年第二學期期末試卷
- 湖北孝感美珈職業(yè)學院《產品設計競賽》2023-2024學年第二學期期末試卷
- 寧波大學《物理化學理論》2023-2024學年第二學期期末試卷
- 人工智能加速智能駕駛的進步與普及
- 貴州醫(yī)科大學神奇民族醫(yī)藥學院《海洋生物資源綜合利用》2023-2024學年第二學期期末試卷
- 河北美術學院《建筑工程材料》2023-2024學年第二學期期末試卷
- AI驅動的人形機器人創(chuàng)新應用探索
- 微短劇的受眾群體分析
- 2 找春天 公開課一等獎創(chuàng)新教學設計
- 山東省中考物理總復習 八上 第1講 機械運動
- 北京理工大學應用光學課件(大全)李林
- 國家綜合性消防救援隊伍消防員管理規(guī)定
- 河南省三門峽市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 2023年全國各地高考英語試卷:完形填空匯編(9篇-含解析)
- 五年級上冊數學習題課件 簡便計算專項整理 蘇教版 共21張
- 疼痛科的建立和建設
- 運動技能學習PPT課件
- 第六編元代文學
- 高考語文古詩詞必背重點提綱
- 超星爾雅學習通《大學生心理健康教育(蘭州大學版)》章節(jié)測試含答案
評論
0/150
提交評論