Совпадение по ключевому слову - варианты? - PullRequest
0 голосов
/ 14 июня 2011

У меня есть случай, когда у меня есть массив ключевых слов.Я хочу найти их совпадения в заданной строке и вернуть x количество слов до и после каждого.

Я мог бы написать механизм зацикливания, который просматривал бы массив каждого из них, возвращая данный индекс и выполняя конкатенацию-строки, основанные на этих циклах, но это кажется немного длинным.

Я слышал о Lucene, но не уверен, стоит ли реализовывать всю инфраструктуру для этого.Кроме того, если возможно, как я могу достичь с Lucene?

Спасибо.

1 Ответ

2 голосов
/ 14 июня 2011

Возможно, регулярные выражения могут помочь ... Это создает список подходящих строк (до 3 слов до) ключевого слова (до 3 слов после)

Редактировать: я пропустил пару 0s и некоторые @s,Попробуйте еще раз.

private static void GetMatches (string s)
{
   string[] keywords = {"if", "while", "do"};
   int x = 3; // words before and after
   string ex =
      @"(\w+\W+){0," + x + @"}\b(" + string.Join("|", keywords) + @")\b\W+(\w+\W+){0," + x + @"}";
   Regex regex = new Regex(ex);
   List<string> matches = new List<string>();
   foreach (Match match in regex.Matches (s))
   {
      matches.Add(match.Value);
   }
}
...