Neo4j 做推荐 (5)—— 基于类型的个性化建议

如果我们知道用户看过了哪些电影,我们可以使用此信息来推荐类似的电影:

// Content recommendation by overlapping genres
MATCH (u:User {name: "Angelica Rodriguez"})-[r:RATED]->(m:Movie),
  (m)-[:IN_GENRE]->(g:Genre)<-[:IN_GENRE]-(rec:Movie)
WHERE NOT EXISTS( (u)-[:RATED]->(rec) )
WITH rec, [g.name, COUNT(*)] AS scores
RETURN rec.title AS recommendation, rec.year AS year,
COLLECT(scores) AS scoreComponents,
REDUCE (s=0,x in COLLECT(scores) | s+x[1]) AS score
ORDER BY score DESC LIMIT 10

返回结果如下:

分析:

1. 确定用户Angelica

2. 找出用户评过分的电影m

3. 把被评分的电影的流派找出来(g:Genre)

4. 通过流派g再返回去搜索属于该流派的电影 (rec:Movie),并且是Angelica 没有评过分的那部分电影

5. 返回电影,根据流派名称数量来打分 —— [g.name, COUNT(*)] AS scores

6. 把Scores 列表中的数据列出来 —— COLLECT(scores) AS scoreComponents,

7. 从Scores 列表中,把名称数量提取出来相加,作为得分 —— REDUCE (s=0,x in COLLECT(scores) | s+x[1]) AS score

8. 按得分高低排序

这里运用到了几个函数和表达式:

1. ['a', 'b', 'c'] AS list

    Literal lists are declared in square brackets.

2. collect(n.property)

    List from the values, ignores null.

3. reduce(s = "", x IN list | s + x.prop)

    Evaluate expression for each element in the list, accumulate the results.

 

备注:

[g.name, COUNT(*)] AS scores 这句话想了很久什么意思

因为最终是要返回rec 记录,假设我们已经找到了rec,那么rec 记录中的每一条,它的流派是清晰的。那么它的流派,在 m 中出现过多少次,就是 [g.name, count(*)] 的结果。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
这个Python期末大作业是一个基于协同过滤算法的电影推荐系统,采用了neo4j数据库来存储和查询电影数据。协同过滤算法是一种利用用户的历史行为和兴趣来进行推荐的方法,它可以根据用户的喜好和其他用户的相似度来推荐用户可能感兴趣的电影。 这个电影推荐系统的实现包括以下几个步骤:首先,通过爬虫从网上获取电影的相关信息,比如电影的名字、导演、演员、类型等等,并将这些信息存储到neo4j数据库中。然后,根据用户的历史行为和评分数据,计算用户之间的相似度,并将相似度的结果也存储到数据库中。接下来,当用户登录系统并选择了一个电影,系统会根据用户喜欢的电影类型和其他用户的相似度,从数据库中查找可能感兴趣的电影,并进行推荐。 通过采用neo4j数据库,这个电影推荐系统可以更高效地存储和查询大数据量的电影信息和用户数据。neo4j是一个图数据库,它的存储结构和图的结构相似,可以更好地支持复杂的关系型数据的存储和查询。同时,neo4j也提供了丰富的查询语言和API,方便我们实现各种复杂的查询和推荐算法。 总而言之,这个基于协同过滤算法的电影推荐系统使用了neo4j数据库来存储和查询电影数据,通过分析用户的历史行为和其他用户的相似度来进行推荐,可以更好地满足用户个性化需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员imHou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值