Heres an example in javascript. Not that I'm not suggesting running this client side... 
Also there is alot of optimization that can be done.
Note: createMemberInNormalDistribution() is implemented here http://stackoverflow.com/questions/75677/converting-a-uniform-distribution-to-a-normal-distribution#196941
/*
 * an example set of taglines
 * hits are sales
 * views are times its been shown
 */
var taglines = [
    {"tag":"tagline 1","hits":1,"views":234},
    {"tag":"tagline 2","hits":5,"views":566},
    {"tag":"tagline 3","hits":3,"views":421},
    {"tag":"tagline 4","hits":1,"views":120}, 
    {"tag":"tagline 5","hits":7,"views":200}
];
/*set up our stat model for the tags*/
var TagModel = function(set){ 
    var  hits, views, sumOfDiff, sumOfSqDiff; 
    hits = views = sumOfDiff = sumOfSqDiff = 0;
    /*find average*/
    for (n in set){
     hits += set[n].hits;
     views += set[n].views; 
    }
    this.avg = hits/views;
    /*find standard deviation and variance*/
    for (n in set){
     var diff =((set[n].hits/set[n].views)-this.avg);
     sumOfDiff += diff;
     sumOfSqDiff += diff*diff; 
    }
    this.variance = sumOfDiff;
    this.std_dev = Math.sqrt(sumOfSqDiff/set.length);
    /*return tag to use fChooser determines likelyhood of tag*/
    this.getTag = function(fChooser){
     var m = this;
     set.sort(function(a,b){
       return fChooser((a.hits/a.views),(b.hits/b.views), m);
      });
     return set[0];
    };
};
var config = {
    "uniformDistribution":function(a,b,model){
     return Math.random()*b-Math.random()*a;
    },
    "normalDistribution":function(a,b,model){
     var a1 = createMemberInNormalDistribution(model.avg,model.std_dev)* a;
     var b1 = createMemberInNormalDistribution(model.avg,model.std_dev)* b;
     return b1-a1;
    },
    //say weight = 10^n... higher n is the more even the distribution will be.
    "weight": .5,
    "weightedDistribution":function(a,b,model){
     var a1 = createMemberInNormalDistribution(model.avg,model.std_dev*config.weight)* a;
     var b1 = createMemberInNormalDistribution(model.avg,model.std_dev*config.weight)* b;
     return b1-a1;
    }
}
var model = new TagModel(taglines);
//to use
model.getTag(config.uniformDistribution).tag;
//running 10000 times: ({'tagline 4':836, 'tagline 5':7608, 'tagline 1':100, 'tagline 2':924, 'tagline 3':532})
model.getTag(config.normalDistribution).tag;
//running 10000 times: ({'tagline 4':1775, 'tagline 5':3471, 'tagline 1':1273, 'tagline 2':1857, 'tagline 3':1624})
model.getTag(config.weightedDistribution).tag;
//running 10000 times: ({'tagline 4':1514, 'tagline 5':5045, 'tagline 1':577, 'tagline 2':1627, 'tagline 3':1237})
config.weight = 2;
model.getTag(config.weightedDistribution).tag;
//running 10000 times: {'tagline 4':1941, 'tagline 5':2715, 'tagline 1':1559, 'tagline 2':1957, 'tagline 3':1828})