powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Валидация строки на присутствие слов
15 сообщений из 15, страница 1 из 1
Валидация строки на присутствие слов
    #39032220
zalsily
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Встала задача проверить входную строку на наличие некоторых запрещенных слов (в данном случае ругательных - вульгаризмов), выброситьих из строки и, при этом, сохранить иходный регистр символов.

Пример

Исходная строка: " На виноградниках Шабли маркизы дам своих ... пленяли. Вначали им стихи читали, а вскоре - все же отъебли ". После парсинга и чистки должно получиться так: " На виноградниках Шабли маркизы дам своих ... пленяли. Вначале им стихи читали, а вскоре - все же ".

Массив-набор запрещенных слов имеется.
...
Рейтинг: 0 / 0
Валидация строки на присутствие слов
    #39032230
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zalsily,
RegEx
...
Рейтинг: 0 / 0
Валидация строки на присутствие слов
    #39032233
zalsily
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:)

Так я и прошу помощи с этим
...
Рейтинг: 0 / 0
Валидация строки на присутствие слов
    #39032235
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zalsilyМассив-набор запрещенных слов имеется.

Скорее массив-набор запрещенных корней + Regex
...
Рейтинг: 0 / 0
Валидация строки на присутствие слов
    #39032242
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallariszalsilyМассив-набор запрещенных слов имеется.

Скорее массив-набор запрещенных корней + Regex"в порт зашли два кора..." - результат работы такого алгоритма.

нужно либо делать огромный словарь со всеми словоформами, либо осваивать стемминг.
...
Рейтинг: 0 / 0
Валидация строки на присутствие слов
    #39032245
zalsily
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так дело в том, что запрещенное слово в массиве запрещенных слов записано так: "запрещенное". А в исходной сроке оно может быть записано как "запрЕщеНное" и в таком случае соответствие не будет обнаружено и ругательство не будет выброшено из исходного текста.

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

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

В регулярках ноль с плюсом я. Мож кто подскажет выражение?!
...
Рейтинг: 0 / 0
Валидация строки на присутствие слов
    #39032247
zalsily
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,
нет-нет!

Части слова не в счет, - только целые отдельные слова, разделенные между собой пробелом, дефисом, тире.
...
Рейтинг: 0 / 0
Валидация строки на присутствие слов
    #39032249
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zalsily,

Как-то так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
        public string ValidateSentenceForBannedWords(text sentence)
        {
            var result = string.Empty;

            if (!string.IsNullOrEmpty(sentence))
            {
                var words = Regex.Split(sentence, @"\W+");
                foreach (var word in words)
                {
                    if (!IsBannedWord(word))
                    {
                        result += " " + word;
                    }
                }
            }
            return result;
        }

        private bool IsBannedWord(string text)
        {
            if (BannedWord.Words.Contains(text)) //BannedWord.Words - SortedSet<string>, содержащий все вариации запрещенных слов.
                return true;
            return false;
        }
...
Рейтинг: 0 / 0
Валидация строки на присутствие слов
    #39032253
igr_ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zalsilyТак дело в том, что запрещенное слово в массиве запрещенных слов записано так: "запрещенное".Regex.Replace может игнорировать регистр
...
Рейтинг: 0 / 0
Валидация строки на присутствие слов
    #39032260
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zalsily А в исходной сроке оно может быть записано как "запрЕщеНное" и в таком случае соответствие не будет обнаружено и ругательство не будет выброшено из исходного текста.это вообще не проблема, даже регистр менять не надо.

zalsilyAntonariy,
нет-нет!

Части слова не в счет, - только целые отдельные слова, разделенные между собой пробелом, дефисом, тире.каждое слово рождает десятки словоформ с помощью суффиксов и предлогов, кто будет словарь составлять?

короче, вот стеммер, он достаточно эффективно извлекает основу. слова "отъебли" и "мебель" он не перепутает: http://pastebin.com/r8KjeMWB
...
Рейтинг: 0 / 0
Валидация строки на присутствие слов
    #39032268
zalsily
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Axeleronzalsily,

Как-то так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
        public string ValidateSentenceForBannedWords(text sentence)
        {
            var result = string.Empty;

            if (!string.IsNullOrEmpty(sentence))
            {
                var words = Regex.Split(sentence, @"\W+");
                foreach (var word in words)
                {
                    if (!IsBannedWord(word))
                    {
                        result += " " + word;
                    }
                }
            }
            return result;
        }

        private bool IsBannedWord(string text)
        {
            if (BannedWord.Words.Contains(text)) //BannedWord.Words - SortedSet<string>, содержащий все вариации запрещенных слов.
                return true;
            return false;
        }



не работает правильно!

Этот метод убирает такие символы как "{", "}" и не удаляет запрещенные слова из массива если те прописаны в тексте типа "заПрещеннОе". В массиве слово подано как "запрещенное"
...
Рейтинг: 0 / 0
Валидация строки на присутствие слов
    #39032274
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zalsilyне работает правильно!

Этот метод убирает такие символы как "{", "}" и не удаляет запрещенные слова из массива если те прописаны в тексте типа "заПрещеннОе". В массиве слово подано как "запрещенное"
Ну тогда вот так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
class Program
{
  static void Main()
  {
    const string text = @"..."; // длинная матерная фраза
    var obscenes = new HashSet<string>(new TextEqualityComparer())
    {
      // список матерных слов
    };
    var res = Regex.Replace(text, @"\w+", m => obscenes.Contains(m.Groups[0].Value) ? string.Empty : m.Groups[0].Value);
    Console.WriteLine(res);
    Console.WriteLine("done");
    Console.ReadKey(true);
  }
}

class TextEqualityComparer : IEqualityComparer<string>
{
  public bool Equals(string x, string y)
  {
    return x!=null && x.Equals(y, StringComparison.OrdinalIgnoreCase);
  }

  public int GetHashCode(string obj)
  {
    return obj==null ? -1 : obj.ToUpperInvariant().GetHashCode();
  }
}
...
Рейтинг: 0 / 0
Валидация строки на присутствие слов
    #39032289
zalsily
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны, спасибо! Это уже почти самое оно!!!

Очень помогли!!!

Всем хорошего дня и приятного вечера!
...
Рейтинг: 0 / 0
Валидация строки на присутствие слов
    #39032382
zz118
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, если по взрослому делать, нужно посмотреть вот сюда:
http://habrahabr.ru/post/114997/
...
Рейтинг: 0 / 0
Валидация строки на присутствие слов
    #39032519
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zalsilyТак дело в том, что запрещенное слово в массиве запрещенных слов записано так: "запрещенное". А в исходной сроке оно может быть записано как "запрЕщеНное" и в таком случае соответствие не будет обнаружено и ругательство не будет выброшено из исходного текста.
Блин, детский сад...
В дотнете работа со строками поставлена на ура. Смотреть в MSDN до просветления StringComparison.*IgnoreCase, StringComparer.*IgnoreCase, а также RegexOptions.IgnoreCase.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Валидация строки на присутствие слов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]