一 項目介紹
本系統旨在構建基於音樂特征值的個性化音樂推薦系統,通過提取音樂中的 DNA 特征進行聚類,生成音樂曲庫,並采取協同過濾的方式記錄積累用戶的偏好,對其進行加權處理,向用戶推薦個性化的音樂服務內容。
個性化音樂推薦系統主要解決兩方面的問題:
- 基於音樂的特征屬性,設計一個音樂 DNA 庫,發現音樂間的關聯關系,為系統提供給個性化推薦提供支持。
- 建立個性化音樂推薦引擎,采用協同過濾的方式為用戶進行個性化音樂推薦,提升用戶對產品的滿意度。
二 設計模式
2.1 項目架構
本項目設計實現一個個性化音樂推薦系統, 經過慎重考慮最終決定做一個網站, 采用 B/S 模式,其中網頁的設計中采用了 JSP 技術,在數據庫的選擇上,考慮到 MySQL 的可移植性較高,故選擇 MySQL 數據庫,系統本體選用 SpringMVC 架構。

MVC 項目架構圖
- 模型(Model) 用於封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法。“ Model ”有對數據直接訪問的權力,例如對數據庫的訪問。“Model”不依賴“View”和“Controller”,也就是說, Model 不關心它會被如何顯示或是如何被操作。但是 Model 中數據的變化一般會通過一種刷新機制被公布。為了實現這種機制,那些用於監視此 Model 的 View 必須事先在此 Model 上注冊,從而,View 可以了解在數據 Model 上發生的改變。
- 視圖(View)能夠實現數據有目的的顯示(理論上,這不是必需的)。在 View 中一般沒有程序上的邏輯。為了實現 View 上的刷新功能,View 需要訪問它監視的數據模型(Model),因此應該事先在被它監視的數據那里注冊。
- 控制器(Controller)起到不同層面間的組織作用,用於控制應用程序的流程。它處理事件並作出響應。“事件”包括用戶的行為和數據 Model 上的改變。
2.2 系統功能結構

系統功能結構圖
2.3 分解視圖

2.4 執行視圖

2.5 實現試圖


三 數據庫設計
3.1 user_library_song 表
| 列名 | 類型 | 長度 | 是否為空 | 說明 |
| id | int | 20 | 否 | id |
| song_id | int | 20 | 否 | 歌曲 id |
| album_id | int | 20 | 否 | 專輯 id |
| play_count | int | 11 | 否 | 播放量 |
| add_time | datetime | 是 | 添加時間 | |
| delete_flag | int | 4 | 否 | 是否刪除 |
3.2 song 表
| 列名 | 類型 | 長度 | 是否為空 | 注釋 |
| id | int | 20 | 否 | 歌曲 id |
| name | varchar | 255 | 否 | 歌曲名 |
| artlist_name | varchar | 255 | 否 | 演唱者 |
| album_name | varchar | 255 | 是 | 專輯名稱 |
| author | varchar | 255 | 否 | 作者 |
3.3 album 表
| 列名 | 類型 | 長度 | 是否為空 | 注釋 |
| id | int | 20 | 否 | id |
| name | char | 255 | 否 | 專輯名稱 |
| cover | int | 255 | 否 | 藝術家 id |
| artlist_id | char | 20 | 否 | 藝術家名稱 |
3.4 topic_song 表
| 列名 | 類型 | 長度 | 是否為空 | 注釋 |
| id | int | 20 | 否 | id |
| topic_id | int | 20 | 否 | 主題 id |
| song_id | int | 20 | 否 | 歌曲 id |
| description | char | 255 | 是 | 描述 |
| song_play_count | int | 20 | 否 | 播放量 |
五 工作機制
用戶登錄系統之后,通過瀏覽相關歌曲或在開始頁面添加歌曲口味,可以進行添加新的音樂和刪除音樂等操作。
系統根據用戶瀏覽痕跡(包括歌曲播放量、對歌曲的點贊、點踩、歌曲的評論等)推薦相關的音樂。
管理員主要是對歌曲和用戶進行增刪改查等操作。
