From 1735ae79f710446d33689d5a8401c95c088c9560 Mon Sep 17 00:00:00 2001 From: j Date: Wed, 20 Jun 2018 10:44:40 +0200 Subject: [PATCH 1/2] only use active scenes --- recommendation_engine.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/recommendation_engine.py b/recommendation_engine.py index fb86f72..8608dd1 100644 --- a/recommendation_engine.py +++ b/recommendation_engine.py @@ -164,13 +164,19 @@ class Engine: }, ['id', 'name', 'tags', 'nodename']) if entity.get('tags', []) and entity.get('nodename')] # Get list of storyline names names = list(set([storyline['name'] for storyline in storylines])) + # Get list of items to use in DD + items = [item['id'] for item in self.pandora.find({ + 'conditions': [ + {'key': 'list', 'operator': '==', 'value': 'dau:DD'} + ] + }, ['id'])] # Get all clips annotated with storyline references clips = [clip for clip in self.pandora.find_annotations({ 'conditions': [ {'key': 'layer', 'operator': '==', 'value': 'storylines'} ], 'operator': '&' - }, ['id', 'in', 'out', 'value']) if clip['value'] in names] + }, ['id', 'in', 'out', 'value']) if clip['value'] in names and clip['id'].split('/')[0] in items] # Get list of ids for videos with clips ids = list(set([clip['id'].split('/')[0] for clip in clips])) # Get and cache video data @@ -242,6 +248,14 @@ class Pandora: self.api = ox.API(url) self.api.signin(username=username, password=password) + def find(self, query, keys): + # print('FIND', query, keys) + return self.api.find({ + 'keys': keys, + 'query': query, + 'range': [0, 1000000] + })['data']['items'] + def find_annotations(self, query, keys): # print('FIND ANNOTATIONS', query, keys) return self.api.findAnnotations({ From bb579f2f6f491967a78fb38a62a77d0d8e032823 Mon Sep 17 00:00:00 2001 From: j Date: Tue, 26 Jun 2018 17:12:43 +0200 Subject: [PATCH 2/2] fix per product score calculation --- recommendation_engine.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/recommendation_engine.py b/recommendation_engine.py index 8608dd1..98c1b26 100644 --- a/recommendation_engine.py +++ b/recommendation_engine.py @@ -107,15 +107,15 @@ class Engine: ) videos += playlists[:channels['globalKeywords']] playlists = playlists[channels['globalKeywords']:] - # Count tags for the user + # Count products the user has seen count = defaultdict(lambda: 0) for event in user.get('events', []): if event.get('data', {}).get('product'): count[event['data']['product']] += 1 - # For each tag in playlist, increment score by count + # For each product in playlist tags, increment score by count for playlist in playlists: score[playlist['name']] = random.random() - for tag in [tag for tag in playlist['tags'] if tag not in sliders]: + for tag in set(playlist['tags']) & set(count): score[playlist['name']] += count[tag] # Select highest scoring playlists videos += sorted(