李柯諭,何明昌,吳 丹,高利新,王陳培
(溫州大學(xué)數(shù)理學(xué)院,浙江 溫州 325035)
目前大學(xué)生社團(tuán)規(guī)模激增,加大了社團(tuán)管理的難度,為此,有部分高校開(kāi)發(fā)了高校社團(tuán)系統(tǒng)。高校社團(tuán)系統(tǒng)的開(kāi)發(fā)并不簡(jiǎn)單,設(shè)計(jì)語(yǔ)義分析、算法[1]以及系統(tǒng)軟硬件環(huán)境的搭建。目前許多已有系統(tǒng)基本上是網(wǎng)頁(yè)版,在移動(dòng)設(shè)備上使用往往十分不便。
本文基于協(xié)同過(guò)濾算法,開(kāi)發(fā)了移動(dòng)版高校社團(tuán)系統(tǒng),來(lái)提升社團(tuán)工作效率。
PHP 語(yǔ)言是目前最流行的編程語(yǔ)言,并且具有開(kāi)源性、數(shù)據(jù)庫(kù)連接的廣泛性等優(yōu)點(diǎn),上手容易,在補(bǔ)丁漏洞升級(jí)過(guò)程中,核心部分植入簡(jiǎn)單易行,且速度快[2],與Java、Python 等語(yǔ)言進(jìn)行對(duì)比之后,我們選擇采用PHP進(jìn)行后臺(tái)開(kāi)發(fā)。
為實(shí)現(xiàn)高校社團(tuán)組織工作交流、文件上傳下載等功能,系統(tǒng)采用Okhttp 框架,同時(shí)為增加功能多樣化,系統(tǒng)預(yù)留了功能擴(kuò)增接口;考慮到安全性和便捷性,APP 采用Ubuntu GNU/Linux 操作系統(tǒng),在登錄時(shí)采用JWT Token 進(jìn)行身份驗(yàn)證,并對(duì)重要的數(shù)據(jù)進(jìn)行MD5 加密存儲(chǔ);考慮到高校社團(tuán)數(shù)量及使用人員較多,采用CDN,以保障服務(wù)器流暢。
Android 系統(tǒng)基于Linux 系統(tǒng),其具有代碼開(kāi)源的特點(diǎn),兼容性也比較好,是目前在移動(dòng)應(yīng)用使用最多的系統(tǒng)。通過(guò)Android系統(tǒng),前端采用MVP三層架構(gòu)體系,使Controller 和View 做到完全解耦,避免View具有過(guò)于復(fù)雜的業(yè)務(wù)邏輯,減少Activity或Fragment的代碼數(shù)量,這樣做可以通過(guò)創(chuàng)建接口的方式增加系統(tǒng)靈活性,降低開(kāi)發(fā)和維護(hù)的成本[3]。
LAMP 架構(gòu)有著開(kāi)源、大量的額外組件和擴(kuò)展功能模塊、代碼簡(jiǎn)潔易于開(kāi)發(fā)、方便易用和安全穩(wěn)定等優(yōu)點(diǎn),LAMP框架的后端采用MySQL數(shù)據(jù)庫(kù)服務(wù),可以存儲(chǔ)各種賬號(hào)信息、產(chǎn)品信息、客戶資料、業(yè)務(wù)數(shù)據(jù)等,其他程序可以通過(guò)SQL 語(yǔ)句進(jìn)行查詢、更改,同時(shí)還采用PHP 語(yǔ)言解釋動(dòng)態(tài)網(wǎng)頁(yè)文件,提供Web 應(yīng)用程序開(kāi)發(fā)和運(yùn)行環(huán)境[4],所以我們后臺(tái)采用LAMP 架構(gòu),考慮到讀寫(xiě)效率和線程安全,數(shù)據(jù)存儲(chǔ)方面采用Redis非關(guān)系型數(shù)據(jù)庫(kù),這樣就可以很好彌補(bǔ)存儲(chǔ)數(shù)據(jù)讀取數(shù)據(jù)慢的不足,另外我們系統(tǒng)還引入華為云開(kāi)放云存儲(chǔ)服務(wù),以保證大量的上傳和下載視頻等文件。
在系統(tǒng)后臺(tái)數(shù)據(jù)處理方面,主要涉及的數(shù)據(jù)表有用戶個(gè)人信息表、社團(tuán)信息表、用戶與社團(tuán)關(guān)系表。
⑴用戶個(gè)人信息表主要記錄用戶姓名、ID、賬號(hào)密碼等字段,如表1所示。
表1 用戶個(gè)人信息表(organization_user)
⑵ 社團(tuán)信息表主要記錄社團(tuán)名稱(chēng),類(lèi)型等,如表2所示。
表2 社團(tuán)信息表(organization_organization)
⑶用戶與社團(tuán)關(guān)系表主要記錄用戶是否加入社團(tuán)、加入的社團(tuán)id等,如表3所示。
在除上述的三個(gè)主要的數(shù)據(jù)表之外,系統(tǒng)還設(shè)計(jì)了用戶好友表、社團(tuán)聯(lián)結(jié)表等相關(guān)表格。
從使用者角度考慮,系統(tǒng)將用戶群體分為四類(lèi),普通用戶,注冊(cè)用戶,社團(tuán)管理員,系統(tǒng)管理員。普通用戶可以注冊(cè),瀏覽公眾信息,可以注冊(cè)成為注冊(cè)用戶;注冊(cè)用戶可以登錄,參加、瀏覽相關(guān)社團(tuán)活動(dòng),加入、創(chuàng)建社團(tuán),與其他用戶進(jìn)行社交行為等;社團(tuán)管理員可以發(fā)布、管理社團(tuán)活動(dòng),審批和管理管理社員;系統(tǒng)管理員可以對(duì)申請(qǐng)的社團(tuán)進(jìn)行政治、法律審查,對(duì)所有注冊(cè)的用戶、社團(tuán)進(jìn)行管理與維護(hù)。
系統(tǒng)平臺(tái)主要分為社團(tuán)、首頁(yè)、個(gè)人(我的)三個(gè)模塊。
⑴社團(tuán)
主要這社團(tuán)的一些信息。普通用戶可以瀏覽相關(guān)信息,系統(tǒng)會(huì)根據(jù)用戶的瀏覽記錄,通過(guò)協(xié)同過(guò)濾算法推薦相關(guān)的社團(tuán),并指導(dǎo)其注冊(cè)加入相關(guān)社團(tuán);
⑵首頁(yè)
有加入社團(tuán)的活動(dòng)推薦、搜索框,搜索社團(tuán)、活動(dòng)及聯(lián)系人等功能。用戶找到自己心儀的社團(tuán)的時(shí)候,可以點(diǎn)進(jìn)該社團(tuán)界面進(jìn)行申請(qǐng)加入社團(tuán)。加入社團(tuán)后:會(huì)顯示社團(tuán)內(nèi)的活動(dòng),有社團(tuán)歷史活動(dòng),正在進(jìn)行的社團(tuán)活動(dòng),以及未進(jìn)行的社團(tuán)活動(dòng),同時(shí)顯示社團(tuán)內(nèi)成員及成員狀態(tài)。用戶加入某個(gè)社團(tuán)后,可與參與該社團(tuán)的相關(guān)活動(dòng)、打卡、發(fā)表與社團(tuán)相關(guān)的消息等。
⑶我的
主要是個(gè)人信息??梢圆榭磦€(gè)人及修改信息、社交列表、查看好友聯(lián)系人基礎(chǔ)信息及狀態(tài);加入社團(tuán)的活動(dòng)推薦,同時(shí)有搜索框,點(diǎn)進(jìn)搜索框搜索相關(guān)社團(tuán)、活動(dòng)及聯(lián)系人。另外有便捷系統(tǒng)設(shè)置及退出賬號(hào),具體展示如圖1所示。
圖1 APP界面功能
⑴JSON數(shù)據(jù)交換格式
目前流行的數(shù)據(jù)交換格式有XML,JSON,YAML等格式,JSON 格式易于閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成,是一種輕量級(jí)的數(shù)據(jù)交換格式,與XML 或HTML 片段相比,JSON 提供了更好的簡(jiǎn)單性和靈活性,因此本系統(tǒng)采用JSON 格式進(jìn)行前臺(tái)與后臺(tái)數(shù)據(jù)交換。
⑵注冊(cè)及實(shí)名認(rèn)證
在注冊(cè)填寫(xiě)信息時(shí),姓名、性別、學(xué)校學(xué)院、學(xué)號(hào)、班級(jí)、電話號(hào)碼等是必填字段,郵箱、住址等是選填信息;在核對(duì)用戶注冊(cè)信息格式無(wú)誤后,通過(guò)與已經(jīng)注冊(cè)的用戶數(shù)據(jù)進(jìn)行對(duì)比,若關(guān)鍵字無(wú)重復(fù)則可進(jìn)行下一步驗(yàn)證,否則顯示相關(guān)信息重復(fù),注冊(cè)失敗。
token 認(rèn)證是在請(qǐng)求中發(fā)送token 而不是發(fā)送cookie,這樣能夠防止CSRF(跨站請(qǐng)求偽造),就算是在APP 客戶端使用cookie 存儲(chǔ)token,cookie 也僅僅是一個(gè)存儲(chǔ)機(jī)制而不是用于認(rèn)證,這樣就不會(huì)將信息存儲(chǔ)在Session 中,減少了對(duì)session 的操作,token 是有時(shí)效的,一段時(shí)間之后用戶需要重新驗(yàn)證[5]?;趖oken 這樣的特點(diǎn),系統(tǒng)在實(shí)名認(rèn)證方面,采取基于token 的認(rèn)證方式,即用戶不小心退出時(shí),短時(shí)間內(nèi)再次登錄不需要再次輸入賬號(hào)密碼,這樣保障了用戶的便利性和體驗(yàn)感,同時(shí)提高了安全性和擴(kuò)展性。
⑶基于協(xié)同過(guò)濾的用戶推薦
用戶注冊(cè)時(shí),可以綁定QQ 號(hào)或者微信號(hào)來(lái)進(jìn)行獲取數(shù)據(jù),這樣就可以減少一些信息錄入,減輕用戶的工作量,同時(shí)通過(guò)用戶在QQ 號(hào)或微信號(hào)的一些標(biāo)簽推測(cè)出用戶的喜好,利用用戶選擇的標(biāo)簽來(lái)推薦其喜歡的社團(tuán)。
為了提高推薦的準(zhǔn)確性,采取基于用戶的協(xié)同過(guò)濾算法(User-CF)和基于物品的協(xié)同過(guò)濾算法(Item-CF)。User-CF 算法是基于假設(shè)“用戶會(huì)喜歡與他興趣相投的其他用戶喜歡的項(xiàng)目”,從與用戶(U)有較高相似度的用戶集合(C)喜歡的社團(tuán)與活動(dòng)中,選取用戶(U)未采取任何行動(dòng)的社團(tuán)與活動(dòng),推薦給用戶(U)。
而Item-CF 算法基于假設(shè)“用戶會(huì)喜歡與他過(guò)往喜歡的項(xiàng)目相似的項(xiàng)目”,從與用戶(U)過(guò)往喜歡的社團(tuán)與活動(dòng)有較高相似度的社團(tuán)與活動(dòng)集合(W)中,選取用戶(U)未采取任何行動(dòng)的社團(tuán)與活動(dòng),推薦給用戶(U);兩者的基礎(chǔ)思想是相似的,這里只對(duì)如何實(shí)現(xiàn)基于物品的協(xié)同過(guò)濾算法(Item-CF)進(jìn)行較為詳細(xì)的解釋。
創(chuàng)建社團(tuán)與活動(dòng)時(shí)采取的是標(biāo)簽,借用共同標(biāo)簽占總體標(biāo)簽的比例來(lái)計(jì)算相似度,這里采取Jaccard公式,公式為:
主要思想是去重的jaccard系數(shù),算法如下。
①先定義A∩B函數(shù):
② 對(duì)兩組數(shù)據(jù)進(jìn)行逐一比較,在相同時(shí)進(jìn)行數(shù)量增加:
③返回相同的個(gè)數(shù):
④再定義A∪B函數(shù):
⑤對(duì)兩組數(shù)據(jù)進(jìn)行逐一比較,在取得不重復(fù)的時(shí)候進(jìn)行數(shù)量增加:
⑥返回不重復(fù)的個(gè)數(shù):
⑦計(jì)算|A∩B|/|A∪B|函數(shù):
⑧判斷數(shù)組是否為0,輸入數(shù)組的值:
⑨最后返回值:
為降低熱門(mén)活動(dòng)和熱門(mén)社團(tuán)對(duì)于推薦的準(zhǔn)確率的影響,在計(jì)算用戶相似度時(shí),系統(tǒng)采取加入懲罰因子的解決方案,將項(xiàng)目出現(xiàn)次數(shù)的對(duì)數(shù)取倒數(shù)作為懲罰因子,其中,N(i)表示項(xiàng)目i 出現(xiàn)的次數(shù);i 表示用戶u 和v 共同感興趣的活動(dòng);分母則表示用戶u 和用戶v有所行動(dòng)的社團(tuán)和活動(dòng)的集合長(zhǎng)度,公式如下:
本文基于協(xié)同過(guò)濾算法開(kāi)發(fā)了移動(dòng)版高校社團(tuán)系統(tǒng)。師生通過(guò)手機(jī)登錄該系統(tǒng)進(jìn)行各種日常、學(xué)習(xí)活動(dòng)??梢噪S時(shí)隨地辦公,發(fā)布及參加相關(guān)活動(dòng),進(jìn)行社團(tuán)規(guī)劃和活動(dòng)策劃。系統(tǒng)還為大學(xué)生參加各類(lèi)社團(tuán)提供了學(xué)習(xí)、交流、鍛煉的機(jī)會(huì),以滿足學(xué)生個(gè)性化發(fā)展的需要。