周 君,賈昆霖,藍(lán)機(jī)滿,宋 艷
(1. 惠州工程職業(yè)學(xué)院,廣東 惠州 516001;2. 中南大學(xué) 軟件學(xué)院,湖南 長沙 410075)
目前,使用傳統(tǒng)管理方法的圖書館面臨著全面的轉(zhuǎn)型與徹底的變革,全面數(shù)字化和自動(dòng)化的圖書館管理方法正在逐步取代傳統(tǒng)的圖書館管理技術(shù)[1-3]。然而,在轉(zhuǎn)型過程中最新的管理方法和技術(shù)并不一定適應(yīng)時(shí)代與社會(huì)的發(fā)展,圖書館管理技術(shù)的發(fā)展也需要不斷地進(jìn)行調(diào)整、優(yōu)化與加強(qiáng)。所以,如何設(shè)計(jì)和實(shí)現(xiàn)人性化、智能化的圖書推薦系統(tǒng),成為了眾多高校和科研單位的圖書館關(guān)注的問題[4-10]。
為了完成智能圖書推薦系統(tǒng)的設(shè)計(jì),本文首先全面分析了圖書推薦系統(tǒng)的設(shè)計(jì)需求。在此基礎(chǔ)上,以高等院校的歷史借閱信息作為基礎(chǔ)數(shù)據(jù),引入了協(xié)同過濾算法,在Django框架平臺(tái)上綜合使用amCharts圖表和D3.js可視化數(shù)據(jù)庫等多種技術(shù),設(shè)計(jì)了一個(gè)具有推薦排行、個(gè)性化推薦和數(shù)據(jù)同步等多項(xiàng)功能的智能圖書推薦系統(tǒng)。同時(shí),本文對(duì)該系統(tǒng)進(jìn)行了詳細(xì)的測(cè)試和驗(yàn)證。結(jié)果表明,該系統(tǒng)的所有功能,包括推薦、數(shù)據(jù)同步、管理和展現(xiàn)等均運(yùn)行正常,且還具有較好的兼容性和穩(wěn)定性。
一般而言,一個(gè)智能化的圖書推薦系統(tǒng)必須實(shí)現(xiàn)4個(gè)方面的功能,即系統(tǒng)內(nèi)核、數(shù)據(jù)同步、前端面板和后臺(tái)管理。
圖書推薦系統(tǒng)需要使用具有強(qiáng)大功能的系統(tǒng)內(nèi)核,完成系統(tǒng)中圖書的分類、排行等多種推薦功能。在本文中,圖書推薦系統(tǒng)的內(nèi)核需要實(shí)現(xiàn)熱門圖書排列、中圖分類排行和智能化推薦。其中,熱門圖書排列功能主要指推薦系統(tǒng)需要精確統(tǒng)計(jì)借閱記錄最多的100本圖書,并顯示排序結(jié)果;與之類似,中圖分類排行功能是指系統(tǒng)需要將某一類別中借閱記錄最多的10本圖書列舉出來,并顯示該排序結(jié)果;智能化推薦功能包括兩方面的內(nèi)容:(1)系統(tǒng)需要讀取和分析每個(gè)用戶的借閱情況,為該用戶推薦個(gè)性化的書籍;(2)系統(tǒng)需要對(duì)所有用戶進(jìn)行相似性分析,使用列表為用戶推薦其可能感興趣的書籍。
在系統(tǒng)的所有功能中,數(shù)據(jù)同步功能需要實(shí)現(xiàn)借閱記錄、用戶信息、圖書信息和數(shù)據(jù)整理存儲(chǔ)等一系列的功能。其中,圖書推薦系統(tǒng)與圖書館信息管理系統(tǒng)保持一致,定期更新所有圖書的借閱記錄和狀態(tài)信息。同時(shí),定期增加圖書館新增用戶的信息,刪除注銷用戶的信息,并將更新后的信息存入推薦系統(tǒng)的關(guān)系型數(shù)據(jù)庫中。
在系統(tǒng)的所有功能中,前端面板主要負(fù)責(zé)展示圖書館的中圖分類示意圖、圖書借閱情況和圖書用戶關(guān)系圖。其中,中圖分類示意圖是一種樹狀的圖形。主要展示圖書館藏書的分類和體系,方便讀者的查找與借閱;圖書借閱情況主要展示圖書的總借閱量、借閱記錄、書籍信息等;圖書用戶關(guān)系圖主要被用于顯示讀者的借閱記錄、借閱數(shù)量和日志等。
在圖書推薦系統(tǒng)中,后臺(tái)管理的功能主要包括中圖分類、借閱情況、圖書和用戶等項(xiàng)目的管理。其中,中圖分類管理是編輯和查詢館藏圖書的中圖分類信息;借閱情況管理主要是編輯、查詢用戶的圖書借閱信息與記錄。
針對(duì)系統(tǒng)需要實(shí)現(xiàn)的所有功能,本文對(duì)圖書推薦系統(tǒng)進(jìn)行總體設(shè)計(jì)。根據(jù)上面對(duì)系統(tǒng)的需求分析,將推薦系統(tǒng)劃分為系統(tǒng)內(nèi)核、數(shù)據(jù)同步、前端面板和后臺(tái)管理4個(gè)子模塊。
圖1 圖書推薦系統(tǒng)架構(gòu)圖
在此架構(gòu)下,文中引入了基于Python語言開發(fā)的Django應(yīng)用框架。該框架是一個(gè)優(yōu)秀的開源平臺(tái),集合了消息傳遞、系統(tǒng)和用戶管理等多種復(fù)用站點(diǎn)組件,減小了系統(tǒng)所需編寫的代碼數(shù)量,并大幅簡(jiǎn)化了網(wǎng)站的開發(fā)過程。另外,Django框架還將分離了系統(tǒng)的邏輯實(shí)現(xiàn)和前端展示,這進(jìn)一步提高了系統(tǒng)開發(fā)的代碼編寫速度。
開源的Django框架使用了比較常見的模型-模板-視圖模式,也被稱為MTV模式。使用該模式的目的在于控制系統(tǒng)內(nèi)多個(gè)組件的耦合關(guān)系,保證各個(gè)組件的設(shè)計(jì)不影響其他組件的運(yùn)行。其中,“M”、“T”和“V”分別是“Model”、“Templates”、“Views”的縮寫。在該模式的作用下,Django框架的結(jié)構(gòu)如圖2所示。
圖2 Django框架結(jié)構(gòu)圖
由于Django框架是基于Python語言平臺(tái)開發(fā)的,因此Django框架擁有功能多樣的數(shù)據(jù)接口,設(shè)計(jì)者可以使用ORM機(jī)制定義具體的數(shù)據(jù)模型,從而大幅減小了數(shù)據(jù)庫開發(fā)的編程壓力。Django框架使用分發(fā)的方法設(shè)計(jì)URL映射,避免了系統(tǒng)亂碼的出現(xiàn)。另外,該框架在系統(tǒng)內(nèi)置的模板中增加了擴(kuò)展功能,開發(fā)者能夠自主設(shè)計(jì)頁面樣式、控制等系統(tǒng)的編碼方式。該框架的網(wǎng)絡(luò)請(qǐng)求處理,如圖3所示。
圖3 系統(tǒng)的網(wǎng)絡(luò)請(qǐng)求處理流程圖
由圖3可知,系統(tǒng)的用戶使用瀏覽器提出網(wǎng)絡(luò)請(qǐng)求,mod_python處理器對(duì)這些請(qǐng)求進(jìn)行處理,同時(shí)發(fā)送到請(qǐng)求中間設(shè)備、URL映射、顯示等設(shè)備進(jìn)行具體處理。無法執(zhí)行的請(qǐng)求提交異常處理中間設(shè)備進(jìn)行判斷,同時(shí)反饋給響應(yīng)中間設(shè)備進(jìn)行處理,再返回到mod_python處理器進(jìn)行集中處理。
信息可視化是利用具有交互功能的計(jì)算機(jī)展示抽象數(shù)據(jù)的過程,這項(xiàng)技術(shù)涉及到心理學(xué)、語言學(xué)和計(jì)算機(jī)等多門學(xué)科,其核心內(nèi)容主要包括視覺設(shè)計(jì)與人機(jī)交互。在本文中,主要使用了D3.js和amCharts組件完成信息可視化的功能。D3.js組件被廣泛應(yīng)用于信息可視化的領(lǐng)域中,D3表示“Documents”、“Driven”和“Data”,即文件、驅(qū)動(dòng)與數(shù)據(jù)。D3.js組件能夠?qū)?duì)應(yīng)的數(shù)據(jù)發(fā)送到文檔對(duì)象的模型,進(jìn)而使用SVG和CSS等多種技術(shù)處理這些數(shù)據(jù)完成驅(qū)動(dòng)的轉(zhuǎn)換,最終實(shí)現(xiàn)抽象數(shù)據(jù)的可視化。該種組件具有三個(gè)優(yōu)點(diǎn),即計(jì)算資源需求少,運(yùn)行效率較高、代碼編寫量較少,適用于大規(guī)模數(shù)據(jù)的可視化。
amCharts組件也是一種被廣泛應(yīng)用的信息可視化組件,是一個(gè)可視化的圖標(biāo)庫,可以使用多樣的形式展示大規(guī)模的數(shù)據(jù)。其形式包括但不限于面積、扇形、柱狀等形狀的圖形。另外,該組件屬于獨(dú)立的JavaScript庫,可以利用矢量圖形的技術(shù),完整實(shí)現(xiàn)渲染圖標(biāo)的功能,兼容IE、Opera和Firefox等多種主流瀏覽器。
在完成圖書推薦系統(tǒng)的設(shè)計(jì)之后,本文在PyCharm3.0開發(fā)平臺(tái)上,使用Python語言完成了具體的編程,從而實(shí)現(xiàn)了完整的智能圖書推薦系統(tǒng)。由于前端面板和后臺(tái)管理模塊只需要在Django框架上進(jìn)行簡(jiǎn)單的修改,故在此對(duì)這兩個(gè)模塊的實(shí)現(xiàn)不再做詳細(xì)介紹,重點(diǎn)敘述系統(tǒng)內(nèi)核和數(shù)據(jù)同步的實(shí)現(xiàn)方法。
在圖書推薦系統(tǒng)中,系統(tǒng)內(nèi)核即推薦系統(tǒng)引擎,是系統(tǒng)最核心的模塊。系統(tǒng)內(nèi)核需要處理圖書館中圖書的借閱數(shù)據(jù),從而計(jì)算得到面向用戶的推薦信息。本文在系統(tǒng)內(nèi)核中使用了混合推薦算法,其流程圖如圖4所示。
在圖書推薦系統(tǒng)內(nèi)核工作時(shí),對(duì)沒有借閱數(shù)據(jù)的用戶,協(xié)同過濾和內(nèi)容過濾的算法均不能較好地發(fā)揮作用,系統(tǒng)將根據(jù)用戶的歸屬信息查詢?cè)撚脩羲鶎賳挝黄渌脩舻慕栝啍?shù)據(jù),得到借閱數(shù)量較多的圖書信息,從而推薦給用戶;對(duì)借閱數(shù)據(jù)比較少的用戶,協(xié)同過濾算法難以產(chǎn)生準(zhǔn)確地推薦信息,系統(tǒng)內(nèi)核只能使用基于內(nèi)容的推薦算法,詳細(xì)地分析圖書信息,建立所有圖書的關(guān)鍵詞和屬性數(shù)據(jù)庫,并利用大規(guī)模的數(shù)據(jù)分析用戶的借閱習(xí)慣,使用余弦相似性的方法計(jì)算出相應(yīng)的推薦信息,完成相應(yīng)的推薦;對(duì)借閱數(shù)據(jù)比較多的用戶,系統(tǒng)便可采用協(xié)同過濾算法計(jì)算用戶的推薦信息。一般而言,系統(tǒng)將首先使用Jaccard相似度的方法計(jì)算圖書之間的相似度,并根據(jù)相應(yīng)的計(jì)算結(jié)果再將相似度較高的圖書推薦給相似度較高的用戶。
圖4 圖書推薦系統(tǒng)內(nèi)核流程圖
根據(jù)系統(tǒng)的需求分析,數(shù)據(jù)同步是指獲取所有圖書的管理信息,從而建立系統(tǒng)的推薦算法的數(shù)據(jù)基礎(chǔ)。在本文中,使用了定時(shí)器完成系統(tǒng)的數(shù)據(jù)同步。一般而言,圖書館需要嚴(yán)格管理館藏圖書的多種信息,包括還書時(shí)間、圖書題名、編號(hào)、版本等。以某高校圖書館的信息系統(tǒng)為例,其館藏圖書的部分信息記錄如表1所示。
表1 某高校圖書館的館藏圖書部分信息
根據(jù)以上格式,系統(tǒng)可以精準(zhǔn)地獲取所有圖書的準(zhǔn)確屬性,這些信息也是系統(tǒng)數(shù)據(jù)同步模塊的操作對(duì)象。為了提高數(shù)據(jù)同步的運(yùn)行效率,系統(tǒng)使用表2的格式采集館藏圖書的屬性信息。
表2 館藏圖書屬性采集格式
此外,本文還引入了新浪云的數(shù)據(jù)庫引擎存儲(chǔ)圖書屬性等數(shù)據(jù)。該數(shù)據(jù)庫引擎是一種分布式的鍵值型引擎,具有海量的存儲(chǔ)空間和快速的讀寫速度,適用于圖書推薦系統(tǒng)的數(shù)據(jù)管理。
為了設(shè)計(jì)智能化的圖書推薦系統(tǒng),本文全面分析了系統(tǒng)的多項(xiàng)需求,通過引入Django框架和信息可視化等多項(xiàng)技術(shù),設(shè)計(jì)了一個(gè)利用混合推薦算法的推薦系統(tǒng),使用協(xié)同過濾和內(nèi)容過濾等算法對(duì)該系統(tǒng)進(jìn)行了實(shí)現(xiàn)。