目的
在基于Apache Gremlin的协同推荐一文中描述了如何利用Apache Gremlin实现《玩具总动员》影片的基于用户协同过滤推荐算法。向对有共同爱好影片《玩具总动员》的观众推荐其它的影片。
本文将继续介绍如何利用Apache Gremlin实现《玩具总动员》影片的基于内容的协同过滤算法实现。
推荐相似属性影片
加入作为一个父亲想给自己的孩子挑选一个电影,而这个电影与《玩具总动员》影片有着很高相似属性,那么我们就可以利用在Apache Gremlin电影推荐图数据一文中建立的电影评级图数据,以及基于Apache Gremlin的协同推荐一文中定义的corated自定义遍历函数。实现代码如下:
gremlin> m = [:]
gremlin> x = [] as Set
gremlin> v.out('hasGenera').aggregate(x).back(2).corated(3)
.filter{it != v}.out('hasGenera').retain(x).back(2).title.groupCount(m) >> -1
==>null
gremlin> m.sort{a,b -> b.value <=> a.value}[0..9]
==>American Beauty (1999)=949
==>Back to the Future (1985)=876
==>Toy Story 2 (1999)=871
==>Princess Bride, The (1987)=851
==>Groundhog Day (1993)=843
==>Shakespeare in Love (1998)=807
==>Forrest Gump (1994)=775
==>Men in Black (1997)=747
==>E.T. the Extra-Terrestrial (1982)=737
==>Bug's Life, A (1998)=700
推荐属性相同的影片
从上面的计算结果我们找到了合适的推荐影片,而且这些影片与《玩具总动员》的属性高度关联相似。
但是,作为一个严格的父亲会发现上述的结果中有些影片虽然与《玩具总动员》高度关联相似,但是还是发现其中部分影片不适合儿童,例如《American Beauty》影片。于是我们就要更加对属性进行严格的控制,这位父亲希望能推荐的影片的属性完全和《玩具总动员》一致。针对这位父亲的需求,我们需要推荐的影片属性和《玩具总动员》一致,代码如下:
gremlin> m = [:]
gremlin> x = [] as Set
gremlin> v.out('hasGenera').aggregate(x).back(2).corated(3)
.filter{it != v}.filter{it.out('hasGenera')>>[] as Set == x}.title
.groupCount(m) >> -1
==>null
gremlin> m.sort{a,b -> b.value <=> a.value}[0..9]
==>Toy Story 2 (1999)=871
==>Bug's Life, A (1998)=700
==>Chicken Run (2000)=465
==>American Tail, An (1986)=140
==>Aladdin and the King of Thieves (1996)=39
==>American Tail: Fievel Goes West, An (1991)=37
==>Rugrats Movie, The (1998)=34
==>Adventures of Rocky and Bullwinkle, The (2000)=21
==>Saludos Amigos (1943)=4
Apache Gremlin
网友评论