--- 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}