Commit 8ad9f066350ba4d4e85787e8da32f795313520fa

Authored by Tássia Camões Araújo
1 parent bdc5a4e1
Exists in master and in 1 other branch add_vagrant

Profile strategy that ignores auto-installed packages.

Small fix on how packages list populates user's item_score dict. It was missing
any package that has 'install' in its name.
Showing 2 changed files with 18 additions and 4 deletions   Show diff stats
src/app_recommender.py
@@ -37,6 +37,7 @@ if __name__ == '__main__': @@ -37,6 +37,7 @@ if __name__ == '__main__':
37 cfg = Config() 37 cfg = Config()
38 rec = Recommender(cfg) 38 rec = Recommender(cfg)
39 user = LocalSystem() 39 user = LocalSystem()
  40 + user.maximal_pkg_profile()
40 41
41 begin_time = datetime.datetime.now() 42 begin_time = datetime.datetime.now()
42 logging.debug("Recommendation computation started at %s" % begin_time) 43 logging.debug("Recommendation computation started at %s" % begin_time)
@@ -20,6 +20,7 @@ @@ -20,6 +20,7 @@
20 import commands 20 import commands
21 import xapian 21 import xapian
22 import logging 22 import logging
  23 +import apt
23 24
24 class FilterTag(xapian.ExpandDecider): 25 class FilterTag(xapian.ExpandDecider):
25 def __call__(self, term): 26 def __call__(self, term):
@@ -30,15 +31,26 @@ class FilterTag(xapian.ExpandDecider): @@ -30,15 +31,26 @@ class FilterTag(xapian.ExpandDecider):
30 31
31 class User: 32 class User:
32 """ """ 33 """ """
33 - def __init__(self,item_score,user_id=0,demo_profile=0): 34 + def __init__(self,item_score,user_id=0,demographic_profile=0):
34 """ """ 35 """ """
35 self.id = user_id 36 self.id = user_id
36 self.item_score = item_score 37 self.item_score = item_score
37 - self.demo_profile = demo_profile 38 + self.demographic_profile = demographic_profile
38 39
39 def items(self): 40 def items(self):
40 return self.item_score.keys() 41 return self.item_score.keys()
41 42
  43 + def maximal_pkg_profile(self):
  44 + cache = apt.Cache()
  45 + old_profile_size = len(self.item_score)
  46 + for p in self.item_score.keys():
  47 + pkg = cache[p]
  48 + if pkg.is_auto_installed:
  49 + del self.item_score[p]
  50 + profile_size = len(self.item_score)
  51 + logging.info("Reduced packages profile size from %d to %d." %
  52 + (old_profile_size, profile_size))
  53 +
42 def axi_tag_profile(self,apt_xapian_index,profile_size): 54 def axi_tag_profile(self,apt_xapian_index,profile_size):
43 terms = [] 55 terms = []
44 for item in self.items(): 56 for item in self.items():
@@ -65,6 +77,7 @@ class LocalSystem(User): @@ -65,6 +77,7 @@ class LocalSystem(User):
65 def __init__(self): 77 def __init__(self):
66 item_score = {} 78 item_score = {}
67 dpkg_output = commands.getoutput('/usr/bin/dpkg --get-selections') 79 dpkg_output = commands.getoutput('/usr/bin/dpkg --get-selections')
68 - for p in dpkg_output.replace('install','\t').split():  
69 - item_score[p] = 1 80 + for line in dpkg_output.splitlines():
  81 + pkg = line.split('\t')[0]
  82 + item_score[pkg] = 1
70 User.__init__(self,item_score) 83 User.__init__(self,item_score)