现在,我正在尝试创建一个算法,为用户提供分数,具体取决于他在文本字段中的输入。
这个分数应该鼓励用户在他的个人资料中添加更多文字。
算法应该起作用的方式是,它应该对第一个单词赋予一定的权重,对第二个单词赋予一点权重。第三个单词的重量会比第二个单词少一些,依此类推。
目标是鼓励用户扩展他们的文本,但也要避免一般的垃圾邮件。例如,第500个单词的附加值应该不多。 100个单词的文本和500个单词的文本之间的差异应该是实质性的。
到目前为止,我有任何意义吗?
现在,我不知道从哪个问题开始。我尝试过多次Google查询,但似乎没有找到任何类型的查询。谁能指出我正确的方向? 我想这样的算法必须已经存在于某个地方(或者至少可能存在一般的想法),但我似乎无法在这个主题上找到一些帮助。
有人能指出我正确的方向吗? 我非常感谢你能给我的任何帮助。
非常感谢。
答案 0 :(得分:1)
// word count in user description
double word_count = ...;
// word limit over which words do not improve score
double word_limit = ...;
// use it to change score progression curve
// if factor = 1, progression is linear
// if factor < 1, progression is steeper at the beginning
// if factor > 1, progression is steeper at the end
double factor = ...;
double score = pow(min(word_count, word_limit) / word_limit, factor);
答案 1 :(得分:1)
这取决于您想要/需要它的复杂程度,以及您是否希望不断减少应用于特定单词的权重。
最简单的可能是对第一个单词应用相对较高的权重(比如1000),然后每个后续单词的权重比前一个单词的权重小一个;所以第二个单词的权重为999,第三个单词的权重为998,等等。这有一个“缺点”,即权重总和不超过1000个单词标记 - 你必须决定你自己是否对你的特殊情况有害。但是,这可能无法完成你需要做的事情。
如果你不想线性缩小,它可能是简单的,例如第一个单词的权重为X,第二个单词的权重等于X的Y%,第三个单词的权重等于Y的Y%的Y%等。第一个和第二个单词之间的差异将大于第二个和第三个单词之间的差异,当你达到第500个单词时,差异将会很大小。它也不难实现,因为它不是一个复杂的公式。
或者,如果你真的需要,你可以使用更复杂的数学函数来计算重量 - 尝试使用谷歌搜索'指数衰减',看看这对你有用。
答案 2 :(得分:1)
实现自定义评分功能并不是很困难。这是伪代码中的一个:
function GetScore( word_count )
// no points for the lazy user
if word_count == 0
return 0
// 20 points for the first word and then up to 90 points linearly:
else if word_count >= 1 and word_count <= 100
return 20 + 70 * (word_count - 1) / (100)
// 90 points for the first 100 words and then up to 100 points linearly:
else if word_count >= 101 and word_count <= 1000
return 90 + 10 * (word_count - 100) / (900)
// 100 points is the maximum for 1000 words or more:
else
return 100
end function
答案 3 :(得分:0)
我会选择类似result = 2*sqrt(words_count)
的东西,无论如何你可以使用任何衍生小于1的函数,例如log