110,538
社区成员
发帖
与我相关
我的任务
分享
//假定重复次数超过 字符串长度/3 就算恶意重复,如果长度小于24,取值3。
var minDuplicateRefer = length >= 24 ? length >> 3 : 3;
//假定重复次数超过 字符串长度/8 就算恶意重复
var minDuplicateRefer = length >> 3;
static void Main(string[] args)
{
var samples = new string[]{
"贵阳,一个夏天度假的好地方。那地方我确实去过,山好水好空气好,确实值得大家去玩一玩",
"你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷",
"sssssssssssssssssssssssssssssssssssss",
"................放屁放屁....……………操操操操…....................."
};
foreach(var item in samples)
{
var rate = GetDuplicatedRate(item);
Console.Write("样本:");
Console.WriteLine(item);
Console.WriteLine("duplicatedRate = {0:00.00%}", rate);
Console.WriteLine();
}
}
static float GetDuplicatedRate(string input)
{
var length = input.Length;
//假定重复次数超过 字符串长度/3 就算恶意重复
var minDuplicateRefer = length >> 3;
var duplicated = input.GroupBy(ch => ch)
.Select(g => new
{
Char = g.Key,
Count = g.Count()
})
.Where(ch => ch.Count > minDuplicateRefer)
.Sum(ch => ch.Count);
var duplicatedRate = (float)duplicated / length;
return duplicatedRate;
}
计算结果:
样本:贵阳,一个夏天度假的好地方。那地方我确实去过,山好水好空气好,确实值得大家去玩一玩
duplicatedRate = 00.00%
样本:你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷
duplicatedRate = 100.00%
样本:sssssssssssssssssssssssssssssssssssss
duplicatedRate = 100.00%
样本:................放屁放屁....……………操操操操….....................
duplicatedRate = 74.55%
var str = "xxxxx";
Hashtable ht =new Hashtable();
foreach(char c in str){
if (ht[c]==null)ht[c]=0;
((int)ht[c])++;
}
if (str.length / ht.Count > 10) //10是一个阀值,可以设定
error("您在灌水");