个性化新闻推荐系统
文件列表(压缩包大小 868.06K)
免费
概述
本推荐系统使用的推荐算法包括协同过滤(Collaborative Filtering)、基于内容相似度的推荐(Content-based Recommendation)与热点新闻推荐(Hot News Recommendation):
主要使用的库(Lib):
本推荐系统需要基于【新闻模块】使用,此处对于【新闻模块】的定义是:有规律地进行新闻采集,并通过公共平台对用户进行新闻展示与推送的应用。当然,这是实际应用的需求,如果只是自己做研究或者实验的话,可以只使用测试数据即可。
(该步骤主要是为了说明推荐系统要求交互的数据。真实建库的话,直接在新建的数据库中运行测试数据,即可完成所有建表工作,附带提供的测试数据。) 本推荐系统目前只支持与MYSQL数据库进行交互 本系统需要与五个表进行交互:用户表(users),新闻表(news),新闻模块表(newsmodules),浏览记录表(newslogs),推荐结果表(Recommendations)。
在项目根目录下的res目录下,修改dbconfig.properties文件中有关数据库的配置:
url = jdbc:mysql://[数据库ip]/[数据库名]?useUnicode=true&characterEncoding=utf8
user = [登录用户名]
password = [登录密码]
注意,数据库的编码设置应为utf8mb4。(mb4支持emoji字符)
完成数据库配置后,依次四个步骤:
1.在com.qianxinyao.TomNewsRecommender包下,找到类Main;
2.选择推荐算法。设置boolean类型的enableCB,enableCF,enableHR变量,分别代表推荐过程中是否启用协同过滤推荐算法、基于内容的推荐算法、基于热点新闻的推荐算法。若均设为true,表示三种算法均工作,一起为用户生成推荐结果;
3.选择推荐对象。推荐对象分为三种:全体用户,活跃用户(最近一段时间有登录行为)与自定义用户(自己指定的用户),若选择自定义用户,需要构建包含目标用户id(long)的List;
4.选择系统运行方式。运行方式分为两种:一次运行和定时运行。一次运行即只为用户进行一次推荐生成,生成结束后则系统停止,若要再生成推荐,需要重新启动系统。而定时运行则可以定时为用户生成推荐结果,若不强制停止系统,则系统会一直运行下去。(定时运行时间在paraConfig.properties文件中设定) 以下是示例代码:
package com.qianxinyao.TomNewsRecommender;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
/**
* @author bluemapleman
* @email tomqianmaple@gmail.com
* @github https://github.com/bluemapleman
* @date 2016年10月20日
* 推荐系统入口类,在此启动推荐系统。
*/
public class Main
{
public static final Logger logger = Logger.getLogger(Main.class);
/**
* 推荐系统运行入口
* @param args
*/
public static void main(String[] args)
{
//选择要在推荐系统中运行的推荐算法
boolean enableCF=true,enableCB=false,enableHR=false;
List<Long> userList=new ArrayList<Long>();
userList.add(1L);
userList.add(2L);
userList.add(3L);
//为指定用户执行一次推荐
new JobSetter(enableCF,enableCB,enableHR).executeInstantJobForCertainUsers(userList);
//定时执行推荐
// new JobSetter(enableCF,enableCB,enableHR).executeQuartzJob(forActiveUsers);
}
}
系统运行的各类参数都可以在根目录下src/main/res目录下的paraConfig.properties文件中进行配置。默认配置是推荐配置。 若需要推荐系统能在每次生成有效的推荐,只要【新闻模块】保持以一定频率抓取一定量的新闻并入库news表。(最好与推荐系统定时推荐的频率相同,并在推荐系统运行之前完成一次抓取,推荐每天抓取一次新闻,并进行一次推荐生成。)
注意:入库的新闻要标注module_id,详情可参见数据库表与com.qianxinyao.TomNewsRecommender包下的NewsScraper类中的代码。
在Mysql数据库中运行data.sql中的sql语句,可生成数据库结构与测试数据。
测试数据中包含以下几个部分:
要查看推荐系统在测试数据上运行的效果,只需在Main类下执行:
//在测试数据上运行
new TestDataRunner().runTestData();
1.com.qianxinyao.TomNewsRecommender下的NewsScraper类是抓取网易的测试新闻时用的类,大家也可以用这个类继续采集新闻。该类默认对网易新闻首页的所有新闻进行一次抓取入库。
2.协同过滤的效果目前不太稳定/可控,因为采用的是Mahout内置的协同过滤工具。一般来说,新闻模块的活跃用户越多,则协同过滤效果越好,也越明显。若有需求,我会在后期自己实现能稳定生成指定数量的推荐结果的协同过滤算法。
3.一般当协同过滤与基于内容的推荐算法生成的推荐数目不足时,可以用基于热点新闻的推荐进行数量补充。
如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈
评论(0)