使用函数计算C#中禁止的单词

时间:2016-12-27 07:06:40

标签: c#

所以我一直在努力尝试让这个剧本发挥作用,但这背后却是一种痛苦。基本上我想查看句子,看它是否包含禁止的单词。如果那个给定的句子包含超过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)第二批代码要运行以向他们发送通知。

2 个答案:

答案 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();
        }

Output of the above code