Commit dfcac4b1e7d3900e660ad42287b81316a0c1131e
1 parent
b07dbf63
Exists in
master
and in
1 other branch
Small fixes.
Showing
4 changed files
with
23 additions
and
23 deletions
Show diff stats
src/data.py
| @@ -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): |