基于用户的协同过滤算法用于题目推荐(数据库实现)

具体思路如下:
在这里插入图片描述
我们认为排名靠近的用户的相似度高,因此会为目标用户推荐与其排名靠近的用户做过的题。

即A,B两个用户是排名靠近的两个用户,对A推荐的题目则是B对A的差集(阴影部分)

用数据库语句实现如下:

user_id 为用户名

rec_list为排名靠近的用户

number 为 推荐题目

solution 为 用户提交记录(包含用户名,题目名称)

def produce_rec_sql(rec_list, user_id, number):
    sql1 = '''
    drop view if exists union_view ;
        create view union_view as(
    SELECT distinct(problem_id)  as dis_pid
      from solution p_sol
     where user_id in('{}','{}','{}','{}','{}','{}')) ;
     drop view  if exists single_view ;
        create view single_view as(
      select distinct(problem_id)  as single_pid
      from solution
     where user_id= '{}'
    );
        '''.format(rec_list[0], rec_list[1], rec_list[2], rec_list[3], rec_list[4], rec_list[5], user_id)
    sql2 = '''
    select *
      from union_view t
     where not exists(
       SELECT  *
            FROM
                single_view svw
            WHERE
                t.dis_pid = svw.single_pid
    ) limit {};
    '''.format(number)
    return sql1, sql2
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值