SignalR bot 仅检查确切的大小写 message.Contains。拼写错误怎么办?

SignalR bot only checks for exact case message.Contains. What about misspellings?

我有一个机器人可以响应某些触发词

 if (message.Contains("trigger"))
            {
                HandleTrigger(message);
                return ;
            }

我怎样才能通过一种允许 'triger' 或 'triggr' 等拼写错误的方法来防止这个概念的万无一失,这样它仍然会遇到这个断点并且 return HandleTrigger(message);

上下文的更多代码:

void HandleTrigger(string message)
        {
            if (message.Contains("trigger2"))
            {
                ReplyMessage(viewTriggerMessage);
                ReplyMessage(repeatMessage);
                return;
            }
            if (message.Contains("trigger3"))
            {
                ReplyMessage(anotherMyTriggerMessage);
                return;
            }

您的问题似乎不是 SignalR 问题。它更多的是关于匹配拼写错误的单词。有一种称为 Double Metaphone 的算法可用于匹配拼写错误的单词。它的工作原理是语音匹配。您可以在此处阅读有关该算法的更多信息 http://en.wikipedia.org/wiki/Metaphone#Double_Metaphone

您可以在此 link 上找到 C# 实现。 https://code.google.com/p/doublemetaphone/

将上述 link 中的 class 添加到您的项目后,您将获得一个名为 GenerateDoubleMetaphone()

的字符串变量扩展方法

然后您可以比较变音位以检查相似性。在你的例子中,你可以这样写你的 if 条件

if ("trigger".GenerateDoubleMetaphone().Equals(message.GenerateDoubleMetaphone()))
{
//Execute code for a match
}

在上面的示例中,"trigger" 和 "trigr" 的变音位都是 "TRKR",因此将匹配。

您也可以使用Soundex算法代码来生成可以正确分类的简单输出。

这主要用于 SQL 数据库中,用于查找拼写相似的字符串。

Console.WriteLine(Soundex.For("Trigger")); //输出'T626' Console.WriteLine(Soundex.For("Triggr")); //输出'T626'

https://dotnetfiddle.net/6OhjLT