目的
在基于Apache Gremlin的協(xié)同推薦一文中描述了如何利用Apache Gremlin實(shí)現(xiàn)《玩具總動(dòng)員》影片的基于用戶協(xié)同過濾推薦算法份氧。向?qū)τ泄餐瑦酆糜捌锻婢呖倓?dòng)員》的觀眾推薦其它的影片。
本文將繼續(xù)介紹如何利用Apache Gremlin實(shí)現(xiàn)《玩具總動(dòng)員》影片的基于內(nèi)容的協(xié)同過濾算法實(shí)現(xiàn)弯屈。
推薦相似屬性影片
加入作為一個(gè)父親想給自己的孩子挑選一個(gè)電影蜗帜,而這個(gè)電影與《玩具總動(dòng)員》影片有著很高相似屬性,那么我們就可以利用在Apache Gremlin電影推薦圖數(shù)據(jù)一文中建立的電影評(píng)級(jí)圖數(shù)據(jù)资厉,以及基于Apache Gremlin的協(xié)同推薦一文中定義的corated自定義遍歷函數(shù)厅缺。實(shí)現(xiàn)代碼如下:
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
推薦屬性相同的影片
從上面的計(jì)算結(jié)果我們找到了合適的推薦影片,而且這些影片與《玩具總動(dòng)員》的屬性高度關(guān)聯(lián)相似宴偿。
但是湘捎,作為一個(gè)嚴(yán)格的父親會(huì)發(fā)現(xiàn)上述的結(jié)果中有些影片雖然與《玩具總動(dòng)員》高度關(guān)聯(lián)相似,但是還是發(fā)現(xiàn)其中部分影片不適合兒童窄刘,例如《American Beauty》影片窥妇。于是我們就要更加對(duì)屬性進(jìn)行嚴(yán)格的控制,這位父親希望能推薦的影片的屬性完全和《玩具總動(dòng)員》一致娩践。針對(duì)這位父親的需求活翩,我們需要推薦的影片屬性和《玩具總動(dòng)員》一致,代碼如下:
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