


版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章緒論1.1研究背景互聯(lián)網(wǎng)自誕生以來(lái)就對(duì)各行業(yè)和人們的生活方式產(chǎn)生著深刻的影響,而今更甚,網(wǎng)民規(guī)模在移動(dòng)互聯(lián)網(wǎng)興起后更是發(fā)生了爆炸式的增長(zhǎng)。根據(jù)2017年1月中國(guó)互聯(lián)網(wǎng)信息中心(CNNIC)發(fā)布的第39次《中國(guó)互聯(lián)網(wǎng)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告》截至2016年12月,我國(guó)網(wǎng)民規(guī)模達(dá)7.31億,普及率達(dá)到53.2%,超過(guò)全球平均水平3.1個(gè)百分點(diǎn),超過(guò)亞洲平均水平7.6個(gè)百分點(diǎn)\o""[1]。全年共計(jì)新增網(wǎng)民4299萬(wàn)人,增長(zhǎng)率為6.2%。中國(guó)網(wǎng)民規(guī)模已經(jīng)相當(dāng)于歐洲人口總量。隨著web2.0技術(shù)的不斷發(fā)展,互聯(lián)網(wǎng)上出現(xiàn)了如微博、微信、論壇等各類大型的社交平臺(tái)。特別是新浪微博,自誕生起就以鮮明的開(kāi)放性進(jìn)入大眾的生活中。移動(dòng)互聯(lián)網(wǎng)的高速發(fā)展更是推動(dòng)了其發(fā)展。新浪微博數(shù)據(jù)中心發(fā)布的《2016年度微博用戶發(fā)展報(bào)告》顯示,據(jù)2016年微博發(fā)布的第三季度財(cái)報(bào)中顯示,截止2016年9月30日,微博月活躍人數(shù)已達(dá)到2.97億,較2015年同期相比增長(zhǎng)34%;其中9月份移動(dòng)端在MAU總量中的占比為89%;9月的日活躍用戶達(dá)到1.32億,較去年同期增長(zhǎng)32%。從以上數(shù)據(jù)可以看出新浪微博在網(wǎng)絡(luò)意見(jiàn)匯聚和傳播中起了非常重要的作用,已經(jīng)成為輿情發(fā)展的主要媒介。因此,微博熱點(diǎn)可以作為當(dāng)前社會(huì)輿論熱點(diǎn)的一個(gè)側(cè)面體現(xiàn)。截至2016年12月,中國(guó)的網(wǎng)頁(yè)數(shù)量約為2360億個(gè),年增長(zhǎng)11.2%,數(shù)量較2010年增長(zhǎng)了近四倍。面對(duì)如此海量的數(shù)據(jù),傳統(tǒng)的以人力驅(qū)動(dòng)的文本挖掘系統(tǒng)其有限的處理能力已不再適用。大數(shù)據(jù)技術(shù)的出現(xiàn)讓我們對(duì)海量數(shù)據(jù)進(jìn)行快速處理成為了可能,其中ApacheSpark是當(dāng)前流行的大數(shù)據(jù)處理模型,具有快速、通用、簡(jiǎn)單等特點(diǎn)。Spark是針對(duì)MapReduce在迭代式機(jī)器學(xué)習(xí)算法和交互式數(shù)據(jù)挖掘等應(yīng)用方面的低效率,而提出的新的內(nèi)存計(jì)算框架,既保留了MapReduce的可擴(kuò)展性、容錯(cuò)性、兼容性,又彌補(bǔ)了MapReduce在這些應(yīng)用上的不足。1.2研究現(xiàn)狀1.2.1文本挖掘技術(shù)文本挖掘也稱文本中的知識(shí)發(fā)現(xiàn),是數(shù)據(jù)挖掘方法在文本數(shù)據(jù)集上的運(yùn)用旨在從大量非結(jié)構(gòu)化的文本集合中挖掘信息、發(fā)現(xiàn)知識(shí)。它是一個(gè)跨學(xué)科的交叉研究領(lǐng)域,涉及機(jī)器學(xué)習(xí)、自然語(yǔ)言處理、統(tǒng)計(jì)學(xué)等多個(gè)領(lǐng)域的知識(shí)和方法。近年來(lái),隨著數(shù)據(jù)存儲(chǔ)技術(shù)和互聯(lián)網(wǎng)的不斷發(fā)展,數(shù)據(jù)正以前所未有的速度迅速增長(zhǎng)和積累,特別是社交媒體的用戶每天都在創(chuàng)造大量的文本信息。這些數(shù)據(jù)一定程度上記錄了人們的行為態(tài)度、交往過(guò)程和互動(dòng)關(guān)系,為研究人們的社會(huì)化行為提供了新的可能。社會(huì)科學(xué)研究方法是我們認(rèn)識(shí)各種社會(huì)現(xiàn)象及事物的途徑,是我們獲取知識(shí)的重要方式。文本挖掘可以利用機(jī)器學(xué)習(xí)、自然語(yǔ)言處理等計(jì)算機(jī)技術(shù)從大量文本數(shù)據(jù)中發(fā)現(xiàn)模式、規(guī)律、趨勢(shì)等,為學(xué)者以定量手段進(jìn)行社會(huì)科學(xué)研究提供新的方法。社會(huì)計(jì)算的目的便在于架起自然科學(xué)與社會(huì)科學(xué)之間的橋梁,借助計(jì)算機(jī)技術(shù)形成一套完整的社會(huì)科學(xué)定量分析研究手段?;诖?,文本挖掘在社會(huì)科學(xué)領(lǐng)域研究中的應(yīng)用得到了學(xué)者們?cè)絹?lái)越多的關(guān)注。相關(guān)研究表明,近年來(lái)國(guó)際上關(guān)于文本挖掘的研究論文呈不斷上升趨勢(shì),且主要集中在自然科學(xué)領(lǐng)域。王繼成、潘金貴、張福炎于2000年在論文《web文本挖掘技術(shù)研究》中提出了一種才用多個(gè)agent體系結(jié)構(gòu)的web文本挖掘系統(tǒng)原型WebMiner.WebMiner。將多維文本分析與文本挖掘這兩種技術(shù)有機(jī)地結(jié)合起來(lái),以幫助用戶快速、有效地挖掘Web上的HTML文檔。陳建華、包煊于2010年在論文《Web挖掘系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)》中從文本挖掘定義、挖掘任務(wù)、挖掘分類等方面介紹了挖掘理論。在分詞中采用了近鄰法來(lái)減少訓(xùn)練樣本集中的樣本數(shù)量來(lái)加快算法的執(zhí)行速度。胡健、楊炳儒等人于2008年在論文《基于非結(jié)構(gòu)化數(shù)據(jù)挖掘結(jié)構(gòu)模型的Web文本聚類算法》中提出了一種新的Web文本聚類算法——基于DFSSM的Web文本聚類(WTCDFSSM)算法。該算法可以對(duì)各類遠(yuǎn)程教育站點(diǎn)上收集的文本資料信息自動(dòng)進(jìn)行聚類挖掘;采用網(wǎng)格結(jié)構(gòu)模型,幫助人們進(jìn)行文本信息導(dǎo)航;從海量文本信息源中快速有效地獲取重要的知識(shí)。黃曉斌、趙超于2009年在論文《文本挖掘在網(wǎng)絡(luò)輿情信息分析中的應(yīng)用》中介紹了網(wǎng)絡(luò)輿情的特點(diǎn)與作用,分析了文本挖掘技術(shù)的主要功能,提出網(wǎng)絡(luò)輿情信息挖掘分析模型,并以實(shí)例說(shuō)明文本挖掘在網(wǎng)絡(luò)輿情分析中的應(yīng)用。1.2.2大數(shù)據(jù)處理技術(shù)當(dāng)今時(shí)代是一個(gè)信息爆炸的時(shí)代,每時(shí)每刻都有大量的數(shù)據(jù)被生產(chǎn)、搬運(yùn)和應(yīng)用。為了解決原來(lái)越多海量數(shù)據(jù)的專業(yè)化、規(guī)?;庸?wèn)題,挖掘數(shù)據(jù)蘊(yùn)藏的價(jià)值,大數(shù)據(jù)處理技術(shù)應(yīng)運(yùn)而生。初代大數(shù)據(jù)并行處理框架Hadoop應(yīng)用最為廣泛,但是隨著大數(shù)據(jù)領(lǐng)域的研究和實(shí)踐不斷的深入,也暴露出一些問(wèn)題,如不適合低延遲數(shù)據(jù)訪問(wèn)、不能進(jìn)行迭代式數(shù)據(jù)處理等缺點(diǎn)。Spark基于內(nèi)存計(jì)算,自2013年成為Apache基金項(xiàng)目后高速發(fā)展,憑借其高效的數(shù)據(jù)處理能力和對(duì)實(shí)時(shí)、交互式數(shù)據(jù)訪問(wèn)的支持逐漸成為新一代的大數(shù)據(jù)處理引擎。其最新版本Spark2.1的機(jī)器學(xué)習(xí)庫(kù)中包含了豐富的數(shù)據(jù)挖掘相關(guān)算法,如LDA,聚類算法K-means、分類算法樸素貝葉斯等。能夠輕松應(yīng)歸常規(guī)的大規(guī)模文本挖掘場(chǎng)景,并具有很好的效果和很高的效率。但是,作為一種新興的技術(shù),面對(duì)多元的復(fù)雜的文本挖掘需求,還是有一定改進(jìn)的空間。1.3文章的內(nèi)容及意義本文的主要內(nèi)容包括了以下幾點(diǎn):介紹了文本挖掘的含義以及具體的實(shí)現(xiàn)過(guò)程,并特別針對(duì)社交網(wǎng)站的文本挖掘的相關(guān)知識(shí)進(jìn)行了學(xué)習(xí)和研究,包括了高效的用于新浪微博文本數(shù)據(jù)采集的網(wǎng)絡(luò)爬蟲技術(shù),用于文本挖掘處理的大數(shù)據(jù)處理技術(shù)以及對(duì)挖掘結(jié)果進(jìn)行直觀展示的數(shù)據(jù)可視化技術(shù)。對(duì)用于大規(guī)模文本挖掘的大數(shù)據(jù)相關(guān)技術(shù)進(jìn)行了研究,包括并行計(jì)算框架Spark、分布式存儲(chǔ)系統(tǒng)HDFS。對(duì)文本挖掘相關(guān)算法進(jìn)行了研究。實(shí)現(xiàn)了一個(gè)基于Sprak用于社交網(wǎng)站輿情領(lǐng)域的文本挖掘系統(tǒng),能夠快速準(zhǔn)確地對(duì)海量的消息進(jìn)行處理,得到準(zhǔn)確的分析結(jié)果。構(gòu)建了對(duì)挖掘后數(shù)據(jù)的可視化系統(tǒng),提供數(shù)據(jù)的直觀展示和用戶交互的處理。第2章相關(guān)知識(shí)與技術(shù)介紹本章介紹了web文本挖掘系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)的相關(guān)技術(shù),文本挖掘的實(shí)現(xiàn)流程和步驟,網(wǎng)絡(luò)爬蟲數(shù)據(jù)采集程序,數(shù)據(jù)的儲(chǔ)存與計(jì)算平臺(tái),以及數(shù)據(jù)的采集和可視化相關(guān)技術(shù)。2.1網(wǎng)絡(luò)爬蟲網(wǎng)絡(luò)爬蟲是一種按照一定規(guī)則自動(dòng)地抓取互聯(lián)網(wǎng)信息的程序或者腳本。一般來(lái)說(shuō),網(wǎng)絡(luò)爬蟲可以分為通用網(wǎng)絡(luò)爬蟲、聚焦網(wǎng)絡(luò)爬蟲、增量試網(wǎng)絡(luò)爬蟲一集DeepWeb爬蟲四種。其中通用網(wǎng)絡(luò)爬蟲一般作為搜索引擎的數(shù)據(jù)抓取部分。網(wǎng)絡(luò)爬蟲同樣是數(shù)據(jù)挖掘中數(shù)據(jù)集的重要來(lái)源之一。網(wǎng)絡(luò)技術(shù)迅速發(fā)展,互聯(lián)網(wǎng)則是大量信息的載體,怎樣高效地提取和利用這些信息成為了一個(gè)很大的挑戰(zhàn)。通用網(wǎng)絡(luò)爬蟲的特點(diǎn)是盡可能的提高網(wǎng)絡(luò)覆蓋率和抓取速率,有可能返回大量與需求不相關(guān)的內(nèi)容,這種方式在處理結(jié)構(gòu)復(fù)雜的信息時(shí)也有些吃力。因此部署運(yùn)行爬蟲的有限資源與近乎無(wú)限的互聯(lián)網(wǎng)信息就存在很大矛盾。為了解決這些問(wèn)題,提高數(shù)據(jù)采集效率,定向爬取網(wǎng)絡(luò)資源的聚焦爬蟲應(yīng)運(yùn)而生。它選擇性地爬行那些與預(yù)定好的主題相關(guān)頁(yè)面的網(wǎng)絡(luò)爬蟲。這樣的做法和通用爬蟲相比可以極大的節(jié)省網(wǎng)絡(luò)和硬件資源,同時(shí)抓取到的數(shù)據(jù)也具有更高的質(zhì)量,不但減輕了后續(xù)數(shù)據(jù)清洗的工作量還有助于對(duì)信息進(jìn)行進(jìn)一步的挖掘。爬蟲的一般工作流程是:從把精心挑選的初始URL放入待爬隊(duì)列開(kāi)始爬取,不斷掃描解析網(wǎng)頁(yè),從中抽取信息及URL,將其存入數(shù)據(jù)庫(kù),再?gòu)膾呙璧降男耈RL進(jìn)行新一輪的爬取,如此循環(huán)這個(gè)過(guò)程,就能達(dá)到采集大量信息的目地。聚焦爬蟲的工作流程較為復(fù)雜,需要根據(jù)一定的搜索策略從隊(duì)列中選擇下一步要抓取的URL,并重復(fù)上一過(guò)程,直到打到系統(tǒng)的某一條件時(shí)停止。另外,所有被爬蟲抓取的網(wǎng)頁(yè)還會(huì)被系統(tǒng)儲(chǔ)存,進(jìn)行一定的分析過(guò)濾,并建立索引,以便以后的查詢和檢索,此外這個(gè)過(guò)程得到的分析結(jié)果還可能對(duì)以后的抓取過(guò)程給出反饋和指導(dǎo)。圖2.1.1爬蟲執(zhí)行流程2.2文本挖掘文本挖掘是利用數(shù)據(jù)挖掘方法在文本數(shù)據(jù)集上的運(yùn)用,旨在運(yùn)用計(jì)算機(jī)技術(shù)從大量非結(jié)構(gòu)化的文本集合中抽取、歸納文本內(nèi)容,幫助人們從海量的文本數(shù)據(jù)集中發(fā)現(xiàn)有價(jià)值的信息和知識(shí)。實(shí)現(xiàn)的流程如圖2.1所示:圖2.2.1文本挖掘流程1.?dāng)?shù)據(jù)清洗互聯(lián)網(wǎng)上的文本數(shù)據(jù)巨大且形式不盡相同,為了使文本挖掘的效率更高結(jié)果更準(zhǔn),在使用挖掘算法對(duì)數(shù)據(jù)源進(jìn)行挖掘處理之前必須對(duì)采集到的源數(shù)據(jù)進(jìn)行數(shù)據(jù)清洗。其過(guò)程可以簡(jiǎn)要概括去除文本標(biāo)記、分詞、去除停用詞三個(gè)步驟。去除文本標(biāo)記:網(wǎng)站上的文本數(shù)據(jù)大都以HTML和XML格式進(jìn)行保存,其中包含大量用于格式化文本的標(biāo)簽。不僅如此,文本自身也含有大量標(biāo)點(diǎn)符號(hào)、特殊字符以及空格等。去除文本標(biāo)記的目的就是去除這些對(duì)文檔完整性沒(méi)有影響的部分,減少可能對(duì)挖掘結(jié)果造成的干擾。分詞:分詞是進(jìn)行中文文本挖掘的基礎(chǔ)和比較關(guān)鍵的步驟,常用的方法有詞庫(kù)對(duì)比和詞頻統(tǒng)計(jì)。其中基于詞頻統(tǒng)計(jì)的方法通過(guò)分析文本進(jìn)行分詞,不依賴詞典,效果較穩(wěn)定,而詞庫(kù)分詞的效果則受詞典質(zhì)量影響會(huì)有明顯波動(dòng)。去除停用詞:去除文本中的“的”、“地”、“得”這類虛詞,這些詞語(yǔ)只用來(lái)標(biāo)識(shí)自然語(yǔ)言中的語(yǔ)法關(guān)系而并不會(huì)對(duì)文本內(nèi)容的實(shí)際意義造成影響。2.文本表示很多文本數(shù)據(jù)無(wú)法直接被計(jì)算機(jī)處理,需要將文本轉(zhuǎn)換成計(jì)算機(jī)能夠識(shí)別的語(yǔ)言,用來(lái)獲取初始的文本特征集。布爾模型和空間向量模型是文本表示的兩種主要模型。其中布爾(Boolean)模型是基于集合論和布爾代數(shù)的一種簡(jiǎn)單檢索模型。它的特點(diǎn)是查找那些于某個(gè)查詢?cè)~返回為“真”的文檔。在該模型中,一個(gè)查詢?cè)~就是一個(gè)布爾表達(dá)式,包括關(guān)鍵詞以及邏輯運(yùn)算符。通過(guò)布爾表達(dá)式,可以表達(dá)用戶希望文檔所具有的特征但完全匹配會(huì)導(dǎo)致太多或者太少的結(jié)果文檔被返回。而向量空間模型(VSM)把對(duì)文本內(nèi)容的處理簡(jiǎn)化為向量空間中的向量運(yùn)算,并且它以空間上的相似度表達(dá)語(yǔ)義的相似度,直觀易懂。當(dāng)文檔被表示為文檔空間的向量,就可以通過(guò)計(jì)算向量之間的相似性來(lái)度量文檔間的相似性。3.特征選取對(duì)文本進(jìn)行語(yǔ)言學(xué)處理和數(shù)學(xué)處理后得到的結(jié)果,包括詞性、詞頻、TF-IDF分?jǐn)?shù)等都可作為文本的特征使用。比如向量空間模型可以直接使用TF-IDF分?jǐn)?shù)作為特征,通常,針對(duì)不同的任務(wù),可以使用不同的特征,比如情感分析會(huì)附帶上情感詞典(比如正面-情感詞的百分比、負(fù)面-情感詞的百分比、每個(gè)句子中否定詞個(gè)數(shù)、每個(gè)句子中程度副詞個(gè)數(shù)、每個(gè)句子特殊標(biāo)點(diǎn)符號(hào)個(gè)數(shù))作為新的特征。序列標(biāo)注模型,會(huì)使用序列邊界與否作為新的特征。
獲取新的特征后,可以使用傳統(tǒng)機(jī)器學(xué)習(xí)的降維方法,對(duì)數(shù)據(jù)進(jìn)行篩選和降維,比如主成分分析算法(PCA)、局部線性嵌入(LLE)、LDA、LaplacianEigenmaps拉普拉斯特征映射等。2.3分布式存儲(chǔ)系統(tǒng)——HDFSHDFS(HadoopDistributedFileSystem)是Apache基金會(huì)Hadoop項(xiàng)目的一個(gè)子項(xiàng)目。它是一個(gè)高度容錯(cuò)的分布式文件系統(tǒng),設(shè)計(jì)用于在低成本硬件上使用。它屏蔽了具體的技術(shù)細(xì)節(jié),從最終用戶的角度來(lái)看,他就想傳統(tǒng)的文件系統(tǒng)一樣,可以通過(guò)目錄路徑對(duì)文件執(zhí)行各種操作。HDFS主要有以下幾個(gè)特點(diǎn):HDFS適合儲(chǔ)存大量文件,總儲(chǔ)存量可以達(dá)到PB,EB級(jí)。HDFS也適合存儲(chǔ)單個(gè)的文件,單個(gè)文件一般在百兆級(jí)別以上,不大適合處理大量的小文件?;诹畠r(jià)的普通硬件,可以容忍硬件出錯(cuò)。系統(tǒng)中的某一臺(tái)或幾臺(tái)服務(wù)器出現(xiàn)故障的時(shí)候,系統(tǒng)仍然可以利用備份保證數(shù)據(jù)的完整性。基于簡(jiǎn)單的一致性模型,HDFS應(yīng)用程序需要滿足一次寫入,多次讀取一個(gè)文件的訪問(wèn)模式,支持追加操作,但無(wú)法對(duì)已經(jīng)存在的數(shù)據(jù)進(jìn)行修改。支持順序的數(shù)據(jù)流訪問(wèn),HDFS適合處理批量數(shù)據(jù)而不適合用于隨機(jī)定位訪問(wèn)。同時(shí),它側(cè)重高吞吐量的數(shù)據(jù)訪問(wèn),可以容忍數(shù)據(jù)的高延遲,不大適合需要低延遲數(shù)據(jù)系統(tǒng)的構(gòu)建由于分布式存儲(chǔ)系統(tǒng)的性質(zhì),HDFS集群擁有一個(gè)NameNode和多個(gè)DataNode。NameNode管理文件系統(tǒng)的元數(shù)據(jù),DataNode存儲(chǔ)實(shí)際的數(shù)據(jù)??蛻舳送ㄟ^(guò)同NameNode與DataNodes的交互訪問(wèn)文件系統(tǒng)??蛻舳讼騈ameNode發(fā)送請(qǐng)求以獲取文件的元數(shù)據(jù),而真正的文件I/O操作是直接和DataNode進(jìn)行交互的。圖2.3.1HDFS架構(gòu)2.4大數(shù)據(jù)處理框架SparkSpark于2009年誕生于加州大學(xué)伯克利分校AMPLab。目前,已經(jīng)成為Apache軟件基金會(huì)旗下的頂級(jí)開(kāi)源項(xiàng)目。它和Hadoop的MapReduce計(jì)算框架類似,但是相對(duì)于MapReduce,Spark憑借其可伸縮、基于內(nèi)存等特點(diǎn)以及可以直接讀寫Hadoop上任何格式數(shù)據(jù)的優(yōu)勢(shì),進(jìn)行批處理時(shí)更加高效,并且具有更低的延遲。Spark已經(jīng)成為輕量數(shù)據(jù)快速處理的統(tǒng)一平臺(tái),各種不同的應(yīng)用,如實(shí)時(shí)流處理,機(jī)器學(xué)習(xí),交互式查詢等,都可以通過(guò)Spark建立在不同的存儲(chǔ)和運(yùn)行系統(tǒng)上。2.4.1Spark核心組件以Spark為核心的整個(gè)生態(tài)圈,最底層為分布式存儲(chǔ)系統(tǒng)HDFS、AmazonS3、Mesos,或者其他格式的存儲(chǔ)系統(tǒng)(如Hbase,Hive等);資源管理采用Mesos、YARN等集群資源管理模式,或者Spark自帶的獨(dú)立運(yùn)行模式,以及本地運(yùn)行模式。在Spark大數(shù)據(jù)處理框架中,Spark為上層多種應(yīng)用提供服務(wù)。例如,SparkSQL提供SQL查詢服務(wù),性能比Hive快3~50倍;MLlib提供機(jī)器學(xué)習(xí)服務(wù);GraphX提供圖計(jì)算服務(wù);SparkStreaming將流式計(jì)算分解成一系列短小的批處理計(jì)算,并且提供高可靠和吞吐量服務(wù)。值得說(shuō)明的是,無(wú)論是SparkSQL、SparkStreaming、GraphX還是MLlib,都可以使用Spark核心API處理問(wèn)題,它們的方法幾乎是通用的,處理的數(shù)據(jù)也可以共享,不僅減少了學(xué)習(xí)成本,而且其數(shù)據(jù)無(wú)縫集成大大提高了靈活性。圖2.4.1Spark核心組件2.4.2彈性分布式數(shù)據(jù)集——RDDSpark的核心概念是RDD,全稱為ResilientDistributedDatasets,是一個(gè)容錯(cuò)的、并行的數(shù)據(jù)結(jié)構(gòu),可以分布在集群的節(jié)點(diǎn)上,以函數(shù)式編程操作集合的方式進(jìn)行各種并行操作。可以將RDD理解為一個(gè)具有容錯(cuò)機(jī)制的特殊集合,它提供了一種只讀、只能有已存在的RDD變換而來(lái)的共享內(nèi)存,然后將所有數(shù)據(jù)都加載到內(nèi)存中,方便進(jìn)行多次重用。RDD是彈性的,當(dāng)內(nèi)存不足時(shí)它還可以與磁盤進(jìn)行數(shù)據(jù)交換。RDD的實(shí)質(zhì)是一種更為通用的迭代并行計(jì)算框架,用戶可以顯式地控制計(jì)算的中間結(jié)果并用其再次進(jìn)行后續(xù)的計(jì)算。2.4.3Spark工作流程Spark的任務(wù)從創(chuàng)建SparkApplication的運(yùn)行環(huán)境——啟動(dòng)SparkContext開(kāi)始,在SparkContext的初始過(guò)程中會(huì)分別創(chuàng)建DAGScheduler作業(yè)調(diào)度和TaskScheduler兩級(jí)任務(wù)調(diào)度模塊。隨后SparkContext向資源管理器(根據(jù)實(shí)際情況確定,可能是Standalone、Mesos、Yarn)申請(qǐng)Executor資源,再由資源管理器分配資源并啟動(dòng)StandaloneExecutorBackend,executor,之后向SparkContext申請(qǐng)Task。DAGScheduler將job劃分為多個(gè)stage,并將Stage提交給TaskScheduler,Tsak在Executor上運(yùn)行,運(yùn)行完畢后將釋放所有資源。圖2.4.2Spark工作流程2.4.4Spark的優(yōu)勢(shì)①快速處理能力。Spark允許將中間輸出和結(jié)果存儲(chǔ)在內(nèi)存中,節(jié)省了大量的磁盤IO。同時(shí)Spark自身的DAG執(zhí)行引擎也支持?jǐn)?shù)據(jù)在內(nèi)存中的計(jì)算。根據(jù)Spark官方的數(shù)據(jù),Spark性能大約比Hadoop高了100倍,即使內(nèi)存不足需要磁盤IO,這時(shí)也要比Hadoop快上十倍。②易于使用。Spark現(xiàn)在支持Java、Scala,Python和R等語(yǔ)言編寫應(yīng)用程序,大大降低了使用的門檻。自帶了80多個(gè)高等級(jí)操作符,允許在Scala,Python,R的shell中進(jìn)行交互式查詢。③支持流式計(jì)算。與MapReduce只能處理離線數(shù)據(jù)相比,Spark對(duì)實(shí)時(shí)的流計(jì)算提供了支持。SparkStreaming提供了對(duì)數(shù)據(jù)實(shí)時(shí)處理功能的支持,其流式處理能力還要強(qiáng)于Storm。④可靠性高。Spark自身實(shí)現(xiàn)了Standalone部署模式,在這種模式下,Master節(jié)點(diǎn)可以有不止一個(gè),解決了Master節(jié)點(diǎn)可能出現(xiàn)故障的問(wèn)題。⑤豐富的數(shù)據(jù)源支持。除了對(duì)操作系統(tǒng)自身的文件系統(tǒng)和HDFS提供了支持,Spark還很好地支持了Cassandra,HBase,Hive等作為數(shù)據(jù)源。2.5數(shù)據(jù)可視化海量數(shù)據(jù)的涌現(xiàn),數(shù)據(jù)過(guò)剩和信息超載等問(wèn)題促使了數(shù)據(jù)可視化技術(shù)的出現(xiàn)。數(shù)據(jù)時(shí)代數(shù)據(jù)可視化成為理解和表達(dá)數(shù)據(jù)的有效手段甚至是唯一手段。數(shù)據(jù)可視化主要旨在借助圖形化的手段,清晰有效地展現(xiàn)與傳達(dá)信息。一方面,數(shù)據(jù)賦予可視化以意義。另一方面可視化增加數(shù)據(jù)的靈性,兩者相輔相成,幫助人從信息中提取知識(shí)、從知識(shí)中收獲價(jià)值。文本可視化是數(shù)據(jù)可視化的一個(gè)子命題,其大致流程如圖2.5.1所示。文本可視化涵蓋了信息收集、數(shù)據(jù)預(yù)處理、知識(shí)表示、視覺(jué)呈現(xiàn)和交互等過(guò)程。其中,數(shù)據(jù)挖掘和自然語(yǔ)言處理等技術(shù)充分發(fā)揮計(jì)算機(jī)的自動(dòng)處理能力,將無(wú)結(jié)構(gòu)的文本信息自動(dòng)轉(zhuǎn)換為可視的有結(jié)構(gòu)信息。可視化呈現(xiàn)可以讓人類視覺(jué)認(rèn)知、關(guān)聯(lián)、推理的能力得到充分的發(fā)揮,為人們更好的理解文本和發(fā)現(xiàn)知識(shí)聽(tīng)過(guò)了新的有效途徑。文本文本分析信息收集數(shù)據(jù)預(yù)處理知識(shí)表示可視化呈現(xiàn)可視化呈現(xiàn)視覺(jué)交互視覺(jué)編碼操作數(shù)據(jù)圖2.5文本可視化基本框架第3章挖掘算法研究本章為web文本挖掘系統(tǒng)的實(shí)現(xiàn)作了算法的研究,在熱點(diǎn)內(nèi)容的抽取上,準(zhǔn)備采用經(jīng)典的特征提取算法TF-IDF算法。3.1TF-IDF算法3.1.1TF-IDF算法介紹TF-IDF算法是一種用于信息檢索與文本挖掘的常用加權(quán)算法,可以用于一個(gè)詞在一個(gè)文件或者一個(gè)文件對(duì)于一個(gè)語(yǔ)料庫(kù)的重要程度的評(píng)估。字詞的重要性隨它的文本中出現(xiàn)的頻數(shù)成正比增加,同時(shí)還會(huì)隨著她在語(yǔ)料庫(kù)中出現(xiàn)的頻率成反比下降。在一個(gè)給定的文件里,詞頻(termfrequency,tf)指的是給定的詞語(yǔ)在該文件中出現(xiàn)的頻率。它是對(duì)詞數(shù)(termcount)的歸一化,避免更偏向于長(zhǎng)文本。(文本越長(zhǎng)同一個(gè)詞語(yǔ)在該文件內(nèi)可能會(huì)比在較短的文件內(nèi)有更高的詞數(shù),與該詞的重要程度無(wú)關(guān)。)對(duì)于在某個(gè)特定文件的詞titfi,j=ni,jkn在以上式子中ni,j是該詞在文件dj中出現(xiàn)的次數(shù),分母為文件逆文件頻率(inversedocumentfrequency,idf)是度量一個(gè)詞語(yǔ)普遍重要性的參數(shù)。某一個(gè)特定詞語(yǔ)的idf,可以由總文件數(shù)目除以包含該詞語(yǔ)文件的數(shù)目,將其商進(jìn)行取對(duì)數(shù)運(yùn)算得到:idfi=logDj:t其中D表示語(yǔ)料庫(kù)中的文件總數(shù),j:ti∈dj表示包含詞語(yǔ)ti的文件數(shù)目(最后tfidfi,j值由tfi,j值與tfidfi,j=tfi,j×idf在某一特定文檔內(nèi)有高詞頻,以及該詞在整個(gè)文檔集合中有著低文件頻率,那么該詞將有高權(quán)重的tf-idf值。3.1.2TF-IDF算法的理論依據(jù)及不足TF-IDF算法創(chuàng)建在這樣一個(gè)假設(shè)之上:對(duì)區(qū)別文檔最有意義的詞語(yǔ)應(yīng)該是那些在文檔中出現(xiàn)頻率高,而在整個(gè)文檔集合(語(yǔ)料庫(kù))中出現(xiàn)頻率少的詞,所以如果特征空間坐標(biāo)系取tf詞頻來(lái)作為測(cè)度,就能體現(xiàn)同類文本的特點(diǎn)。另外考慮到單詞有區(qū)分不同不同類別的能力,TF-IDF算法認(rèn)為一個(gè)詞出現(xiàn)的文本頻數(shù)越小,他區(qū)別不同文本的能力就越強(qiáng)。因此引入了逆文本頻度idf的概念,以tf和idf的乘積作為特征空間坐標(biāo)系的最終測(cè)度,并用它完成多權(quán)值tf的修正,調(diào)整權(quán)值的主要目的是突出重要單詞,抑制次要單詞。但是在本質(zhì)上idf是一種試圖抑制噪聲的加權(quán),并且單純地認(rèn)為文本頻率小的詞更重要,文本頻率大的詞就更次要,顯然這不是完全正確的。idf的簡(jiǎn)單結(jié)構(gòu)并不能完全準(zhǔn)確地反映單詞的重要程度和特征詞的分布狀況,因此它并不能很好地完成對(duì)權(quán)值的修正功能,因此TF-IDF算法的精度并不是很高。3.1.3算法的改進(jìn)思路在實(shí)際應(yīng)用中,我們可以人為地增加判別條件對(duì)部分詞語(yǔ)進(jìn)行加權(quán)處理。例如詞語(yǔ)在一句話中的位置,我們可給在句首、句中、句尾的詞語(yǔ)分別賦予不同的額外權(quán)值,通過(guò)一定的公式計(jì)算,對(duì)出現(xiàn)在這些位置的詞語(yǔ)進(jìn)行加權(quán)操作。此外,詞語(yǔ)帶有的符號(hào)修飾也值得關(guān)注,例如在互聯(lián)網(wǎng)網(wǎng)頁(yè)文本數(shù)據(jù)中,我們可以根據(jù)不同的標(biāo)簽對(duì)其中詞語(yǔ)進(jìn)行不同的加權(quán)處理。微博文本數(shù)據(jù)中,我們可以根據(jù)消息自帶的話題標(biāo)簽對(duì)該詞進(jìn)行加權(quán)。通過(guò)類似這樣的加權(quán)方式,我們可以盡可能修正原生算法得到的權(quán)值,從而得到更加切合實(shí)際的執(zhí)行結(jié)果。第4章系統(tǒng)總體設(shè)計(jì) 本章的目標(biāo)是完成一個(gè)基于Spark的Web文本挖掘系統(tǒng)的設(shè)計(jì)。該系統(tǒng)以社交網(wǎng)站(新浪微博)輿情信息作為文本挖掘的對(duì)象,以并行計(jì)算框架Spark作為計(jì)算平臺(tái),實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)輿情熱點(diǎn)的文本挖掘工作。4.1系統(tǒng)需求概要系統(tǒng)功能的主要目標(biāo)可以概括成以下內(nèi)容:系統(tǒng)能夠完成大量互聯(lián)網(wǎng)社交網(wǎng)站(新浪微博)上的輿情信息生成文本數(shù)據(jù)集,利用并行計(jì)算框架Spark按照一定的挖掘算法對(duì)采集到的文本進(jìn)行挖掘,對(duì)當(dāng)前輿情熱詞進(jìn)行抽取,最終通過(guò)web頁(yè)面方式對(duì)挖掘結(jié)果進(jìn)行數(shù)據(jù)可視化操作。4.1.1文本采集Web信息有著數(shù)量很大,更新很快及規(guī)范性較差的特點(diǎn),用戶自行采集、存儲(chǔ)數(shù)據(jù)有著很大的難度,也很難對(duì)采集的格式進(jìn)行統(tǒng)一,因此,系統(tǒng)需要提供文本采集模塊,能夠自動(dòng)完成網(wǎng)頁(yè)的解析以及文本采集工作。4.1.2數(shù)據(jù)存儲(chǔ)由于系統(tǒng)所使用的數(shù)據(jù)集較大以及存儲(chǔ)系統(tǒng)需要與Spark進(jìn)行對(duì)接,所以存儲(chǔ)系統(tǒng)需要能夠很好地支持大規(guī)模文件的批量讀取操作,此外還要能夠?qū)换ナ讲樵冞M(jìn)行良好的支持。4.1.3文本分析文本分析功能需要為用戶從已經(jīng)采集到的海量的文本數(shù)據(jù)集中快速、準(zhǔn)確地抽取出熱點(diǎn)內(nèi)容。4.1.4結(jié)果可視化結(jié)果可視化功能需要實(shí)現(xiàn)將文本分析的結(jié)果高效、清晰地傳遞給用戶,通過(guò)一定的交互手段讓使用者能夠很快了解分析的效果。4.2系統(tǒng)設(shè)計(jì)概要4.2.1系統(tǒng)架構(gòu)設(shè)計(jì)根據(jù)對(duì)系統(tǒng)功能需求的分析,決定系統(tǒng)基于B/S架構(gòu)進(jìn)行構(gòu)建,系統(tǒng)架構(gòu)設(shè)計(jì)圖如下:服務(wù)器端Internet服務(wù)器端Internet數(shù)據(jù)采集數(shù)據(jù)存儲(chǔ)用戶交互響應(yīng)可視化生成瀏覽器端文本挖掘圖4.2.1系統(tǒng)架構(gòu)設(shè)計(jì)圖數(shù)據(jù)采集、數(shù)據(jù)存儲(chǔ)以及文本挖掘功能均在服務(wù)器端實(shí)現(xiàn)。數(shù)據(jù)采集功能負(fù)責(zé)解析網(wǎng)頁(yè),從互聯(lián)網(wǎng)上抓取目標(biāo)數(shù)據(jù)。數(shù)據(jù)存儲(chǔ)功能需要將采集程序得到的大規(guī)模數(shù)據(jù)進(jìn)行存儲(chǔ),以備挖掘使用。文本挖掘功能包含文本清洗和去停用詞以及特征提取幾個(gè)步驟,最終實(shí)現(xiàn)從采集到數(shù)據(jù)中抽取熱點(diǎn)信息。瀏覽器端是終端用戶與系統(tǒng)的交互接口,根據(jù)用戶交互動(dòng)作與服務(wù)器端進(jìn)行通信,從而反饋相應(yīng)信息到瀏覽器端。隨后將從服務(wù)器端返回的挖掘結(jié)果進(jìn)行可視化處理,便于用戶查看。并根據(jù)用戶需求返回相關(guān)原始信息。4.2.2系統(tǒng)模塊劃分與技術(shù)選取根據(jù)系統(tǒng)架構(gòu)設(shè)計(jì),可將系統(tǒng)所有功能拆分為三個(gè)主要的功能模塊,其中數(shù)據(jù)采集模塊主要負(fù)責(zé)網(wǎng)頁(yè)解析和目標(biāo)信息的抓取,文本挖掘模塊負(fù)責(zé)采集數(shù)據(jù)的存儲(chǔ)以及對(duì)采集數(shù)據(jù)的分析挖掘。文本數(shù)據(jù)可視化模塊負(fù)責(zé)將挖掘用戶交互及結(jié)果展示。文本文本挖掘Spark數(shù)據(jù)查詢Elasticsearch數(shù)據(jù)存儲(chǔ)Mongodb/HDFS爬蟲程序Scrapy數(shù)據(jù)可視化Django文本數(shù)據(jù)集用戶請(qǐng)求數(shù)據(jù)文本挖掘模塊數(shù)據(jù)采集模塊圖4.2.2系統(tǒng)模塊劃分?jǐn)?shù)據(jù)采集模塊采用了Python語(yǔ)言下基于Twisted異步網(wǎng)絡(luò)庫(kù)的網(wǎng)絡(luò)爬蟲框架Scrapy進(jìn)行編寫。由于具有并發(fā)抓取的特性,因此基于Scrapy編寫的網(wǎng)絡(luò)爬蟲能夠快速準(zhǔn)確地將需要的結(jié)構(gòu)化的數(shù)據(jù)從網(wǎng)頁(yè)中解析抽取出來(lái),然后將其進(jìn)行存儲(chǔ)。文本挖掘模塊主要分為三個(gè)部分,文本挖掘、數(shù)據(jù)存儲(chǔ)以及數(shù)據(jù)查詢。文本挖掘部分才用并行計(jì)算框架Spark進(jìn)行處理,能夠高效地完成對(duì)海量數(shù)據(jù)的處理。文本存儲(chǔ)部分采用非關(guān)系型數(shù)據(jù)庫(kù)MongoDB和HDFS,MongoDB對(duì)接數(shù)據(jù)采集模塊,HDFS對(duì)接文本挖掘模塊,保證能夠?yàn)橄到y(tǒng)提供最大化的存儲(chǔ)性能。數(shù)據(jù)查詢部分采用基于Lucene的搜索引擎Elasticsearch實(shí)現(xiàn),保證能夠?yàn)榭梢暬K提供精準(zhǔn)、快速的查詢。數(shù)據(jù)可視化模塊采用Python語(yǔ)言下的Django框架進(jìn)行web應(yīng)用構(gòu)建,熱點(diǎn)信息的詞云化處理采用pytagcloud包繪制,頁(yè)面與后臺(tái)的數(shù)據(jù)交換才用Ajax請(qǐng)求實(shí)現(xiàn)。模塊的整體布局和效果實(shí)現(xiàn)基于HTML、CSS和JavaScript,能夠清晰地將熱點(diǎn)信息展現(xiàn)在web頁(yè)面上,同時(shí)提供用戶與服務(wù)器端的交互服務(wù),滿足需求的同時(shí)也具有很好的跨平臺(tái)支持。4.2.3數(shù)據(jù)處理流程系統(tǒng)內(nèi)的數(shù)據(jù)處理由數(shù)據(jù)采集程序、并行計(jì)算框架Spark、HDFS以及MongoDB一起完成。數(shù)據(jù)在系統(tǒng)內(nèi)的處理流程大致如下:新浪微博網(wǎng)頁(yè)新浪微博網(wǎng)頁(yè)Scrapy爬蟲程序MongoDB計(jì)算框架SparkHTML清洗后文本RDD挖掘結(jié)果TXTITEMHDFS圖4.2.3系統(tǒng)數(shù)據(jù)處理流程數(shù)據(jù)最初以HTML形式進(jìn)入數(shù)據(jù)采集模塊,由Scarpy編寫的爬蟲程序進(jìn)行解析和處理,隨后存儲(chǔ)進(jìn)非關(guān)系型數(shù)據(jù)庫(kù)MongoDB,將數(shù)據(jù)導(dǎo)出清洗后上傳至HDFS。計(jì)算框架Spark從HDFS讀取經(jīng)清洗后的數(shù)據(jù)轉(zhuǎn)換成Spark下特有數(shù)據(jù)結(jié)構(gòu)RDD進(jìn)行挖掘處理,最終以將挖掘結(jié)果以TXT文件形式進(jìn)行輸出。4.2.4用戶界面設(shè)計(jì)系統(tǒng)的用戶界面也就是數(shù)據(jù)的可視化頁(yè)面。主要包含兩個(gè)功能提供對(duì)Spark處理后的最終數(shù)據(jù)和原始數(shù)據(jù)中與熱點(diǎn)相關(guān)數(shù)據(jù)的可視化。主界面主要分為兩個(gè)模塊,熱點(diǎn)信息詞云以及相關(guān)原始數(shù)據(jù)展示列表。WWeb文本挖掘系統(tǒng)熱點(diǎn)詞云原始微博列表圖4.2.4系統(tǒng)界面概要圖第5章系統(tǒng)實(shí)現(xiàn)本章將對(duì)系統(tǒng)設(shè)計(jì)的細(xì)節(jié)實(shí)現(xiàn)做詳細(xì)的介紹,包括從系統(tǒng)各部分的環(huán)境部署搭建到詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)。此外最后對(duì)系統(tǒng)進(jìn)行了測(cè)試運(yùn)行,實(shí)現(xiàn)了針對(duì)新浪微博輿情數(shù)據(jù)的文本挖掘。5.1系統(tǒng)運(yùn)行環(huán)境系統(tǒng)由分布式服務(wù)器集群作為承載硬件,因未大規(guī)模投入生產(chǎn),在本地使用VMwareStation創(chuàng)建三臺(tái)虛擬機(jī)模擬分布式服務(wù)器集群。集群由一個(gè)主機(jī)兩從機(jī)構(gòu)成,具體配置如下:表5.1-1系統(tǒng)硬件配置名稱配置數(shù)量物理機(jī)16GRAM,CPUI7-4710MQ,1T硬盤1集群主機(jī)(master節(jié)點(diǎn))2GRAM,CPU1核,30G硬盤1集群從機(jī)(slave節(jié)點(diǎn))2GRAM,CPU1核,30G硬盤2表5.1-2系統(tǒng)運(yùn)行環(huán)境環(huán)境名稱具體版本集群服務(wù)器操作系統(tǒng)CentOS6.5JDK1.7Hadoop2.6.0Spark1.6.2Python2.75.2系統(tǒng)環(huán)境搭建5.2.1HDFS的搭建HDFS(TheHadoopDistributeFileSystem)是大數(shù)據(jù)處理框架Hadoop的一部分,因此安裝HDFS即安裝Hadoop框架。一般來(lái)說(shuō),Hadoop的安裝需要經(jīng)過(guò)以下步驟:①添加專用的hadoop用戶賬戶,避免直接使用root賬戶可能帶來(lái)的安全隱患。②解壓JDK到/opt目錄,修改/etc/profile文件設(shè)置path及classpath為JDK目錄。③安裝ssh-server,在集群各個(gè)服務(wù)器上生成公鑰,并將該公鑰復(fù)制到集群中的其他服務(wù)器上并添加到的授權(quán)文件中。集群中的三臺(tái)服務(wù)器均要執(zhí)行此步驟,實(shí)現(xiàn)集群中服務(wù)器間兩兩免密碼登錄。④解壓hadoop安裝包到/opt目錄,修改hadoop目錄下/etc/hadoop目錄下的配置文件core-site.xml隨后將slaves文件的內(nèi)容更改為slave01,slave02。⑤將配置好的hadoop復(fù)制至從機(jī)slave01,slave02。⑥將集群中所有服務(wù)器的主機(jī)名與IP地址添加進(jìn)每臺(tái)服務(wù)器的hosts文件中。⑦執(zhí)行命令hdfsnamenode–format格式化namenode,初始化hadoop。5.2.2Spark框架的安裝①解壓spark安裝包到/opt目錄。②將spark安裝目錄conf目錄下spark-env.sh.template重命名為spark-env.sh,在該配置文件內(nèi)添加以下JAVA_HOME、HADOOP_HOME,SCALA_HOME、HADOOP_CONF_DIR、SPARK_MASTER_HOST等關(guān)鍵配置項(xiàng)的配置。③在conf目錄下slaves中添加從機(jī)的主機(jī)名,完善集群信息配置。④將配置完成的spark拷貝分發(fā)至各個(gè)從機(jī)節(jié)點(diǎn),完成spark集群部署。5.3模塊設(shè)計(jì)的具體實(shí)現(xiàn)系統(tǒng)的整體流程與系統(tǒng)內(nèi)數(shù)據(jù)處理流程基本一致,可以用下圖進(jìn)行簡(jiǎn)要的表示:響應(yīng)交互關(guān)鍵詞抽取數(shù)據(jù)存取響應(yīng)交互關(guān)鍵詞抽取數(shù)據(jù)存取數(shù)據(jù)采集文本挖掘數(shù)據(jù)可視化開(kāi)始解析微博網(wǎng)頁(yè)數(shù)據(jù)清洗數(shù)據(jù)呈現(xiàn)圖5.3系統(tǒng)整體流程第一部分:該部分主要完成原始文本數(shù)據(jù)的采集。將國(guó)內(nèi)知名社交網(wǎng)站新浪微博作為數(shù)據(jù)來(lái)源,編寫程序?qū)崿F(xiàn)對(duì)微博網(wǎng)頁(yè)的解析,將原始網(wǎng)頁(yè)上的有價(jià)值信息轉(zhuǎn)換成結(jié)構(gòu)化數(shù)據(jù),隨后將其寫入非關(guān)系型數(shù)據(jù)庫(kù)。第二部分:該部分主要完成對(duì)獲取到數(shù)據(jù)的處理工作。首先對(duì)數(shù)據(jù)進(jìn)行分詞處理,然后對(duì)文本中的各種符號(hào)以及停用詞進(jìn)行剔除,將“干凈”的語(yǔ)料上傳至分布式存儲(chǔ)系統(tǒng),同時(shí)也將原始數(shù)據(jù)導(dǎo)入搜索引擎以備可視化部分調(diào)用。再由Spark框架從分布式存儲(chǔ)系統(tǒng)讀取數(shù)據(jù),根據(jù)選定算法進(jìn)行關(guān)鍵詞抽取并將結(jié)果進(jìn)行保存。第三部分:該部分主要完成對(duì)最終處理結(jié)果的可視化工作??梢暬到y(tǒng)從分布式存儲(chǔ)系統(tǒng)中讀取處理過(guò)后的最終數(shù)據(jù),根據(jù)數(shù)據(jù)繪制可交互詞云,可以根據(jù)用戶請(qǐng)求進(jìn)一步自定義展示內(nèi)容。5.2.1數(shù)據(jù)采集模塊數(shù)據(jù)采集模塊的主要功能是從新浪微博獲取微博消息文本。新浪微博對(duì)未登錄用戶訪問(wèn)內(nèi)容進(jìn)行了限制,在登錄微博賬戶之前用戶僅能查看少量數(shù)據(jù)。因此為了實(shí)現(xiàn)獲取大量數(shù)據(jù)。首先應(yīng)該利用程序模擬用戶進(jìn)行登錄操作,獲取登錄成功的cookie,爬蟲的請(qǐng)求帶上該cookie便能夠進(jìn)行數(shù)據(jù)的爬取。本系統(tǒng)采用的登錄策略為使用Selenium操作無(wú)界面瀏覽器PhantomJS模擬用戶填寫用戶名以及密碼,在賬戶較少時(shí)點(diǎn)擊登錄按鈕后自動(dòng)捕獲帶有驗(yàn)證碼的網(wǎng)頁(yè),以供用戶查看驗(yàn)證碼自行識(shí)別輸入進(jìn)行登錄操作。在大規(guī)模爬取前有大量賬號(hào)需要登錄時(shí),可以使用打碼平臺(tái)對(duì)驗(yàn)證碼進(jìn)行識(shí)別,自動(dòng)進(jìn)行登錄操作,批量獲取cookie。爬取流程以初始隊(duì)列開(kāi)始,對(duì)用戶的關(guān)注與粉絲列表進(jìn)行迭代抓取。通過(guò)解析網(wǎng)頁(yè)獲取目標(biāo)結(jié)構(gòu)化數(shù)據(jù),便于對(duì)文本進(jìn)行后續(xù)的分析處理。本模塊使用python語(yǔ)言下的Scrapy爬蟲框架編程實(shí)現(xiàn),詳細(xì)的流程如下圖所示:爬取隊(duì)列更新存儲(chǔ)爬取數(shù)據(jù)解析網(wǎng)頁(yè)開(kāi)始初始化爬取隊(duì)列爬取隊(duì)列更新存儲(chǔ)爬取數(shù)據(jù)解析網(wǎng)頁(yè)開(kāi)始初始化爬取隊(duì)列結(jié)束圖5.2.1數(shù)據(jù)采集模塊執(zhí)行流程爬蟲程序可以簡(jiǎn)要地分成三個(gè)部分,抓取目標(biāo)數(shù)據(jù)的結(jié)構(gòu)定義(Item),爬蟲數(shù)據(jù)的存儲(chǔ)方式(ItemPipline),以及具體執(zhí)行網(wǎng)頁(yè)解析抽取方法(Spider)。創(chuàng)建Scrapy項(xiàng)目后,第一時(shí)間的工作是要確定具體需要的數(shù)據(jù)字段,以此為依據(jù)定義程序的Item類,用來(lái)保存從網(wǎng)頁(yè)上解析抽取出來(lái)的數(shù)據(jù)。本系統(tǒng)中爬蟲程序中定義的微博數(shù)據(jù)Item類如下表所示:表5.2.1微博Item定義字段名稱備注_id微博IDID用戶IDContent微博內(nèi)容PubTime發(fā)表時(shí)間Co_oridinates定位信息Tools使用工具Like點(diǎn)贊數(shù)Comment評(píng)論數(shù)Transfer轉(zhuǎn)發(fā)數(shù)網(wǎng)頁(yè)的爬取從初試的爬取隊(duì)列開(kāi)始,訪問(wèn)初始列表內(nèi)用戶的個(gè)人主頁(yè),利用利用Xpath對(duì)目標(biāo)標(biāo)簽進(jìn)行定位,獲取其中內(nèi)容并保存到對(duì)應(yīng)Item。隨后數(shù)據(jù)將進(jìn)入到ItemPipline進(jìn)行數(shù)據(jù)的存儲(chǔ)。ItemPipline的主要工作是對(duì)從網(wǎng)頁(yè)上抽取數(shù)據(jù)后的存儲(chǔ)、驗(yàn)證。本系統(tǒng)中,在ItemPipline中未對(duì)數(shù)據(jù)進(jìn)行進(jìn)一步處理,將數(shù)據(jù)原樣寫入了非關(guān)系型數(shù)據(jù)庫(kù)MongoDB。因考慮到爬蟲程序需要高速爬取網(wǎng)頁(yè),對(duì)數(shù)據(jù)存儲(chǔ)響應(yīng)速度要求較高,所以沒(méi)有將數(shù)據(jù)直接寫入HDFS。5.2.2文本挖掘模塊文本挖掘模塊從功能上進(jìn)行劃分可以簡(jiǎn)單分成三個(gè)部分,即文本預(yù)處理,關(guān)鍵詞提取以及為可視化數(shù)據(jù)的檢索。在對(duì)抓取到的文本進(jìn)行關(guān)鍵詞抽取操作之前,必須對(duì)文本進(jìn)行數(shù)據(jù)清洗,因?yàn)樵嘉谋局邪罅康臉?biāo)點(diǎn)符號(hào)、特殊字符以及無(wú)實(shí)際意義的停用詞。這些字符都將對(duì)后續(xù)處理造成影響。在本系統(tǒng)中數(shù)據(jù)清洗主要執(zhí)行了以下幾種操作:①文本分詞中文分詞指的是將一個(gè)漢字序列(句子)切分成一個(gè)一個(gè)單獨(dú)的詞。分詞就是將連續(xù)的自序列按照一定的規(guī)范重新合成詞序列的過(guò)程。中文文本字、句、段有明顯分界符來(lái)進(jìn)行簡(jiǎn)單劃界。但是詞與詞之間并沒(méi)有形式上的分界符,因此必須對(duì)獲取到的文本進(jìn)行分詞后,才能對(duì)其進(jìn)行進(jìn)一步的處理。本系統(tǒng)內(nèi)分詞處理采用了流行的Python分詞組件JieBa分詞,JieBa分詞的處理流程可以簡(jiǎn)單地概括為如下幾個(gè)步驟:生成DAG加載生成DAG加載詞典最大概率路徑HMM模型圖5.2.2-1JieBa分詞處理流程詞典由分析大量語(yǔ)料得到,是一個(gè)由數(shù)萬(wàn)詞語(yǔ)構(gòu)成的文本文件,是分詞處理的基礎(chǔ)。在具體使用時(shí),可以根據(jù)自身需求對(duì)其進(jìn)行刪改。詞典加載完成后基于Trie樹(shù)結(jié)構(gòu)實(shí)現(xiàn)高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構(gòu)成的有向無(wú)環(huán)圖(DAG)
。隨后采用動(dòng)態(tài)規(guī)劃查找最大概率路徑,找出基于詞頻的最大切分組合。對(duì)于詞典內(nèi)沒(méi)有覆蓋的詞語(yǔ)使用了Viterbi算法生成基于漢字成詞能力的HMM模型。在具體使用時(shí),對(duì)微博文本自帶的話題標(biāo)簽進(jìn)行特殊處理,將所有話題抽取出來(lái)加入JieBa分詞的詞典內(nèi),避免在分詞時(shí)將話題進(jìn)行分詞處理,影響后續(xù)挖掘效果。②過(guò)濾標(biāo)點(diǎn)符號(hào)及停用詞由于采集到的原始文本集內(nèi)包含大量的標(biāo)點(diǎn)符號(hào)、英文字符以及類似“的”、“地”、“得”這類無(wú)意義的中文停用詞,因此在進(jìn)一步處理文本之前我們需要對(duì)其先進(jìn)行處理。本系統(tǒng)中采用的方法是先預(yù)先準(zhǔn)備中文停用詞表,覆蓋中文文本中常用的停用次以及各類標(biāo)點(diǎn)、特殊符號(hào)。通過(guò)遍歷文本與停用詞表對(duì)特殊符號(hào)及停用次進(jìn)行過(guò)濾,得到較為干凈的文本。③利用Spark抽取關(guān)鍵詞該部分為系統(tǒng)文本挖掘的關(guān)鍵處理模塊,實(shí)現(xiàn)對(duì)處理后語(yǔ)料的進(jìn)一步處理,利用TF-IDF算法對(duì)微博文本進(jìn)行關(guān)鍵詞抽取。把抓取到的大量微博當(dāng)作一片完整的文章,那么此時(shí)抽取出來(lái)的關(guān)鍵詞也能一定程度反映出當(dāng)前輿情關(guān)注的熱點(diǎn)。Spark對(duì)文本的處理流程可以用下圖進(jìn)行表示:權(quán)重排序開(kāi)始權(quán)重排序開(kāi)始HDFS計(jì)算TFIDFRDDRDDTXT圖5.2.2-2spark處理文本首先Spark從HDFS讀取文本數(shù)據(jù),將讀取出的數(shù)據(jù)轉(zhuǎn)換為自身特有數(shù)據(jù)結(jié)構(gòu)RDD,隨后利用TD-IDF算法進(jìn)行運(yùn)算。此處以單條微博消息作為處理的基本單位,把抓取到的整個(gè)數(shù)據(jù)集作為算法中語(yǔ)料庫(kù)的參數(shù)。對(duì)所有詞語(yǔ)進(jìn)行TF-IDF權(quán)值的計(jì)算,計(jì)算完成后對(duì)整個(gè)字符列表進(jìn)行去重
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 跨國(guó)企業(yè)信息安全事件應(yīng)對(duì)與保密管理
- 財(cái)務(wù)制度宣貫計(jì)劃
- 建立風(fēng)險(xiǎn)預(yù)警機(jī)制的工作計(jì)劃
- 組織績(jī)效提升的總結(jié)計(jì)劃
- 足浴店員工培訓(xùn)中的法律法規(guī)教育
- 不同市場(chǎng)用戶調(diào)研月度計(jì)劃
- 急診科設(shè)備的規(guī)范使用計(jì)劃
- 急診就診高峰期的應(yīng)對(duì)方案計(jì)劃
- 加強(qiáng)模擬財(cái)務(wù)報(bào)表編制能力計(jì)劃
- 超市突發(fā)事件中的供應(yīng)鏈管理策略
- 華師大版八年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)教案
- 四下語(yǔ)文學(xué)情分析-2
- 家園合作培養(yǎng)幼兒勞動(dòng)行為習(xí)慣的行動(dòng)研究
- 中國(guó)的能源安全 課件
- 鄭州市某路雨水污水改造工程施工組織設(shè)計(jì)
- 對(duì)口升學(xué)計(jì)算機(jī)組裝試卷答案
- 期末總結(jié)600字四篇
- DCDC中恒定導(dǎo)通時(shí)間控制模式COT介紹
- 五險(xiǎn)一金繳費(fèi)明細(xì)表
- MT/T 655-1997煤礦用帶式輸送機(jī)托輥軸承技術(shù)條件
- GB/T 27648-2011重要濕地監(jiān)測(cè)指標(biāo)體系
評(píng)論
0/150
提交評(píng)論