web/tralalere/views.py
changeset 53 b4b226944789
parent 52 04da822a4b08
parent 50 a8cca505882d
child 56 af969d762e03
--- a/web/tralalere/views.py	Mon Jun 11 13:05:44 2012 +0200
+++ b/web/tralalere/views.py	Mon Jun 11 13:26:29 2012 +0200
@@ -1,7 +1,6 @@
 
 from django.shortcuts import render_to_response
 from django.template import RequestContext
-from django.utils.translation import ugettext as _
 from ldt.ldt_utils.models import Content, Segment
 import math
 import operator
@@ -9,7 +8,6 @@
 COLORS = ['red', 'yellow', 'green', 'blue']
 EMOTICONS = ['happy','unhappy','laughing','surprised']
 
-SCALES = [0.2,0.5,0.8,1]
 
 
 def home(request):
@@ -17,9 +15,11 @@
     contents = Content.objects.filter(front_project__state = 2)
     
     tags_stats = {}
-    
+    nb_segments = 0
     for segment in Segment.objects.filter(content__in = contents):
+        nb_segments += 1
         c_tags = tags_stats.setdefault(segment.iri_id,{})
+        
         for t in segment.tags.split(";"):
             t = t.strip().lower()
             if t:
@@ -28,27 +28,58 @@
                 c_tags['colors'] = c_tags.setdefault('colors',0) + 1
             if t in EMOTICONS:
                 c_tags['emoticons'] = c_tags.setdefault('emoticons',0) + 1
-    tags = {}            
+    tags = {}
+     
     for contentid, c_tags in tags_stats.iteritems():
         emoticons_stats = []
+        tag_max = 0.0
+        tag_sum = 0.0
+        
         for t in EMOTICONS:
             if t in c_tags:
-                score = float(c_tags[t])/float(c_tags['emoticons'])
-                cat = min(int(len(EMOTICONS)*score),3)                
-                scale = SCALES[cat]
-                width = int(50*scale)
-                emoticons_stats.append({'tag':t, 'score': score, 'cat':cat, 'scale': scale, 'width':width})
+                tag_sqrt = math.sqrt(c_tags[t])
+                tag_max = max(tag_max, tag_sqrt)
+                tag_sum += tag_sqrt
+        if tag_max:
+            tag_factor = 1.0 / tag_max
+            if tag_sum * tag_factor > 2.8:
+                tag_factor = tag_factor * 2.8 / ( tag_sum * tag_factor )
+                
+            for t in EMOTICONS:
+                if t in c_tags:
+                    score = c_tags[t]
+                    tag_sqrt = math.sqrt(score)
+                    scale = tag_sqrt * tag_factor
+                    width = int(50*scale)
+                    emoticons_stats.append({'tag':t, 'score': score, 'scale': scale, 'width':width})
+                    
         emoticons_stats.sort(key=operator.itemgetter('score','tag'), reverse=True)
 
         colors_stats = []
+        tag_max = 0.0
+        tag_sum = 0.0
+
         for t in COLORS:
             if t in c_tags:
-                score = float(c_tags[t])/float(c_tags['colors'])
-                cat = min(int(len(COLORS)*score),3)
-                scale = SCALES[cat]
-                width = int(50*scale)
-                colors_stats.append({'tag':t, 'score': score, 'cat':cat, 'scale': scale, 'width':width})        
+                tag_sqrt = math.sqrt(c_tags[t])
+                tag_max = max(tag_max, tag_sqrt)
+                tag_sum += tag_sqrt
+        if tag_max:
+            tag_factor = 1.0 / tag_max
+            if tag_sum * tag_factor > 2.8:
+                tag_factor = tag_factor * 2.8 / ( tag_sum * tag_factor )
+                
+            for t in COLORS:
+                if t in c_tags:
+                    score = c_tags[t]
+                    tag_sqrt = math.sqrt(score)
+                    scale = tag_sqrt * tag_factor
+                    width = int(50*scale)
+                    colors_stats.append({'tag':t, 'score': score, 'scale': scale, 'width':width})
+                    
         colors_stats.sort(key=operator.itemgetter('score','tag'), reverse=True)
+
+
         
         tags[contentid] = {'emoticons': emoticons_stats, 'colors': colors_stats}