張佳佳,章宜玉
(湖南信息職業技術學院 湖南 長沙 410200)
隨著我國經濟的快速發展和物質生活水平不斷提高,人們的精神文化生活日益豐富,閱讀已成為人們生活中不可或缺的一部分。得益于移動互聯網的迅速發展,手機用戶增長迅猛,用戶不再只是網站內容消費者,同時也是內容生產者。人們不管在何時何地,都可借助移動終端在網絡平臺上發表自己的所思所想?,F在越來越多的用戶傾向于通過微博、豆瓣、博客等網絡平臺發表書評,進行圖書評論。圖書評論是讀者對書籍質量的一種情感表達,如果能對海量的圖書評論數據進行分析處理,從中找到對用戶有用的信息,并將其用圖形化方式展現出來,就能為用戶提供直觀有效的圖書推薦[1]。
通過對基于數據挖掘的圖書推薦系統進行分析與設計,不僅可以幫助讀者選擇他們感興趣的圖書,也可以幫助出版公司迅速獲得讀者對書籍的評價與反饋。
目前圖書市場上的圖書數據量龐大、品種繁多,網絡平臺上的圖書信息良莠不齊,而且存在惡意差評現象,讓人難以分辨[2]。因此基于數據挖掘的圖書推薦系統要設計爬蟲模塊,從網絡平臺抓取圖書信息,并對其進行篩選整合。其次,圖書評論信息是一個復雜的多模態數據集合,比如每本書都包含有名稱、簡介、作者、出版社等多維度信息,而作者可能又包含其出版過的其他書籍等信息。因此爬蟲模塊要通過多維度特征挖掘出更深層次、更全面的信息。微博作為一種新興的社會化媒體發布平臺,以其簡短寫作、便于發布、實時交互的特點深受大眾歡迎,本系統使用爬取自微博平臺的圖書數據集。爬蟲模塊是獲取系統所需要數據的重要方式,通過在微博網站搜索某個圖書關鍵詞,對搜索到的微言以及每條微言的用戶評論進行抓取,經過數據篩選和清洗后,保存到本地數據庫中[3]。
數據分析模塊實現的功能有關鍵詞提取、情感分析和屬性關系網構建。采用多種機器學習算法對圖書文本數據進行分析與挖掘,并將分析過程中的結果保存到數據庫中。
可視化模塊是對分析結果的可視化展示,用戶可以輸入某本圖書名稱,查看關于該書籍的分析信息,比如圖書評分、類別等。
軟件是基于Windows 10系統進行的設計。爬蟲模塊采用最新的Map Reduce分布式框架實現,使用爬蟲引擎采集信息并存入MySQL數據庫。集成開發環境采用Myeclipse 10.0,其功能強大、操作簡便、可有效提高編程效率。可視化模塊采用Apache+PHP框架,借助TagCloud和Echarts等插件,實現圖形化展示界面。
網絡爬蟲是指在海量的互聯網信息中進行爬取,按照特定規則自動抓取有效信息的程序或腳本,目前在搜索引擎、數據挖掘、信息存檔等方向應用十分廣泛。網絡爬蟲按照實現的技術原理可以分為通用網絡爬蟲、主題網絡爬蟲、增量網絡爬蟲和深層網絡爬蟲。網絡爬蟲的實現過程主要由控制器、解析器和資源庫三部分組成,控制器是負責給多線程中的各個爬蟲線程分配工作任務,解析器是對爬取的網頁進行解析,資源庫即采用數據庫進行數據存儲[4]。
Map Reduce是一個并行計算與運行的軟件框架。它將整個計算過程劃為Map和Reduce兩個并行運算任務,實現在集群節點上自動分配和執行任務并收集計算結果。用戶在使用該框架時只要實現Map和Reduce兩個接口,無需關心底層構架,大大減少了軟件開發人員的負擔[5]。
MySQL數據庫是目前軟件開發中被廣泛應用的開源數據庫,其具有穩定、高效、易于開發的優點。爬蟲模塊共設計三張數據庫表,分別是微言信息表、評論信息表、圖書信息表。數據分析模塊也包含三張數據庫表,分別為圖書屬性信息表、處理結果信息表、作者信息表。
基于數據挖掘的圖書推薦系統主要包括以下三個模塊:爬蟲模塊、數據分析模塊、可視化模塊,系統總體設計如圖1所示。本章將對各功能模塊進行設計說明。

圖1 系統總體設計圖
爬蟲模塊是一個抓取微博網站數據集的爬蟲程序,主要對基于主題關鍵詞搜索的博文以及其評論等信息進行數據采集。其主要實現流程如下,如圖2所示。
(1)用戶cookie的獲取與模擬登錄。我們在爬取網站信息時先要登錄網站,一般可以通過cookie進行模擬登錄來解決。第一步是通過對網頁數據進行抓包與分析獲取cookie信息,然后使用get方法傳入cookie獲取網頁爬取信息。
(2)多線程抓取。網頁上的評論數據過多,我們不能通過for循環一個一個地下載,所以必然要使用多線程,然后把數據隊列放入線程池去處理。
(3)多用戶切換防止反爬蟲。限制爬蟲程序訪問服務器資源和獲取數據的行為稱為反爬蟲。為了應對反爬蟲機制,可采用動態設置User-Agent策略,即隨機切換User-Agent的值,以模擬不同用戶的瀏覽器信息。
(4)實現HTTP請求報文的生成。為了獲取新浪微博平臺的數據,必須向新浪微博服務器發送數據請求報文進行數據請求。可使用requests庫的get方法進行HTTP請求,其使用requests方法的語法格式如下:rq=request.get(‘目標網址’)[6]。
(5)實現HTTP返回報文的接收和解壓。每向open.weibo.com發送一個HTTP請求數據包后,都可以獲得相應的返回數據包。分析HTTP響應報文中的Content-Length參數可以獲取數據長度,讀取響應報文頭中的Content-Encoding值可獲取壓縮格式,調用對應的解壓方法進行報文解壓。當然,返回的數據也并不是每一次都正確,我們可通過數據格式判斷其是否正確,當數據格式不正確或不完整時,則直接丟棄報文,并打印數據格式錯誤信息[7]。
(6)對解壓后的json文件進行分析和信息提取,利用第三方函數庫對得到的json字符串進行解析,提取我們需要的字段內容,并存入到數據庫中。將爬蟲獲取的數據存入數據庫,需要在pipeline里完成,pipeline的功能默認是關閉的,要在settings.py中開啟數據入庫命令。
(7)對待抓取和已抓取的URL建立緩存機制。對每個入庫函數都開啟一個獨立的線程。當相應的緩存容器中的數據達到一定的數量時,對數據容器進行鎖定,暫停相應的爬蟲函數,開始對數據進行入庫。入庫后將該數據從緩存容器刪除,然后解除容器鎖定,繼續爬蟲[8]。

圖2 爬蟲模塊實現流程
數據分析模塊主要包含關鍵詞提取、情感分析、屬性關系網構建三個子功能模塊。
(1)關鍵詞提取:該功能塊使用基于語義的中文文本關鍵詞提?。⊿KE)算法[9]從每條微博中提取關鍵詞?;陉P鍵詞的出現頻率進行統計,我們從中選擇出頻率最高的50個關鍵詞,將其存入數據庫中用于后續的情感分析,其實現流程如圖3所示。

圖3 關鍵詞提取實現流程
(2)情感分析:在該模塊中,對微博中的每條信息進行分詞處理后,利用情感分析算法將其歸類為積極情緒和消極情緒,并計算每種情緒所占百分比,將其保存到數據庫中[10]。其實現流程如圖4所示。

圖4 情感分析實現流程
(3)屬性關系網構建:通過構建屬性關系網,用戶可以點擊該網絡中的任何節點并查看與其相關聯的信息。例如,某個作者還出版了哪些圖書。其實現流程如圖5所示[11]。

圖5 屬性關系網實現流程
可視化模塊是系統的展示模塊,當用戶在系統首頁輸入一個圖書名稱時,界面將會呈現出來三個功能,包括關鍵詞3D云圖、情感分析餅圖、圖書屬性關系網。其實現過程如圖6所示。
關鍵詞云圖:可將系統中關于該圖書出現頻率較高的關鍵詞以可視化形式展現出來,它能過濾掉大量低頻低質的文本信息,讓用戶在短時間內對某本圖書的評價信息能一目了然。
情感分析餅圖:心理學研究發現人們普遍有從眾心理,人們對某個物品的喜好或情感狀態會受到大多數人的情感影響。比如當你搜索一本未閱讀過的圖書時,網友們對該書籍的評分高低會影響你是否閱讀該書。用戶根據數據分析模塊得到情感分析結果,可以了解大眾對某本圖書的偏好與評價,有利于用戶進行決策或選擇[12-13]。
圖書屬性關系網:網絡上的圖書數據是一個多模態數據,比如一本圖書的作者又包含還出版過其他哪些書等信息[14]。關系網為各個屬性提供了聯動交互,使用戶可以探索不同維度數據之間的關系。用戶單擊該關系網中任意節點可查看與之關聯的信息。

圖6 可視化模塊實現流程
本文分析了基于數據挖掘的圖書推薦系統的實際需求,并對系統的設計展開描述。對圖書信息進行數據挖掘,獲取圖書信息,然后對數據進行清洗和處理。并在此基礎上進行情感分類研究,為讀者提供可視化結果。本系統不僅能節約讀者尋找圖書資源的時間,為讀者提供更加有效的圖書推薦,同時也能使出版社與編輯及時了解大眾對圖書的評價與反饋,并對后續的圖書內容與經營策略等方面起到輔助作用。