Commit dfcac4b1e7d3900e660ad42287b81316a0c1131e

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

Small fixes.

@@ -123,13 +123,12 @@ class PopconXapianIndex(xapian.WritableDatabase): @@ -123,13 +123,12 @@ class PopconXapianIndex(xapian.WritableDatabase):
123 """ 123 """
124 Data source for popcon submissions defined as a singleton xapian database. 124 Data source for popcon submissions defined as a singleton xapian database.
125 """ 125 """
126 - def __init__(self,cfg,reindex=0,recluster=0): 126 + def __init__(self,cfg):
127 """ 127 """
128 Set initial attributes. 128 Set initial attributes.
129 """ 129 """
130 self.axi = xapian.Database(cfg.axi) 130 self.axi = xapian.Database(cfg.axi)
131 self.path = os.path.expanduser(cfg.popcon_index) 131 self.path = os.path.expanduser(cfg.popcon_index)
132 - self.source_dir = cfg.popcon_dir  
133 if cfg.index_mode.startswith("1") or not self.load_index(): 132 if cfg.index_mode.startswith("1") or not self.load_index():
134 if not os.path.exists(cfg.popcon_dir): 133 if not os.path.exists(cfg.popcon_dir):
135 os.makedirs(cfg.popcon_dir) 134 os.makedirs(cfg.popcon_dir)
@@ -279,11 +278,11 @@ class KMedoidsClustering(cluster.KMeansClustering): @@ -279,11 +278,11 @@ class KMedoidsClustering(cluster.KMeansClustering):
279 medoidDistance = sys.maxint 278 medoidDistance = sys.maxint
280 for i in range(len(cluster)): 279 for i in range(len(cluster)):
281 totalDistance = sum(self.distanceMatrix[cluster[i].user_id].values()) 280 totalDistance = sum(self.distanceMatrix[cluster[i].user_id].values())
282 - print "totalDistance[",i,"]=",totalDistance 281 + logging.debug("totalDistance[%d]=%f" % (i,totalDistance))
283 if totalDistance < medoidDistance: 282 if totalDistance < medoidDistance:
284 medoidDistance = totalDistance 283 medoidDistance = totalDistance
285 medoid = i 284 medoid = i
286 - print "medoidDistance:",medoidDistance 285 + logging.debug("medoidDistance: %f" % medoidDistance)
287 logging.debug("Cluster medoid: [%d] %s" % (medoid, 286 logging.debug("Cluster medoid: [%d] %s" % (medoid,
288 cluster[medoid].user_id)) 287 cluster[medoid].user_id))
289 return cluster[medoid] 288 return cluster[medoid]
src/recommender.py
@@ -63,8 +63,8 @@ class Recommender: @@ -63,8 +63,8 @@ class Recommender:
63 Set initial parameters. 63 Set initial parameters.
64 """ 64 """
65 self.items_repository = xapian.Database(cfg.axi) 65 self.items_repository = xapian.Database(cfg.axi)
66 - self.users_repository = data.PopconXapianIndex(cfg) #[FIXME] only cfg fields  
67 - self.clustered_users_repository = data.PopconXapianIndex(cfg) #[FIXME] 66 + self.users_repository = data.PopconXapianIndex(cfg)
  67 + #self.clustered_users_repository = data.PopconXapianIndex(cfg)
68 self.set_strategy(cfg.strategy) 68 self.set_strategy(cfg.strategy)
69 if cfg.weight == "bm25": 69 if cfg.weight == "bm25":
70 self.weight = xapian.BM25Weight() 70 self.weight = xapian.BM25Weight()
src/tests/user_tests.py
@@ -125,12 +125,12 @@ class UserTests(unittest2.TestCase): @@ -125,12 +125,12 @@ class UserTests(unittest2.TestCase):
125 self.user.full_profile(self.sample_axi,10)) 125 self.user.full_profile(self.sample_axi,10))
126 126
127 def test_tag_profile(self): 127 def test_tag_profile(self):
128 - self.assertEqual(self.user.tag_profile(self.sample_axi,2),  
129 - ['XTuse::editing', 'XTworks-with-format::jpg']) 128 + self.assertEqual(self.user.tag_profile(self.sample_axi,1),
  129 + ['XTuse::editing'])
130 130
131 def test_desc_profile(self): 131 def test_desc_profile(self):
132 - self.assertEqual(self.user.desc_profile(self.sample_axi,2),  
133 - ['image', 'the']) 132 + self.assertEqual(self.user.desc_profile(self.sample_axi,1),
  133 + ['image'])
134 134
135 def test_full_profile(self): 135 def test_full_profile(self):
136 self.assertEqual(self.user.full_profile(self.sample_axi,10), 136 self.assertEqual(self.user.full_profile(self.sample_axi,10),
src/web/server.py
@@ -215,6 +215,9 @@ class RandomRequest(Request): @@ -215,6 +215,9 @@ class RandomRequest(Request):
215 #self.storage = web.Storage() 215 #self.storage = web.Storage()
216 216
217 class AppRecommender: 217 class AppRecommender:
  218 + def __init__(self):
  219 + self.rec = Recommender(Config())
  220 +
218 def POST(self): 221 def POST(self):
219 request = Request(web.input(pkgs_file={})) 222 request = Request(web.input(pkgs_file={}))
220 if not request.validates(): 223 if not request.validates():
@@ -233,6 +236,17 @@ class AppRecommender: @@ -233,6 +236,17 @@ class AppRecommender:
233 return render.apprec(recommendation, pkg_summaries, 236 return render.apprec(recommendation, pkg_summaries,
234 FeedbackForm(request.selected_strategies),request) 237 FeedbackForm(request.selected_strategies),request)
235 238
  239 + def _recommends(self,request):
  240 + user = User(dict.fromkeys(request.pkgs_list,1),request.user_id)
  241 + user.maximal_pkg_profile()
  242 + results = dict()
  243 + for strategy_str in request.selected_strategies:
  244 + self.rec.set_strategy(strategy_str)
  245 + prediction = self.rec.get_recommendation(user).get_prediction(request.limit)
  246 + results[strategy_str] = \
  247 + [result[0] for result in prediction]
  248 + return results
  249 +
236 # parsing json from screenshots - can be usefull in the future... 250 # parsing json from screenshots - can be usefull in the future...
237 # def _packages_attrs(self, recommends): #recommends is result of _recommends() 251 # def _packages_attrs(self, recommends): #recommends is result of _recommends()
238 # all_recommended_packages = [] 252 # all_recommended_packages = []
@@ -247,19 +261,6 @@ class AppRecommender: @@ -247,19 +261,6 @@ class AppRecommender:
247 # recommended_pkgs_attrs[pkg_attrs_dict['name']] = pkg_attrs_dict 261 # recommended_pkgs_attrs[pkg_attrs_dict['name']] = pkg_attrs_dict
248 # return recommended_pkgs_attrs 262 # return recommended_pkgs_attrs
249 263
250 - def _recommends(self,request):  
251 - user = User(dict.fromkeys(request.pkgs_list,1),request.user_id)  
252 - user.maximal_pkg_profile()  
253 - cfg = Config()  
254 - rec = Recommender(cfg)  
255 - results = dict()  
256 - for strategy_str in request.selected_strategies:  
257 - rec.set_strategy(strategy_str)  
258 - prediction = rec.get_recommendation(user).get_prediction(request.limit)  
259 - results[strategy_str] = \  
260 - [result[0] for result in prediction]  
261 - return results  
262 -  
263 def add_global_hook(): 264 def add_global_hook():
264 g = web.storage({"counter": "1"}) 265 g = web.storage({"counter": "1"})
265 def _wrapper(handler): 266 def _wrapper(handler):