个性化音乐推荐系统设计与实现 下载本文

字段名类型长度描述说明

MusicID int 11 音乐编号主键,自动增加 Filepath varchar 255 音乐路径 Hits int 11 音乐点击量初始0 Lyrics varchar 255 歌词 Name varchar 255 音乐名称 Singer varchar 255 歌手

AreaID int 11 音乐地区编号外键引用“音乐地区数据表” StyleID int 11 音乐风格编号外键引用“音乐风格数据表” TypeID int 11 音乐类型编号外键引用“音乐类型数据表” Likes int 11 用户喜欢次数 Score double 0 评分

StartDate varchar 255 上传日期

此表是歌手信息数据表,用于收集歌手信息。其中包含歌手编号SingerID;不可重复;歌手类型type;歌手地区region;歌手姓名name;歌手性别sex;乐团编号BrandID;组合编号CompeID。

由于不同歌手有不同信息,设计“歌手信息表”如表3-8所示。 表3-8 歌手信息表(表名:t_singer) 字段名类型长度描述说明

SingerID int 10 歌手编号主键,自动增加 SingerType varcher 255 歌手类型非空 Singerregion varcher 255 歌手区域非空 Singername varcher 255 歌手姓名非空 Singersex Char 1 歌手性别非空 SingerBrandID int 10 乐团编号允许为空 SingerCompeID int 10 组合编号允许为空

4 系统技术实现

由于是在互联网上发布个性化音乐推荐系统,所以系统的首页将成为能否吸引用户的关键,而我们在网站的设计过程中不仅保证功能的完善,而且还考虑到了整体的美观性,从而给用户一个更加完美的体验。

在整个系统的布局当中,模块众多,为了操作的简便性,我们便用一个单独的页面来作为网站的后台。然后在网站首页的下方提供管理员登录的链接,当管理员登录时就可以直接进入登录页面输入用户名密码进行登录,这样就完美的将前台和后台的功能进行区分,首页的主要模块也就可以更多的用来展示其他功能。

程序运行结果如图4-1所示。 图4-1 首页界面

4.1 音乐上传功能的实现

管理员具有此功能,进入adm_add.jsp页面内输入歌曲的相应信息,再点击添加按钮,提交到数据库里。如图4-2所示。

图4-2上传歌曲界面 实现过程

在adm_add.jsp页面中应用到了JavaScript[11]脚本定义了一个函数function checkform(myform)判断那些内容是必须要填写的,当输入了歌曲的名字时可以点击检测该歌曲是否上传按钮,如果数据库里有,则不能再上传,没有则可以此方法为function opendialog(),部分代码如图4-3所示。

图4-3 上传功能关键代码

4.2 收集歌曲信息功能的实现

* 由于系统的很多部分功能都要涉及到对数据库的操作,所以此系统将数据表封装成每个类的形式并进行操作,在其类中定义字段名、属性名、方法来实现数据的添加、修改、删除、查询、更新的功能。这样使得工程的结构清晰,思路明了。例如public List query(String condition)查询歌曲信息的方法、public int insert(Song song)添加方法。

* 此系统中为tools[12]类,方法为change(String str),用过滤器将过滤不符合要求的字符,部分代码如下。

if (str == null) {return \str.trim().replace(\(Exception e) {return \

图4-4 收集歌曲信息关键代码

* 在进行前台数据显示时,本网站应用了div和css,共有7个类别部分代码如下。

图4-5 歌曲分类主要代码

4.3 单曲管理功能的实现

单曲管理的功能主要指的是音乐的下载,上传和播放功能。游客或者是用户进入主页后,可以选中歌曲点击试听如图4-6所示,如果想把它下载到自己电脑上时进入歌曲详细信息,再点击下载歌曲如图4-7所示。

图4-6音乐试听界面 图4-7音乐下载界面

4.3.1 播放功能的实现

利用onClick事件弹出一个窗体,在action中定义了一个方法[13]。 图4-6 播放功能关键代码

4.3.2 下载功能的实现

先点击歌曲名的链接产生一个单击事件,进入searchResult.jsp页面,在action 中有一个方法public ActionForward songDetal(ActionMapping mapping显示歌曲的详细信息。再点击下载产生一个单击事件,进入download.jsp页面,在action 中有定义了一个方法public ActionForward download(ActionMapping mapping, ActionForm.在download.jsp页面中利用jspsmartupload.jar中的upFile.downloadFile(path,null,file)方法进行下载,如果不存在则会提示下载失败。

4.4音乐推荐功能的实现

首先当用户注册了以后在音乐播放界面上可以对该音乐进行评分,评分一共有4个标准,差劲,一般,喜欢和非常喜欢,这些所对应的分数为2分,3分,4分和5分。当用户选择了喜欢或者是非常喜欢的时候如图4-8所示,系统按照评分标准将评分相似的歌曲推荐给用户如图4-9所示。

图4-8对歌曲评分 图4-9系统推荐音乐 4.4.1所用数据表

涉及到的数据表主要是音乐地区数据表t_music_area,音乐风格数据表t_music_style,音乐类型数据表t_music_type,音乐信息表t_music,筛选结果表t_filtling_result。前三个表是用于提取音乐信息到音乐信息表t_music中,最后一个表是将提取的信息利用协同过滤算法来过滤掉不符合标准的音乐,并生成符合标准的音乐。

音乐地区数据表t_music_area,用到的字段有音乐地区编号AreaID,不可重复,必须填写;音乐地区名称AreaName,必须填写。音乐风格数据表t_music_style,用到的字段有音乐风格编号StyleID,不可重复,必须填写;音乐风格名称StyleName,必须填写。音乐类型数据表t_music_type,用到的字段有音乐类型编号TypeID,不可重复,必须填写;音乐类型名称TypeName,必须填写。音乐信息表t_music,用到的字段有音乐编号MusicID;不可重复;音乐路径Filepath;音乐点击量Hits;歌词Lyrics;音乐名称Name;歌手Singer;音

乐地区编号AreaID;音乐风格编号StyleID;音乐类型编号TypeID;用户喜欢次数Likes;音乐评分Score。筛选结果表t_filtling_result,用到的字段有筛选结果编号ResultID,不可重复,自动增加;音乐编号MusicID,不可重复;用户编号UserID,不可重复。

4.4.2实现过程

协同过滤[14]算法是目前推荐系统中应用最为广泛的一种算法,该算法首先有一个前提假设,那就是假设有A和B两个用户,如果他们共同喜欢一系列类似的歌曲,那么用户A也有很大概率喜欢B喜欢的其他类型歌曲。基于这个假设,协同过滤算法的主要思想是:首先用户对他们所听过的歌曲进行评分,然后通过相应的公式计算出不同用户对某个歌曲的相似程度,然后根据这个相似程度就可以找到最近邻居,并且根据最近邻居的评分,推荐相应的歌曲。

举个例子来说,假设在音乐推荐系统中,一共有5个用户,8个音乐,每个用户对每个音乐的评价矩阵如下:

表4-9 每个用户评价音乐

半壶纱演员你北漂洒脱故乡爱去故乡 用户u1 45 2 用户u2 5 5 4 4 2 用户u3 22 5 45 用户u433 2 用户u5544

注:最高为5分,最低为2分,空白处表示该用户没有听过该音乐或者是没有对该歌曲进行评分。

此时要为用户用户u1推荐一些她可能喜欢的音乐步骤如下。 (1)寻找与用户u1“品味”最接近的用户。 自然描述:

这里的“品味”相近反应到数字上就是打分接近。比如表中,用户u1对半壶纱和北漂这两首歌有着极高的评价(分别为4分和5分),但是不喜欢洒脱;通过观察不难发现用户u2对半壶纱和北漂也表示相当的喜欢(分别为5分和4