RegEx поможет удалить шумовые слова или стоп-слова из строки - PullRequest
3 голосов
/ 25 июля 2011

Я хочу удалить все шумовые теги из входных тегов (строки). Теги разделяются запятой.Если шумовое слово является частью большого тега, оно останется.

Это то, что у меня есть, но я не работаю:

string input_string = "This,sure,about,all of our, all, values";
string stopWords = "this|is|about|after|all|also";
stopWords = string.Format(@"\s?\b(?:{0})\b\s?", stopWords);
string tags = Regex.Replace(input_string, stopWords, "", RegexOptions.IgnoreCase); 

Это то, что я хочу сверху, введите: ",Обязательно ,, все наши ,, значения "

Эти слова" This "," about "," all "будут заменены на" ", поскольку они являются шумовыми словами.Но «все наше» останется, даже если в нем есть шумовое слово «все».Это потому, что запятая является границей тега

Кто-нибудь может мне помочь?

У меня было альтернативное решение, которое помещает слова с помехами в словарь и затем ищет каждое слово во входной строке.Но я предпочитаю подход RegEx.

Ответы [ 3 ]

1 голос
/ 25 июля 2011
        var input = "This,sure,about,all of our, all, values";
        var stopWords = new Regex("^(this|is|about|after|all|also)$");
        var result = String.Join(",", input.Split(',').
            Where(x => !stopWords.IsMatch(x.Trim())));
0 голосов
/ 25 июля 2011

Мне не нравится использовать Regex для обработки задач, поэтому я предложу альтернативное решение, и вы сможете решить, хотите вы его использовать или нет.

string[] inputWords = input_string.Split(',');
string tags = "";

foreach(string s in inputWords)
{
   if(!storWords.Contains(s.ToLowerInvariant()))
      tags += s + ",";
}

tags = tags.TrimEnd(',');

//tags = "sure,all of our,values"
0 голосов
/ 25 июля 2011

Try

stopWords = string.Format(@"(?<=^|,)\s*(?:{0})\s*(?=$|,)", stopWords);

При этом используется lookbehind (?<=) для определения предшествующего или начало строки и lookahead (?=) для определения трейлинга,.Я также удалил слово boundry \b code, потому что он не нужен, и заменил необязательные пробелы \s? на \s*, чтобы соответствовать 0 или более пробелам.

Вы можете изменить * обратно на a?если вы действительно имеете в виду не более одного пробела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...