一 项目介绍
本系统旨在构建基于音乐特征值的个性化音乐推荐系统,通过提取音乐中的 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 | 否 | 播放量 |
五 工作机制
用户登录系统之后,通过浏览相关歌曲或在开始页面添加歌曲口味,可以进行添加新的音乐和删除音乐等操作。
系统根据用户浏览痕迹(包括歌曲播放量、对歌曲的点赞、点踩、歌曲的评论等)推荐相关的音乐。
管理员主要是对歌曲和用户进行增删改查等操作。