Вообще, пресечь мат (ненормативную лексику) в данных, поступающих от пользователя и никак не модерируемых — задача сложная и вряд ли решаемая. Пользователь для достижения цели (написания мата) может использовать как богатые возможности русского языка для словообразования, так и различные уловки: вставка каких-то символов между буквами, замена букв на похожие. Даже описать весь спектр возможностей — колоссальный труд. И, надо сказать, такие попытки предпринимались. Но я решил обойтись "малой кровью". Понятно, что бороться с матом сложно. Но можно помочь в модерации.
Представьте, что модератору какой-либо информации приходится просматривать десятки тысяч знаков в день на предмет выявления мата. Невольно можно пропустить что-то. Но можно в тексте, например, автоматически подсветить необходимые фрагменты и жизнь уже станет чуточку проще. Конечно, это не избавляет от ошибок, потому что любой алгоритм в силу вышеуказанных причин обречен на провал, но вероятность ошибки всё же меньше.
Для решения поставленной цели — помочь модераторам — посмотрел на способы решения. В общем случае их 2: регулярные выражения и сопоставление со словарем. Решил создать моуль, объединяющий оба этих способа.
Способ сопоставления со словарем — самый интересный. Он основан на морфологическом анализе слов, приведении этих слов к нормальной форме и сопоставлении нормальных форм слов. Для морфологического анализа и нормализации я использовал шикарную утилиту Pymorphy2. Составил базу данных уже нормализованных слов. Этот способ очень неплохо работает. Из плюсов можно отметить "обучаемость". То есть если вы нашли какое-то неучтенное слово — просто добавьте его в словарь. Минусы этого способа: более низкая производительность по сравнению с анализом на основе регулярных выражений и невозможность учесть трюки пользователей, о которых упоминалось ранее.
Способ на основе анализа регулярными выражениями тоже можно использовать. Но для "обучения" придется дописывать паттерны.
Как использовать модуль, в общем-то, выбирать заинтересовавшимся этим модулем пользователям. Использовать его с фреймверком Django можно так. Устанавливаем пакет:
Добавляем в INSTALLED_APPS приложение djantimat и делаем миграцию:
Для подгрузки заготовленного словаря надо сделать syncdb или подгрузить фикстуру:
Если вы вне фреймверка Django, то вам придется самим разобрать базу из файла djantimat/fixtures/initial_data.json и подменить свойство PymorphyProc.words списком слов.
Использование:
Буду рад любым предложениям по усовершенствованию.
2 комментария:
Юнна Мориц Книга «Сквозеро»
народ выражается матом,
больших достигая высот. http://www.moscowbooks.ru/book.asp?id=734227
У вас есть проверка на запрещённые слова? Типо блять
Отправить комментарий