Commit b0897954155f7c76dd2907b522ad754f12d546d4
1 parent
5e2dde0a
Exists in
master
and in
1 other branch
Added request details to apprec result.
Showing
3 changed files
with
76 additions
and
20 deletions
Show diff stats
src/examples/app_recommender.py
@@ -41,6 +41,7 @@ if __name__ == '__main__': | @@ -41,6 +41,7 @@ if __name__ == '__main__': | ||
41 | rec = Recommender(cfg) | 41 | rec = Recommender(cfg) |
42 | user = LocalSystem() | 42 | user = LocalSystem() |
43 | user.no_auto_pkg_profile() | 43 | user.no_auto_pkg_profile() |
44 | + #user.maximal_pkg_profile() | ||
44 | 45 | ||
45 | begin_time = datetime.datetime.now() | 46 | begin_time = datetime.datetime.now() |
46 | logging.debug("Recommendation computation started at %s" % begin_time) | 47 | logging.debug("Recommendation computation started at %s" % begin_time) |
src/web/server.py
@@ -110,51 +110,107 @@ class Request: | @@ -110,51 +110,107 @@ class Request: | ||
110 | 110 | ||
111 | self.selected_strategies = [] | 111 | self.selected_strategies = [] |
112 | if web_input.has_key('strategy'): | 112 | if web_input.has_key('strategy'): |
113 | - if web_input['strategy'].encode('utf8') == "content": | 113 | + if (web_input['strategy'].encode('utf8') == "content" or |
114 | + web_input['strategy'].encode('utf8') == "hybrid"): | ||
114 | if (web_input.has_key('tag') and web_input.has_key('desc')): | 115 | if (web_input.has_key('tag') and web_input.has_key('desc')): |
115 | self.selected_strategies.append("cb") | 116 | self.selected_strategies.append("cb") |
116 | elif web_input.has_key('desc'): | 117 | elif web_input.has_key('desc'): |
117 | self.selected_strategies.append("cbd") | 118 | self.selected_strategies.append("cbd") |
118 | else: | 119 | else: |
119 | self.selected_strategies.append("cbt") | 120 | self.selected_strategies.append("cbt") |
120 | - if web_input['strategy'].encode('utf8') == "collab": | 121 | + if (web_input['strategy'].encode('utf8') == "collab" or |
122 | + web_input['strategy'].encode('utf8') == "hybrid"): | ||
121 | self.selected_strategies.append("col") | 123 | self.selected_strategies.append("col") |
122 | - if web_input['strategy'].encode('utf8') == "hybrid": | ||
123 | - self.selected_strategies.append("hybrid") | ||
124 | 124 | ||
125 | if web_input.has_key('cluster'): | 125 | if web_input.has_key('cluster'): |
126 | - self.cluster = bool(web_input.has_key['cluster'].encode('utf8')) | 126 | + self.cluster = web_input['cluster'].encode('utf8') |
127 | 127 | ||
128 | if web_input.has_key('neighbours'): | 128 | if web_input.has_key('neighbours'): |
129 | self.neighbours = int(web_input['neighbours']) | 129 | self.neighbours = int(web_input['neighbours']) |
130 | 130 | ||
131 | self.profiles_set = set() | 131 | self.profiles_set = set() |
132 | if web_input.has_key('profile_desktop'): | 132 | if web_input.has_key('profile_desktop'): |
133 | - self.profiles = self.profiles.add("desktop") | 133 | + self.profiles_set.add("desktop") |
134 | if web_input.has_key('profile_admin'): | 134 | if web_input.has_key('profile_admin'): |
135 | - self.profiles = self.profiles.add("admin") | 135 | + self.profiles_set.add("admin") |
136 | if web_input.has_key('profile_devel'): | 136 | if web_input.has_key('profile_devel'): |
137 | - self.profiles = self.profiles.add("devel") | 137 | + self.profiles_set.add("devel") |
138 | if web_input.has_key('profile_science'): | 138 | if web_input.has_key('profile_science'): |
139 | - self.profiles = self.profiles.add("science") | 139 | + self.profiles_set.add("science") |
140 | if web_input.has_key('profile_arts'): | 140 | if web_input.has_key('profile_arts'): |
141 | - self.profiles = self.profiles.add("arts") | 141 | + self.profiles_set.add("arts") |
142 | 142 | ||
143 | def __str__(self): | 143 | def __str__(self): |
144 | return self.storage | 144 | return self.storage |
145 | 145 | ||
146 | def validates(self): | 146 | def validates(self): |
147 | self.errors = [] | 147 | self.errors = [] |
148 | - if (not self.pkgs_list or not self.selected_strategies): | 148 | + if not self.pkgs_list: |
149 | self.errors.append("No upload file or packages list was provided.") | 149 | self.errors.append("No upload file or packages list was provided.") |
150 | - return False | ||
151 | if not self.selected_strategies: | 150 | if not self.selected_strategies: |
152 | self.errors.append("No strategy was selected.") | 151 | self.errors.append("No strategy was selected.") |
152 | + if self.errors: | ||
153 | return False | 153 | return False |
154 | return True | 154 | return True |
155 | 155 | ||
156 | - def get_strategy_details(self): | ||
157 | - return self.selected_strategies[0] | 156 | + def get_details(self): |
157 | + details = {} | ||
158 | + details['User id'] = self.user_id | ||
159 | + if len(self.pkgs_list)>10: | ||
160 | + details['Packages list'] = (" ".join(self.pkgs_list[:5]) | ||
161 | + +" ... ("+str(len(self.pkgs_list)-10) | ||
162 | + +" more)") | ||
163 | + else: | ||
164 | + details['Packages list'] = " ".join(self.pkgs_list) | ||
165 | + | ||
166 | + if self.storage.has_key('pkgs_list') and self.storage['pkgs_file']: | ||
167 | + details['User profile'] = "from upload file and packages list" | ||
168 | + elif self.storage.has_key('pkgs_list'): | ||
169 | + details['User profile'] = "from packages list" | ||
170 | + else: | ||
171 | + details['User profile'] = "from upload file" | ||
172 | + | ||
173 | + if self.storage.has_key('limit'): | ||
174 | + details['Recommendation size'] = self.limit | ||
175 | + if self.storage.has_key('profile_size'): | ||
176 | + details['Profile size'] = self.profile_size | ||
177 | + if self.storage.has_key('weight'): | ||
178 | + if self.weight == "trad": | ||
179 | + details['weight'] = "traditional" | ||
180 | + else: | ||
181 | + details['weight'] = "BM25" | ||
182 | + | ||
183 | + if self.profiles_set: | ||
184 | + details['Personal profile'] = " ".join(list(self.profiles_set)) | ||
185 | + | ||
186 | + if len(self.selected_strategies) > 1: details['strategy'] = "Hybrid" | ||
187 | + for strategy in self.selected_strategies: | ||
188 | + if strategy == "col": | ||
189 | + if not details.has_key('strategy'): | ||
190 | + details['Strategy'] = "Collaborative" | ||
191 | + if self.storage.has_key('cluster'): | ||
192 | + details['Cluster'] = self.cluster | ||
193 | + if self.storage.has_key('neighbours'): | ||
194 | + details['Neighbours'] = self.neighbours | ||
195 | + if not details.has_key('strategy'): | ||
196 | + details['Strategy'] = "Collaborative" | ||
197 | + else: | ||
198 | + if not details.has_key('strategy'): | ||
199 | + details['Strategy'] = "Content-based" | ||
200 | + if "cb" in self.selected_strategies: | ||
201 | + details['Content representation'] = "tags and descriptions" | ||
202 | + elif "cbt" in self.selected_strategies: | ||
203 | + details['Content representation'] = "packages tags" | ||
204 | + elif "cbd" in self.selected_strategies: | ||
205 | + details['Content representation'] = "packages descriptions" | ||
206 | + | ||
207 | + print details | ||
208 | + return details | ||
209 | + | ||
210 | +class RandomRequest(Request): | ||
211 | + def __init__(self): | ||
212 | + pass | ||
213 | + #self.storage = web.Storage() | ||
158 | 214 | ||
159 | class AppRecommender: | 215 | class AppRecommender: |
160 | def POST(self): | 216 | def POST(self): |
src/web/templates/apprec.html
@@ -11,12 +11,11 @@ $$(document).ready(function() { | @@ -11,12 +11,11 @@ $$(document).ready(function() { | ||
11 | </script> | 11 | </script> |
12 | 12 | ||
13 | <div class="graybox"> | 13 | <div class="graybox"> |
14 | - <h1>Details of recommendation strategy</h1> | ||
15 | - $request.get_strategy_details() | ||
16 | -<!--<ul class="toc"> | ||
17 | -$for strategy, result in recommends.items(): | ||
18 | - <li><a href="#$strategy">$strategy</a></li> | ||
19 | -</ul>--> | 14 | + <h1>Recommendation strategy details</h1> |
15 | + $for key, value in request.get_details().items(): | ||
16 | + <ul class="toc"> | ||
17 | + <li><b>$key:</b> $value</li> | ||
18 | + </ul> | ||
20 | </div> | 19 | </div> |
21 | 20 | ||
22 | <form action="/thanks" method="post" enctype="multipart/form-data"> | 21 | <form action="/thanks" method="post" enctype="multipart/form-data"> |