2015-03-25 5 views
2

У меня есть бот, который будет реагировать на определенные триггерных словаSignalR bot проверяет только точные сообщения. Как насчет орфографических ошибок?

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

Как я могу Foolproof этой концепции с таким образом, чтобы позволить опечатки, как «Тригер» или «triggr» Так что все равно ударит эту точку останова и возврат HandleTrigger(message);

Больше код для контекста:

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

ответ

3

Вы также можете использовать код алгоритма Soundex для создания простого вывода, который можно классифицировать правильно.

Это в основном используется в базе данных SQL для поиска строк, которые аналогично написаны.

Console.WriteLine(Soundex.For("Trigger")); // Выведет 'T626' Console.WriteLine(Soundex.For("Triggr")); // выводит 'T626'

https://dotnetfiddle.net/6OhjLT

+0

Soundex по сравнению с Metaphone имеет недостатки. Интересный читать http://www.informit.com/articles/article.aspx?p=1848528 –

5

Ваш вопрос, кажется, не быть SignalR вопрос. Это больше похоже на сопоставление слов с ошибками. Существует алгоритм, называемый Double Metaphone, который можно использовать для сопоставления слов с ошибками. Он работает на принципах фонетического матча. Вы можете прочитать больше об алгоритме здесь http://en.wikipedia.org/wiki/Metaphone#Double_Metaphone

Вы можете найти реализацию C# по этой ссылке. https://code.google.com/p/doublemetaphone/

После того, как вы добавляете класс из выше ссылок на ваш проект, вы получаете метод расширения для переменных Струнных называемых GenerateDoubleMetaphone()

И тогда вы можете сравнить метафоны для проверки сходства. В вашем примере, вы можете написать, если условие, как этот

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

В примере выше метафонов для «запуска» и «trigr» оба «TRKR» и, следовательно, будет соответствовать.

+0

Спасибо, это прекрасно! Я только ссылался на факт, что я использую signalR, потому что бот находится под классом SignalR Hub. Я смотрел на использование Soundex, но алгоритм действительно не работает для опечаток без меня, немного меняя правила. – teachtyler

+0

@majache вы правы в матчах, возвращенных Soundex, по сравнению с Metaphones. Средний процент метафонов. Я добавил статью для справки. –

Смежные вопросы