Pull to refresh

Comments 79

я считаю это все полумерами, но статью написали хорошо.
такие фильтры часто только подогревают интерес к шалунству
Это в общем-то все понимают. Но зачастую посетители жалуются на матерящихся индивидов (здесь же могут быть дети!), а вот модерировать 24/7 вряд ли кто сможет.
как на счет того, чтобы придумать саморегуляцию? карму, бан за 10 «жалоб», етс?
Это помогает только при закрытой регистрации, как здесь например. Если же пользователь может спокойно нарегить еще 10 аккаунтов — никакая карма не поможет. Можно вводить ограничения для новичков, но это не сильно приятно для самих новичков и может отвернуть их от сервиса.
Можно придумать и другие системы саморегуляции. Например если на какой-то конкретный комментарий или статью больше 5 жалоб — то просто не отображать его и с последующим разбирательством или записью в базу…

Как минимум система саморегуляции нужна в параллели с системой фильтрования…
UFO just landed and posted this here
Саморегуляция и мат несовместимы? Возьмите любой «пост ненависти» — матерный коммент заплюсуют.
лучше тогда сделать постмодерацию. т.е. чтоб фильтр срабатывал постфактум и нарушители наказывались (ro например). тогда они будут материться сколько влезет, а бан отхватывать по факту многочисленных нарушений и сразу хороший. а когда слова фильтруются сразу, они будут находить способы. кнопочка «Пожаловаться» тоже рулит, банилку потом можно выдавать особо активным пользователям
Постмодерация не очень подходит для «быстрых» чатов. Попробуйте постмодерировать IRC например.
Внизу уже есть мысль, при помощи регулярных выражений заменять нецензурные выражения фразами типа: «у нас не ругаются матом».
Попробую ее развить. А если попробовать заменять мат более мягкой (с позиции цензуры) формой но не блокировать сам негативный посыл полностью. Матершинник при этом получит ту эмоциональную разгрузку, на которую рассчитывал + система ему покажет, как можно культурно отражать эмоции пользуясь богатством русского языка в полной мере, а то и настроение матершиннику поднимет (хотя хорошее настроение матершинника чревато).
В самом простом случае, можно заменять брань злым смайлом. В идеале — находить аналоги в языке и подставлять. «Ты х…й!» меняем на «Ты редиска!», «пошел в ж…у» на «да ну Вас к черту!» и т. д.

На мой взгляд, при решении данной задачи, главное — не забывать о том человеке, который матерится. Раз он это делает, значит он чем-то недоволен, расстроен или просто малообразован и ему нужна возможность излучить накопившийся негатив и успокоится. Из курса психологии в университете я помню, что негатив излучаемый одним человеком, может приниматься другими в зависимости от условий как позитив и также позитивом возвращаться к нему обратно. Нужно искать такие схемы, которые позволили бы бранящемуся доставлять свои эмоции «легальными методами» и при этом стимулировали бы его на более добрые мысли и слова.
К сожалению, идея заменять мат на более мягкие выражения была воспринята хабром неоднозначно.
Можно еще попробовать такой вариант: матерщиннику показываем его вариант, а вот остальной общественности — измененный фильтром. Ох не сразу они догадаются наверное :)
При ложном срабатывании фильтра, будет эффект «испорченный телефон». Немного лучше при таком подходе зацензуренное сообщение вообще не показывать никому, кроме отправителя
Необходим большой словарь;
Не учитывается морфология русского языка;

вот изза этих двух пунктов, ваш фильтр ничем практически не отличается от аналогов:)
но пост хорош, мне понравилось разъяснение… и самооценка
Самые хорошие фильтры работают без словарей в чистом виде, а на основе морфологии и алгоритмов оценки. В зависимости от языка оценивают корни, приставки и т.д., оценивают «обычность» (выделяется ли фраза — допустим спецсимволы и числа в середине слова), а иногда направленность поста (opinion mining) — резкая ли она положительно/отрицательно или нейтральная. Но такие фильтры ресурсоёмкие.
Например, какие «самые хорошие»?
Морфологию прикрутить несложно, например, mystem или aot.
xxx: Нет такого мат-фильтра, который бы остановил русского человека
bash.org.ru
Размер: 27,84 KB

большой словарь наверно… со всего баша собирали)))
>> Метод обнаружения мата основывается на корнях и предлогах русского языка, а не на словаре.
Хороший, наверное, метод — но не идеальный.
Уверен, при большом желании его легко обойти.
Йодной сеткой аппендицит не вылечить.
Но где тот скальпель, что вырежет сквернословие?
Я думаю, проблема будет решена ещё нескоро.
Использую у себя в поисковике по локальным сетям для отсекания мата из базы «уже искали».
Крайне доволен.
Вы уверены, что поняли, о чём я?
слишком тонко [x]
На мой взгляд, критика должна быть конструктивной. «Х**нёй маетесь» — не конструктивно, так как не предлагает никакого выхода из ситуации. Если бы вы написали что-то вроде: «Вы делаете бесполезную работу, уже выполненную в таких-то проектах», это было бы уже лучше. Человек бы знал, с чем сравнивать свою работу. Если бы вы написали что-то вроде: «Лучше использовать подобный подход в автоматической модерации ...», это было бы ещё лучше, так как даёт направление для дальнейшего развития.

А так вы «х**нёй маятесь». Нечего сказать — молчите.
Может, он просто проверял, есть ли мат-фильтры на Хабре :)
Социальный мат фильтр — работает только в нормальных сообществах и в гугле.
Ну ладно, перефразирую: Автор изобретает perpetuum mobile, потому что идея мат-фильтра невозможна, потому что мат не в конкретных словах, а в смысле и контексте. Даже если оставить юзерам только знаки препинания, они все равно смогут материться, например, пресловутым ascii артом.
Я исхожу из идеологии AIML (помните бота ALICE?) — не надо пытаться понять фразу. Для реализации человекоподобного поведения нужна хорошая база знаний. Да, база знаний есть главный враг искусственного интеллекта. Но нам и не нужна полная замена модератору, лишь небольшой помощник.
очешуеть, я думал, что все просто проверяют по словарю. Причем не целые слова, так что слово «оглобля» превращается в «огло***». А у вас целые сотни регулярных выражений. Но результат все равно не идеальный. Кузнецов, например ущемляете в праве использовать профессиональные термины. ".Х.U.Й." оно не пропустит, а вот "_ХУЙ_", я так понял, пропускает. Так что есть куда улучшать.
Да вообще оба варианта должно проглотить. А вот с кузнецами действительно проблема. Хотя теоретически можно еще «белый список» организовать…
Разве? Насколько я помню регулярные выражения, как правило, "\W" — это любой символ кроме цифры, буквы или подчеркивания. Т.е. в слове "_хуй_" подчеркивания вроде бы будут частью слова. Учитывая «Ну и чтобы не было ложных срабатываний будем отрабатывать только слово целиком» слово "_хуй_" должно пропустить, если его нет в словаре.
А вообще, хорошо бы видеть реализацию этого, и иметь возможность потестировать.
Белый список это вариант. Можно проверять вхождения запретных слов в тестируемое слово исключая словарные. Т.е. пройтись по какому нибудь словарю без мата, выбрать там слова в которые есть матерные подстроки и занести их в белый список. Тогда «оглобля» окажется в белом списке и не будет зацензурена. А «оххуительно» будет, ибо в нем подстрока «хуй». Можно усложнить, что бы учесть подчеркивания, повторы, ударения. Чтобы слова типа «охууу´ительно» тоже цензурило. Но надо не переусердствовавать, что бы во фразе «ох, уйди прочь» оно не нашло мата.
Действительно, подчеркивание я из этого символьного класса упустил. В прочем остальные предложенные вами варианты будут нормально отбракованы — ударение, удвоение букв, разные слова.

Реализацию постараюсь выложить в следующий раз — на данный момент выглядит не очень и поэтому показывать пока не хочу :).
UFO just landed and posted this here
хороший вариант это поиск «фонетически близких» слов. Есть соответствующие азбуки и алгоритмы. Подобные алгоритмы позволяют обходить опечатки и намеренные искажения слов (в неких пределах, естественно). Однако, могут по случайности захватывать и вполне приличные в написании слова.

Вообще, идеальный порядок недостижим. Но приемлемого уровня можно достичь, если ввести внятные правила и беспристрастную модерацию («вахтёром», например;).
Видел нечто подобное для английского языка (soundex и т.п.). Есть примеры для русского?
к сожалению, я только слушал рассказы знакомого, о приведении в порядок электронной библиотеки МИАН'а. Судя по его рассказам — да, есть. Или, по крайней мере, это не так сложно изобразить самому. Но конкретнее ничего не смогу сказать, так как занимаюсь совсем другими вещами.
после минутного зависания в гугле прочёл логичную идею: можно использовать транслитерацию в английский и затем уже soundex.
Да, я как раз про Soundex хотел сказать, он описан у Кнута в «Искусстве программирования». Такая встроенная функция даже есть в oracle, но, к сожалению, работает только с английским.
community.livejournal.com/ru_php/1062493.html
вот такое поделие есть. И ниже в комментариях сравнение с транслитерацией и потом soundex'ом.
community.livejournal.com/ru_php/1062493.html?thread=14696797#t14696797

На самом деле, думаю, нужный алгоритм давно существует и написан Яндексом. Просто я даже не знаю что спросить у поисковика, чтобы получить внятный ответ.
Очень актуальный вопрос для меня. Как раз пишу сейчас чат. Спасибо за статью.
UFO just landed and posted this here
Одно другому не мешает, имхо.
Если подходить к вопросу с точки зрения Unicode, то там и регулярки немного сложнее будут.
набор регулярок гинерируемых по словарю будет непроизводительно(это же тысячу вызовов регулярок)

предлагаю вначале привести строку в нормальную форму, что б все возможные варианты написания слова ХЛЕБ, такие как

Хлеб >
парсер…

XLеб HлеБ hleb хЛеБ преобразовались в hleb, а уже в нормализованной строке сделать поиск по словарю
Получается примерно тоже самое, только путем серии замен. Вообще не обязательно на каждое слово делать отдельную регулярку, можно «склеить» несколько слов в одну.

Вообще ваш вариант имеет право на жизнь, меня смущает только то, как определить на какую часть оригинальной фразы сработал фильтр — бывает полезно для отбраковки ложных срабатываний.
Мелькнула в голове мысль.

Для фильтрации мата можно использовать матан-капчу. Схема следующая.

Если в сообщении обнаружено подозрение на мат, пишется предупреждение, и просьба решить матан-капчу. На каждое подозрительное слово — одна матан-капча. Уровень подозрительности при фильтрации можно повысить. Пользователь ставится перед выбором: или решай матан-пример, или убирай матерные слова.

То есть, тут работает принцип — у нас мат возможен. Но только для тех, кто готов пошевелить мозгами, чтобы его в чистом виде протолкнуть.

Думаю, поток тупого немотивированного мата резко снизится, останется только «грамотный» мат, написанный для пущщей экспресси.
В свое время нашел где-то регулярку:

$pattern = "\w{0,5}[хx]([хx\s\!@#\$%\^&*+-\|\/]{0,6})[уy]([уy\s\!@#\$%\^&*+-\|\/]{0,6})[ёiлeеюийя]\w{0,7}|\w{0,6}[пp]([пp\s\!@#\$%\^&*+-\|\/]{0,6})[iие]([iие\s\!@#\$%\^&*+-\|\/]{0,6})[3зс]([3зс\s\!@#\$%\^&*+-\|\/]{0,6})[дd]\w{0,10}|[сcs][уy]([уy\!@#\$%\^&*+-\|\/]{0,6})[4чkк]\w{1,3}|\w{0,4}[bб]([bб\s\!@#\$%\^&*+-\|\/]{0,6})[lл]([lл\s\!@#\$%\^&*+-\|\/]{0,6})[yя]\w{0,10}|\w{0,8}[её][bб][лске@eыиаa][наи@йвл]\w{0,8}|\w{0,4}[еe]([еe\s\!@#\$%\^&*+-\|\/]{0,6})[бb]([бb\s\!@#\$%\^&*+-\|\/]{0,6})[uу]([uу\s\!@#\$%\^&*+-\|\/]{0,6})[н4ч]\w{0,4}|\w{0,4}[еeё]([еeё\s\!@#\$%\^&*+-\|\/]{0,6})[бb]([бb\s\!@#\$%\^&*+-\|\/]{0,6})[нn]([нn\s\!@#\$%\^&*+-\|\/]{0,6})[уy]\w{0,4}|\w{0,4}[еe]([еe\s\!@#\$%\^&*+-\|\/]{0,6})[бb]([бb\s\!@#\$%\^&*+-\|\/]{0,6})[оoаa@]([оoаa@\s\!@#\$%\^&*+-\|\/]{0,6})[тnнt]\w{0,4}|\w{0,10}[ё]([ё\!@#\$%\^&*+-\|\/]{0,6})[б]\w{0,6}|\w{0,4}[pп]([pп\s\!@#\$%\^&*+-\|\/]{0,6})[иeеi]([иeеi\s\!@#\$%\^&*+-\|\/]{0,6})[дd]([дd\s\!@#\$%\^&*+-\|\/]{0,6})[oоаa@еeиi]([oоаa@еeиi\s\!@#\$%\^&*+-\|\/]{0,6})[рr]\w{0,12}";

$string = 'Да вы, бля, все суки охуевшие совсем ебанулись, вашу мать, пидорасня хренова.';

echo mb_eregi_replace($pattern, '[у нас не ругаются матом]', $string);

На выходе получаем: Да вы, [у нас не ругаются матом], все [у нас не ругаются матом] [у нас не ругаются матом] совсем [у нас не ругаются матом], вашу мать, [у нас не ругаются матом] хренова.
Цензура это зло, вместо того чтоб фильтровать слова, лучше просто «фильтровать неадекватов». И я не говорю о банах и прочих карательных мерах, я говорю о превентивных методах. В хорошем коллективе, никакие фильтры не нужны, ибо в таковых народ сам «фильтрует свой базар», всё что нужно это задать «нужный ритм».
Скажем так, мы тоже так думали до достижения 1000+ человек в одном чате…
Я регулярно сижу на форумах с 1000+ человек (именно активных) фильтры мата срабатывают дай бог раз в неделю. Добиться этого удалось очень просто, администрация просто задала ритм общения в вежливом ключе, и народ подхватил. Когда регистрируется новый пользователь, то он видит что тут приличное место, и ведёт себя прилично. (Исключения бывают только в случае конфликтов, когда пользователь нервничает и злится, тогда ему плевать на культуру и он матерится, таких надо «остудить», это не всегда просто, но всегда возможно.)
Форум есть более вялотекущая форма общения чем чат. Для форумов создание атмосферы очень важно, согласен.
А где можно попробовать?
Просто интересно, выдержит ли система большой загиб?
По опыту многолетнего модерирования общегородской локалки с чатом на базе DC++ скажу, что абсолютно любые матфильтры обходятся на ура. Слишком навороченные регулярки только мешают обычным пользователям. Если в чате есть дибилы, то ничто не поможет, кроме бана по ip.
А в случае динамического IP и бан не поможет, проверено :)
Особо упертым на динамике отрезали доступ к ресурсу уже на уровне провайдера, хехе))
в украинском языке ещё сложнее. у нас есть такие слова как «роблять» (делают на русском), «розробляти» (разрабатывать). очень много будет ложных срабатываний.
Почему же? При ограничении на совпадение слова целиком проблем возникнуть не должно.
Несколько лет жил в студенческом общежитии, был у нас irc-сервер. Было прям как вы описали: мат, ругань, баны и т.п. Баны помогали плохо, так как ник можно сменить, а внешний айпи был один на всю общагу. Люди делали запароленные каналы, чтобы пообщаться спокойно, эти пароли регулярно вскрывали, каналы захватывали… В общем, обычное такое студ.общежитие. Потом я поехал учиться за границу. Студ. городок, десяток общаг, больше тысячи студентов в локальной сети (в русской общаге было меньше сотни), тоже irc-server. На каналах нет операторов, нет даже chanserv-а, но банить никого не нужно — все общаются спокойно и доброжелательно. Кроме чата был свой news-сервер с большим трафиком, но и там не возникало нужды кого-либо банить.
+10

Это как детское воспитание. Если ребенку еще в детском садике объяснить что слова такие-то и такие-то нехорошие и их употребление — это неуважение и не только к другим, но и к себе, то и по мере взросления он этих слов будет употреблять не много и не часто. А если у человека матерное слово это просто просто «часть речи» (предлог или союз), то никакие модерации и даны по IP не спасут. Он будет считать, что он прав а остальные нет.
Запретный плод сладок, потому и у нас так получается, что если за мат получишь Бан, то большинство проявляет спортивный интерес. А там никто никого не банит, вот и не матерятся в той степени, в которой это у нас.
не люблю я такие полуалгоритмы
пользы от них никакой
больше проблем
А я пользуюсь вот такими «регулярками» .*ху(й|и|я|е|ли|ле).*
UFO just landed and posted this here
спасибо автору за эту статью, особенно за «Расстояние Левенштейна», очень полезная штука, зуб даю что пригодится не раз.
UFO just landed and posted this here
Я всегда смогу найти способ написания матерного слова, который поймёт человек, но не поймёт парсер :)
в этом посте я увидел больше мата, чем на всём хабре за месяц. отлично, отлично, господа борцы с матом.
UFO just landed and posted this here
Дабы отсекать всякие извращения с заменами букв посреди слова, нужно принудительно транслировать их в язык превалирующий в данной фразе и выдавать именно в транслированном виде(просто получать их транскрипцию в этот язык). Например: Я пошел купить hleba => Я пошел купить хлеба.
Таким образом отсекутся слова с замененными схожими буквами и их проще будет проверять, и после транслирования они уже не будут матами. Но будет проблема со всякими именами, аббревиатурами и тд.
мои попытки написания мат-фильтра в свое время споткнулись на слове «витебляне», после чего фильтр был благополучно заброшен
я на одном проекте решал так:
1. разбиваем строку по пробелам
2. проверяем слова на принадлежность к белому списку слов
3. если пусто, то проверяем регуляркой
4. если пусто, проверяем по доп базе написаной ручками

после нескольких месяцев тестирования и заполнения баз, эффект отличный.

один минус, ресурсоемко :(
Sign up to leave a comment.

Articles