def top_tags(model_or_obj, num=10): """return top tags based on uses cloud filer is quite similar to top_tags except logarithmic scaling. However, it has been left as it is for future use! """ tag_uses = get_tag_uses() if not(tag_uses): return [] tag_uses.sort(reverse=True) if num != 0: tag_uses = tag_uses[:num] out = [] Item = namedtuple('Item', 'slug tag score') for score, pk in tag_uses: tag = Tag.objects.get(id=pk) out.append(Item(tag.slug, tag, int(score))) return out
def cloud(model_or_obj, num=5): """ Get a tag cloud """ tag_uses = get_tag_uses() if not(tag_uses): return [] tag_uses.sort(reverse=True) if num != 0: tag_uses = tag_uses[:num] max_uses = max(tag_uses[0][0], 5) min_uses = tag_uses[-1][0] # Use a logarithmic scaling between 1.0 to 170% of baseline font size # We could consider a logarithmic scale min_font, max_font = 3, 6 slope = (max_font-min_font)/(max_uses - min_uses + 0.0) intercept = min_font - slope * min_uses out = [] Item = namedtuple('Item', 'slug tag score') for score, pk in tag_uses: tag = Tag.objects.get(id=pk) out.append(Item(tag.slug, tag, int(log(slope*score + intercept)*100)-9)) out.sort() return out