劉明華,王樂樂,葛 恒,武思涵,李 涵
(北京信息科技大學理學院,北京 100192)
隨著信息科技的迅猛發展和上網人群規模的日趨壯大[1],越來越多的軟、硬件工具被開發出來,為人們的學習和娛樂提供便利。在這當中,移動端應用普及度高,但存在硬件資源要求高、占用存儲空間大等缺陷。針對此類缺陷,輕應用(Light App)[2]產品在2013 年由百度公司首先提出,但在社會中并未獲得廣泛應用。而于2017 年提出的微信小程序(WeChat Applet),卻受到人們的喜愛,迅速形成龐大的用戶人群,越來越多的微信用戶熟悉和適應了這種無需下載就可使用、打開速度快、不過多占用存儲空間的微型程序[3-4]。對于開發者而言,微信小程序的前端代碼都存儲在騰訊云服務器上,其因響應速度快、開發成本低等優點也受到青睞。本研究嘗試設計實現一款基于微信小程序的學業互助平臺,運用MINA 框架、JSON 數據庫進行開發,以豐富便利的功能為廣大學生群體的學習和生活提供幫助。
所設計的學業互助平臺分為四個模塊,分別為:個人中心模塊、論壇模塊、首頁模塊和搜索模塊,如圖1 所示。在個人中心模塊,有“注冊”和“我的標簽”兩個功能。標簽內容包括學生個人專業信息及年級。在首頁模塊中,學生可以查看自己的專業介紹和培養計劃。小程序也會根據學生在個人中心選擇的標簽,推薦學生可能感興趣的文章。在搜索模塊中,小程序會給出最近的搜索熱詞,并使用模糊搜索完成信息檢索工作。在論壇模塊,學生可以發布文章、上傳和下載圖片,文章會附帶發布者的標簽信息。同時小程序還有“監控審核”功能,后臺管理員會把論壇中不合適的帖子或圖片刪除。
在開發過程中,小程序需要讀取構建頁面所需要的圖片和文字信息,并在發布后存儲用戶信息和用戶發布的內容。為此選用JSON(JavaScript Object Notation)[5]設計和創建數據庫表。JSON 數據庫是一種非關系型數據庫,用于存儲和查詢JSON 格式數據。在此一共為數據庫設計四張表,分別是User(用戶表)、Competition(競賽信息表)、Essay(文章表)、Plan(培養計劃表),用來記錄數據。
用戶表如表1 所示。它用來保存注冊用戶的基本信息和用戶勾選的標簽信息。其中,Id 是記錄唯一標識,使用了String 類型,用于在表中編號,由數據庫表自動分配,且不可更改;_openid 是微信用戶識別的唯一標識,使用了String 類型,這個標識只對當前的小程序有效;Major、Nianji 是用戶在標簽頁面選擇的專業、年級,使用了String 類型,根據用戶選擇的不同按鈕進行賦值;Name 是用戶昵稱,使用了String 類型,是用戶授權微信身份的名稱;Submit 是用戶發布的文章數組,使用了Array 類型,數組內部是String 類型的文章Id。

表1 User 表
競賽表如表2 所示。它用來存儲首頁頁面中的競賽信息。其中,Id 是記錄唯一標識,使用了String類型,用于在表中編號,由數據庫表自動分配且不可更改;Title 是競賽名稱,使用了String 類型,存放了記錄競賽的簡稱;Images 是圖片地址數組,使用了Array 類型,內部包含String 類型的圖片存儲地址;Index 是競賽索引,使用了Number 類型,用來在數據庫表中排序。

表2 Competition 表
培養計劃表如表3 所示。它用來存儲不同專業的培養計劃數據。其中,Id 是記錄唯一標識,使用了String 類型,用于在表中編號,由數據庫表自動分配,不可更改;Image 是培養計劃圖片地址,使用String類型,存放圖片在云存儲的存儲地址;Major 是專業標識,使用String 類型,存放了培養計劃圖所屬專業。

表3 Plan 表
文章表如表4 所示。它用來記錄論壇模塊中學生發布的文章數據。其中,Id 是記錄唯一標識,使用了String 類型,用于在表中編號,由數據庫表自動分配且不可更改;_openid 是微信用戶識別的唯一標識,使用了String 類型,作為唯一標識用來檢索用戶表中的信息;Avatar 是作者頭像地址,使用String 類型,是微信為每一個微信用戶提供的頭像網絡地址;Body 是文章文字的主體,使用了String 類型,存放用戶在文章中編輯的文字內容;Images 是文章圖片地址數組,使用了Array 類型,內部是String 類型的云存儲中圖片地址;Major、Nianji 是作者的專業、年級,使用了String 類型,是在用戶發布后復制的用戶表中發布者的信息;Time 是文章發布時間,使用了Date 類型,方便文章在展示過程中排序;Title 是文章標題,使用String 類型,是搜索頁面模糊查詢的搜索源;Writer 是作者名稱,使用了String 類型,以便在論壇頁面直接顯示作者名稱;Comments 是用戶評論數組,使用了Array 類型,內部是Object 類型的對象,包含String 類型的Name(評論者名稱)、String 類型的Avatar(評論者頭像地址)、String 類型的Image(評論圖片)、String 類型的Body(評論內容)。

表4 Essay 表
本小程序采用了騰訊官方提供的微信開發者工具,以MINA(MINA IS NOT APP)為小程序開發框架,進行簡潔高效的開發。整個小程序系統可分為應用層、視圖層(Viewer)、邏輯層(App Service)[6]和存儲層四層,如圖2 所示。

圖2 MINA 層次架構圖
其中,存儲層是整個系統的云端環境。設計使用了騰訊云提供的JSON 數據庫和云存儲來存儲用戶信息數據和用戶上傳的圖片。
邏輯層為整個系統提供服務。使用JavaScript[7]來編寫頁面的交互邏輯、網絡請求、數據處理;使用JSON[8]編寫頁面交互邏輯,實現處理數據和網絡請求,用來配置系統文件,同時與存儲層JSON 數據庫連接。
視圖層是實現數據交換和數據顯示的試題頁面。用WXML(WeiXin Markup Language)[9]和WXSS(WeiXin Style Sheet)編寫,并由組件展示。WXML 用于搭建小程序頁面的基本結構,是一種類似HTML的文本標記語言;WXSS 則與CSS 類似,用來渲染頁面的表現形式。MINA 框架為頁面組件提供了一些事件監聽相關的屬性,通過事件處理函數可以將視圖層和邏輯層綁定在一起。當更改邏輯層中的數據時,視圖層也會隨之改變。
應用層是系統與用戶操作的核心部分。微信小程序可以在PC 端的微信軟件和移動手機端的微信APP 上使用,本設計小程序同樣也可跨平臺使用。
在搜索頁面中,采用模糊搜索[10]對學生輸入的詞語或語句進行檢索。模糊搜索是用戶搜索意向不明確或者檢索詞較少時想要返回更多查詢結果的情況下使用的方法。模糊搜索的核心思想是將用戶輸入的字符串拆分成多個長度較小的字符串,與待搜索的數組的每一項做匹配,把符合要求的數據保存下來。在本小程序中,模糊搜索的應用場景是在數據庫表中尋找與檢索詞類似的結果。拆分檢索詞的過程需要用到正則表達式,如要查詢標題與“數學”相關的文章時,后臺代碼會將字符串“數學”分為“%數%學%”并完成查詢。
設計使用db.RegExp 完成模糊搜索。它是官方提供的模糊查詢API,代碼情況具體如圖3 所示。首先通過查找語句訪問數據庫表'essay',確定查詢域是表中每條數據的title;然后使用db.RegExp 將用戶輸入內容content 分詞,并且當用戶輸入英文查詢查詢時,內容不區分大小寫;最后使用get 函數獲取查詢結果。

圖3 模糊搜索代碼
首頁模塊中包含向學生推薦感興趣文章的功能。推薦功能的實現需要使用基于內容的推薦算法(Content-Based Recommendations)[11-12],該算法是基于標的物相關信息、用戶相關信息為用戶提供推薦服務的。具體來說,算法首先獲取用戶選擇的專業和年級標簽,然后從文章庫中找出所有包含這些標簽的文章。文章的標簽可以是人工標定的,也可以是從作者自己設置的標簽中提取的。應用推薦算法的一個實例如圖4 所示。本小程序可以為大一學生推薦新生入學指南,向大二學生推薦各自專業的競賽經驗,針對大三同學推薦考研經驗,等等。

圖4 推薦算法示例
基于內容推薦的實現代碼如圖5 所示。首先使用微信小程序API 接口獲取用戶基本信息,然后在User 表中查找與用戶昵稱相同的數據并用變量admin 存儲;接下來查詢數據庫表Essay,尋找專業和年級標簽與用戶相同的文章,并將這些文章按時間降序排序存入全局變量passages 中。

圖5 實現基于內容推薦的代碼
小程序基于騰訊云服務器搭建,使用的云服務器配置為4 核CPU、8G 內存、10M 帶寬,此外還包括1500 GB 月流量;系統盤選取100 GB SSD;10 M公網帶寬下載速度峰值為1280kB/s。所設計的小程序被應用于北京信息科技大學理學院,為信息與計算科學、電子信息科學與技術、應用統計學三個專業的學生提供服務。目前理學院在校本科生共579 人。小程序于2022 年8 月21 日發布試用版進行內測,經過10 天的建議采納,進行了修改優化,于8 月31日發布正式版。從正式發布到2023 年3 月1 日,在7 個月的時間內累計訪問用戶593 人次。小程序用戶訪問曲線如圖6 所示。

圖6 小程序用戶訪問統計曲線
對于圖6 中的數據變化趨勢可作如下分析解釋:2022 年8 月到9 月期間小程序訪問用戶人數較高,這一時期適逢開學,學生需要對新學期課程提前加以了解,并做出相應學業規劃;2023 年1 月開始,該學期臨近結束,學生陸續進入寒假狀態,對課程信息的需求減少,因此用戶訪問量較少。
小程序的首頁模塊的各個頁面如圖7 所示。進入首頁后,可以看到學校海報的輪播圖、競賽公告、培養計劃和文章推薦等,如圖7(a)所示;點擊培養計劃按鈕,小程序會根據學生的專業信息,展示相應專業的學分修讀計劃,如圖7(b)所示;如果想更深入了解自己的專業,可以選擇相應的專業簡稱,查看專業特色介紹和與各學期的課程安排,如圖7(c)所示;在競賽公告一欄,會列出最近三個適合學生參加的學科競賽,點擊則可查看詳情介紹,如圖7(d)所示。在首頁的最下面,通過基于內容的推薦算法,會根據學生選擇信息進行推薦。

圖7 首頁模塊界面
點擊放大鏡圖標即可轉入搜索模塊。在搜索欄中輸入文字,可通過模糊查詢獲取檢索內容,具體示例如圖8 所示。在頂部文本輸入框中輸入“數學”,點擊搜索按鈕就可以看到在數據庫中檢索到有關數學的內容。搜索結果包括數學建模(信計)期末考試、期末考試-數學分析1、期末考試-數學分析3 等。

圖8 搜索模塊界面
論壇模塊的各個頁面如圖9 所示。在圖9(a)中,頂端是發布文章按鈕,點擊即可進入發布界面,如圖9(b);發布按鈕下面,按時間倒序展示發布的文章,展示內容包括文章標題、作者、時間,以便學生快速定位自己感興趣的文章,點擊標題即進入文章詳情頁面,頁面如圖9(c)所示,點擊圖片可以放大查看也可以下載,如圖9(d)所示。在發布界面,學生可以編輯標題、正文和上傳圖片,圖片的數量最多不超過9 張。在閱讀文章的最后提供評論功能,輸入文字上傳圖片點擊發表即可完成評論。與文章展示順序相反,評論信息將按時間正序排列。

圖9 論壇模塊界面
個人中心模塊的各個頁面如圖10 所示。學生可以自由選擇是否登錄來實現對自己的隱私保護。登錄后,小程序會獲取學生的微信頭像和昵稱,在個人中心頁面顯示。在頭像和昵稱下方,提供了方便學生尋找自己發布內容的“我的發布”,以及為首頁推薦和文章標簽提供信息的“我的標簽”。標簽在專業一欄可以選擇“信計”、“電技”和“統計”等不同專業。年級一欄可選擇“大一”、“大二”、“大三”和“大四”。除此之外,還可在“關于程序”當中查看小程序介紹和小程序開發者信息,為學生定制化信息和提出修改建議也提供了便利。

圖10 個人中心模塊界面
本小程序的開發工作,從功能需求選擇、數據庫環境搭建、小程序頁面實際開發,到小程序上線和發布、后臺監管和檢測,都是在對現有微信小程序開發經驗進行梳理和運用的基礎上,與大學生的學習生活需要相結合而完成的。在互助平臺的構建中,融入了模糊搜索算法和基于內容的推薦算法,對小程序的搜索功能及個性化推薦功能實現優化和改善。設計實現的互助平臺,不僅能幫助大學生全面認識各專業,更可輔助學生做出合理學業規劃,讓學生在課堂之外體驗合作學習的樂趣。目前小程序也存在一些不足,比如隨著時間的推移,學生發布在小程序上面的內容會越來越多,屆時騰訊云開發所使用的數據庫和存儲容量都將需要擴增,購買云服務器和數據庫來增大存儲和網絡帶寬,將作為一個讓小程序運行更流暢的不可避免的選擇。后續研究將繼續跟進,進一步修改、優化代碼,提供更好的服務。