所以我一直在努力尝试让这个剧本发挥作用,但这背后却是一种痛苦。基本上我想查看句子,看它是否包含禁止的单词。如果那个给定的句子包含超过3个单词(等于或更多),那么我希望它告诉我所以我可以发送警报。
到目前为止我所拥有的:
public bool CheckSentence(string Message)
{
var count = 0;
foreach (WordFilter Filter in this._filteredWords.ToList())
{
if (Message.Contains(Filter.Word) && Filter.IsSentence)
{
count++;
}
}
return count >= 3;
}
然后我试图抓住它,如果句子确实包含3个以上,它会提醒该人:
if (PlusEnvironment.GetGame().GetChatManager().GetFilter().CheckSentence(Message.ToLower()))
{
Session.SendNotification("Something you've said has made our ears tingle! ");
}
但是我觉得我在某个地方出错了,就像它实际上没有阅读句子并计算被禁词被使用了多少次一样。
字符串为Message
,禁止字词列表为Filter.Word
,因为我不想要包含所有字词(因为我的过滤器会将其他字词替换为***)在句子过滤器中,我还在表Filter.IsSentence
(1或0)中添加了一列。这将检查该单词是否在过滤器中,以及它是否也包含在" IsSentence"过滤。
从我上面的脚本中,我觉得它实际上没有计算字符串中有多少被禁词?我们说我的字符串是:
Join this website today, free credits and much more! www.site.com
在数据库中,我将添加以下单词:
join, website, free, credits, .com, www.
在这些字词中,只有join, website, free and credits
将被检查,如果它们包含在句子中。由于一个句子中有4个被禁止的单词(并且它们也是IsSentence
)第二批代码要运行以向他们发送通知。
答案 0 :(得分:1)
所以你有一个单词列表,这些单词被分组为攻击性/恶意单词。并且您需要在给定的输入句子中计算这些单词,截至目前,您使用.Contains()
实际上这对计算出现次数没有效率。我想将句子分成单词并每次计算匹配的单词。根据您的要求修改的方法签名将如下所示:
public bool CheckSentence(string messageText)
{
var count = 0;
string[] wordsInMessage = messageText.Split(new char[]{' ',','}, StringSplitOptions.RemoveEmptyEntries);
foreach (WordFilter Filter in this._filteredWords.ToList())
{
count += wordsInMessage.Count(x=> x == Filter.Word);
}
return count >= 3;
}
答案 1 :(得分:0)
这是我的实现,根据你的例子,它给我正确的输出,你可以检查输出的SS。
static void Main(string[] args)
{
List<string> list = new List<string>();
list.Add("join");
list.Add("website");
list.Add("free");
list.Add("credit");
list.Add("www.");
list.Add(".com");
var count = 0;
string Message = "Join this website today, free credits and much more! www.site.com";
foreach (var Filter in list)
{
if (Message.ToLower().Contains(Filter))
{
Console.WriteLine(Filter);
count++;
}
}
if (count>=3)
{
Console.WriteLine("\n\n\nTRUE");
}
else
{
Console.WriteLine("\n\n\nFALSE");
}
Console.ReadLine();
}