2016-01-25 2 views
0

Я пытаюсь найти строку, введенную пользователем, в список известных терминов для определения темы. То есть, я сохраняю свой собственный список тем и связанных с ними ключевых слов и хочу сопоставляться с введенной пользователем строкой, чтобы определить те темы, к которым она относится. Тем не менее, я хочу, чтобы несколько терминов были «удалены», чтобы избежать ложных срабатываний.сопоставление нескольких терминов в строке для определения темы

например. на основе коды:

//create a list of topic keywords 
    List<string> CivilWar = new List<string>() 
    { 
     "Confederacy", "Union", "Civil War", "Lincoln", "Stonewall Jackson" 

    }; 

    //does the user agent string exist in the list? 
    bool isTopic = CivilWar.Exists(x => source.Contains(x)); 
return isTopic 

строка «обструкция Джексон боролся за Конфедерацию» возвращает правильный положительный/истинный результат, но строка «Джон Кеннеди Тул написал Конфедерацию Остолопов» возвращает ложный положительный/истинный результат ,

Как я могу убедиться, что для получения положительного результата требуются несколько терминов?

+0

Скорее всего, вы ищете StartsWith –

+0

Нет, я определенно не так, поскольку ключевые слова могут появляться в любом месте строки. – Dave

ответ

4
bool isTopic = CivilWar.Where(x => source.Contains(x)).Count() > 1; 
+0

спасибо, что делает эту работу. – Dave

1

Использование Count вместо Exists, и убедитесь, что он больше 1 (мульти терм):

//create a list of topic keywords 
List<string> CivilWar = new List<string>() 
{ 
    "Confederacy", "Union", "Civil War", "Lincoln", "Stonewall Jackson" 
}; 

//does the user agent string exist in the list? 
return CivilWar.Count(x => source.Contains(x)) > 1; //must be greater than 1 
Смежные вопросы