CodeProject 是一个技术社区,用户可以通过提交文章、评论和投票来参与社区互动。投票系统是CodeProject用来引导读者找到优质内容并为作者提供改进建议的重要机制。本文将详细解析CodeProject的投票系统、评分计算方式以及声誉系统的运作机制。
CodeProject的投票系统旨在帮助读者发现最佳文章,并为作者提供改进的方向。投票与评论绑定,如果投票者给出低分并留下无效评论(例如“asdf”),其他成员可以报告该评论为不恰当,随后该评论和相应的投票将被移除。
CodeProject上的文章、评论和其他项目都与一个投票总数(Vote Total,Vt)、权重总数(Weight Total,Wt)以及投票数(N)相关联。当成员进行投票时,系统会将他们的投票权重(取决于会员等级)加到Wt上,并将评分本身乘以他们的权重加到Vt上。然后,项目的评分(R)计算公式为 \(R = Vt / Wt\)。
如果每个人的权重都是1,那么 \(W_t = N\),\(R = Vt / N\)。但是,不同的权重意味着,当黄金会员(权重=4)和青铜会员(权重=1)投票时,投票结果会倾向于黄金会员。
let goldWeight = 4;
let bronzeWeight = 1;
let goldVote = 5;
let bronzeVote = 1;
let Wt = goldWeight + bronzeWeight;
let Vt = goldWeight * goldVote + bronzeWeight * bronzeVote;
let R = Vt / Wt;
console.log(`Weight Total (Wt): ${Wt}`);
console.log(`Vote Total (Vt): ${Vt}`);
console.log(`Rating (R): ${R}`);
假设黄金会员投票5分,青铜会员投票1分,计算过程如下:
$\begin{aligned} W_t & = 4 + 1 = 5 \\ V_t & = 4 \times 5 + 1 \times 1 = 21 \\ R & = 4.2 \end{aligned} $
如果有人在文章中投了反对票并留下了投票评论,可以标记该评论以供移除。如果足够多的人投票支持移除该评论,那么该评论和反对票将被移除。
如果一篇出色的文章获得了50个“5”分的投票,然后出现了一个“1”分的投票,认为“有些不对劲”。并非所有成员都会遵守规则,因此会过滤掉那些与加权原始分数偏离一定程度的无效或恶意投票。最终显示的分数是使用经过过滤的投票计算出的加权分数。
用于过滤投票的实际可接受偏差是从平均值计算得出的1.75倍标准差,必要时还会增加,以确保平均值两侧的投票值仍然可以被投票。
第二轮分析会启动,查看每个列的投票,以确定是否应该重新包含某个评分值。假设一篇文章有50个5分的投票和10个1分的投票。过滤掉“1”分的投票在这里没有意义,因为有一群成员一致地投1分。系统会查看每个列的投票类型,并重新包含每个至少有5个银牌(或更高级别)成员投票的列。
过滤仅在文章获得10个投票后启动。
请注意,投票过滤只影响分数。通过投票获得(和失去的)所有声誉点数仍然适用,无论投票是否被过滤。同时请记住,每次投票时,平均值和偏差都会被重新计算并会发生变化。如果一篇文章应该得到5分,但收到了一些错误的1分投票,最初的几个“正确”的5分投票可能会被过滤掉,但当足够多的5分投票发布,或者具有足够高声誉的成员发布了5分投票时,平均值和可接受的偏差将被调整,最初的无效1分投票将被过滤掉。
计算出的平均值和接受的偏差在评分直方图中以μ和σ显示。
声誉是在CodeProject社区中通过贡献知识库而获得或失去的。发布文章可以增加声誉,但如果发布的文章质量差,其他成员投了反对票,声誉就会减少。如果想提高声誉,那么写好文章,为其他好文章投票,希望其他人反过来为文章投票,并帮助组织和清理问题和答案。
虽然这个系统现在已经基本确定,但欢迎反馈,并可能不时调整分数。有关声誉等级的实时数据报告,请访问:
会员声誉系统
它由分配的权重控制。如果一个更高级别的会员投票支持一篇文章,那么文章作者获得的分数会比低级别会员投票时获得的分数更多。
声誉点数的获取与影响因素包括:
声誉系统的运作机制是复杂的,但目的是为了鼓励社区成员提供高质量的内容和积极的互动。
声誉点数的计算方式如下:
会员等级对声誉点数的计算有重要影响。高等级会员的投票对文章作者的声誉点数影响更大。
会员等级对声誉点数的影响如下: