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

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

即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
posted @ 2022-06-01 15:53  沃特艾文儿  阅读(63)  评论(0)    收藏  举报  来源