SignalR bot仅检查确切的大小写消息。包含。拼写错误怎么样?

时间:2015-03-25 20:34:34

标签: c# bots

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

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

我怎样才能通过一种允许像'triger'或者' triggr'这样它仍然会触及此断点并返回HandleTrigger(message);

更多上下文代码:

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

2 个答案:

答案 0 :(得分:5)

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

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

将上述链接中的类添加到项目后,您将获得一个名为GenerateDoubleMetaphone()的String变量的扩展方法

然后你可以比较手机以检查相似性。在您的示例中,您可以像这样编写if条件

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

在上面的示例中,“触发器”和“触发器”的元电话都是“TRKR”,因此会匹配。

答案 1 :(得分:3)

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

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

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

https://dotnetfiddle.net/6OhjLT