Это в общем-то все понимают. Но зачастую посетители жалуются на матерящихся индивидов (здесь же могут быть дети!), а вот модерировать 24/7 вряд ли кто сможет.
Это помогает только при закрытой регистрации, как здесь например. Если же пользователь может спокойно нарегить еще 10 аккаунтов — никакая карма не поможет. Можно вводить ограничения для новичков, но это не сильно приятно для самих новичков и может отвернуть их от сервиса.
Можно придумать и другие системы саморегуляции. Например если на какой-то конкретный комментарий или статью больше 5 жалоб — то просто не отображать его и с последующим разбирательством или записью в базу…
Как минимум система саморегуляции нужна в параллели с системой фильтрования…
лучше тогда сделать постмодерацию. т.е. чтоб фильтр срабатывал постфактум и нарушители наказывались (ro например). тогда они будут материться сколько влезет, а бан отхватывать по факту многочисленных нарушений и сразу хороший. а когда слова фильтруются сразу, они будут находить способы. кнопочка «Пожаловаться» тоже рулит, банилку потом можно выдавать особо активным пользователям
Можно еще попробовать такой вариант: матерщиннику показываем его вариант, а вот остальной общественности — измененный фильтром. Ох не сразу они догадаются наверное :)
При ложном срабатывании фильтра, будет эффект «испорченный телефон». Немного лучше при таком подходе зацензуренное сообщение вообще не показывать никому, кроме отправителя
Самые хорошие фильтры работают без словарей в чистом виде, а на основе морфологии и алгоритмов оценки. В зависимости от языка оценивают корни, приставки и т.д., оценивают «обычность» (выделяется ли фраза — допустим спецсимволы и числа в середине слова), а иногда направленность поста (opinion mining) — резкая ли она положительно/отрицательно или нейтральная. Но такие фильтры ресурсоёмкие.
Хороший, наверное, метод — но не идеальный.
Уверен, при большом желании его легко обойти.
Йодной сеткой аппендицит не вылечить.
Но где тот скальпель, что вырежет сквернословие?
Я думаю, проблема будет решена ещё нескоро.
На мой взгляд, критика должна быть конструктивной. «Х**нёй маетесь» — не конструктивно, так как не предлагает никакого выхода из ситуации. Если бы вы написали что-то вроде: «Вы делаете бесполезную работу, уже выполненную в таких-то проектах», это было бы уже лучше. Человек бы знал, с чем сравнивать свою работу. Если бы вы написали что-то вроде: «Лучше использовать подобный подход в автоматической модерации ...», это было бы ещё лучше, так как даёт направление для дальнейшего развития.
А так вы «х**нёй маятесь». Нечего сказать — молчите.
Ну ладно, перефразирую: Автор изобретает perpetuum mobile, потому что идея мат-фильтра невозможна, потому что мат не в конкретных словах, а в смысле и контексте. Даже если оставить юзерам только знаки препинания, они все равно смогут материться, например, пресловутым ascii артом.
Я исхожу из идеологии AIML (помните бота ALICE?) — не надо пытаться понять фразу. Для реализации человекоподобного поведения нужна хорошая база знаний. Да, база знаний есть главный враг искусственного интеллекта. Но нам и не нужна полная замена модератору, лишь небольшой помощник.
очешуеть, я думал, что все просто проверяют по словарю. Причем не целые слова, так что слово «оглобля» превращается в «огло***». А у вас целые сотни регулярных выражений. Но результат все равно не идеальный. Кузнецов, например ущемляете в праве использовать профессиональные термины. ".Х.U.Й." оно не пропустит, а вот "_ХУЙ_", я так понял, пропускает. Так что есть куда улучшать.
Разве? Насколько я помню регулярные выражения, как правило, "\W" — это любой символ кроме цифры, буквы или подчеркивания. Т.е. в слове "_хуй_" подчеркивания вроде бы будут частью слова. Учитывая «Ну и чтобы не было ложных срабатываний будем отрабатывать только слово целиком» слово "_хуй_" должно пропустить, если его нет в словаре.
А вообще, хорошо бы видеть реализацию этого, и иметь возможность потестировать.
Белый список это вариант. Можно проверять вхождения запретных слов в тестируемое слово исключая словарные. Т.е. пройтись по какому нибудь словарю без мата, выбрать там слова в которые есть матерные подстроки и занести их в белый список. Тогда «оглобля» окажется в белом списке и не будет зацензурена. А «оххуительно» будет, ибо в нем подстрока «хуй». Можно усложнить, что бы учесть подчеркивания, повторы, ударения. Чтобы слова типа «охууу´ительно» тоже цензурило. Но надо не переусердствовавать, что бы во фразе «ох, уйди прочь» оно не нашло мата.
Действительно, подчеркивание я из этого символьного класса упустил. В прочем остальные предложенные вами варианты будут нормально отбракованы — ударение, удвоение букв, разные слова.
Реализацию постараюсь выложить в следующий раз — на данный момент выглядит не очень и поэтому показывать пока не хочу :).
хороший вариант это поиск «фонетически близких» слов. Есть соответствующие азбуки и алгоритмы. Подобные алгоритмы позволяют обходить опечатки и намеренные искажения слов (в неких пределах, естественно). Однако, могут по случайности захватывать и вполне приличные в написании слова.
Вообще, идеальный порядок недостижим. Но приемлемого уровня можно достичь, если ввести внятные правила и беспристрастную модерацию («вахтёром», например;).
к сожалению, я только слушал рассказы знакомого, о приведении в порядок электронной библиотеки МИАН'а. Судя по его рассказам — да, есть. Или, по крайней мере, это не так сложно изобразить самому. Но конкретнее ничего не смогу сказать, так как занимаюсь совсем другими вещами.
Да, я как раз про Soundex хотел сказать, он описан у Кнута в «Искусстве программирования». Такая встроенная функция даже есть в oracle, но, к сожалению, работает только с английским.
На самом деле, думаю, нужный алгоритм давно существует и написан Яндексом. Просто я даже не знаю что спросить у поисковика, чтобы получить внятный ответ.
Получается примерно тоже самое, только путем серии замен. Вообще не обязательно на каждое слово делать отдельную регулярку, можно «склеить» несколько слов в одну.
Вообще ваш вариант имеет право на жизнь, меня смущает только то, как определить на какую часть оригинальной фразы сработал фильтр — бывает полезно для отбраковки ложных срабатываний.
Для фильтрации мата можно использовать матан-капчу. Схема следующая.
Если в сообщении обнаружено подозрение на мат, пишется предупреждение, и просьба решить матан-капчу. На каждое подозрительное слово — одна матан-капча. Уровень подозрительности при фильтрации можно повысить. Пользователь ставится перед выбором: или решай матан-пример, или убирай матерные слова.
То есть, тут работает принцип — у нас мат возможен. Но только для тех, кто готов пошевелить мозгами, чтобы его в чистом виде протолкнуть.
Думаю, поток тупого немотивированного мата резко снизится, останется только «грамотный» мат, написанный для пущщей экспресси.
$string = 'Да вы, бля, все суки охуевшие совсем ебанулись, вашу мать, пидорасня хренова.';
echo mb_eregi_replace($pattern, '[у нас не ругаются матом]', $string);
На выходе получаем: Да вы, [у нас не ругаются матом], все [у нас не ругаются матом] [у нас не ругаются матом] совсем [у нас не ругаются матом], вашу мать, [у нас не ругаются матом] хренова.
Цензура это зло, вместо того чтоб фильтровать слова, лучше просто «фильтровать неадекватов». И я не говорю о банах и прочих карательных мерах, я говорю о превентивных методах. В хорошем коллективе, никакие фильтры не нужны, ибо в таковых народ сам «фильтрует свой базар», всё что нужно это задать «нужный ритм».
Я регулярно сижу на форумах с 1000+ человек (именно активных) фильтры мата срабатывают дай бог раз в неделю. Добиться этого удалось очень просто, администрация просто задала ритм общения в вежливом ключе, и народ подхватил. Когда регистрируется новый пользователь, то он видит что тут приличное место, и ведёт себя прилично. (Исключения бывают только в случае конфликтов, когда пользователь нервничает и злится, тогда ему плевать на культуру и он матерится, таких надо «остудить», это не всегда просто, но всегда возможно.)
По опыту многолетнего модерирования общегородской локалки с чатом на базе DC++ скажу, что абсолютно любые матфильтры обходятся на ура. Слишком навороченные регулярки только мешают обычным пользователям. Если в чате есть дибилы, то ничто не поможет, кроме бана по ip.
в украинском языке ещё сложнее. у нас есть такие слова как «роблять» (делают на русском), «розробляти» (разрабатывать). очень много будет ложных срабатываний.
Несколько лет жил в студенческом общежитии, был у нас irc-сервер. Было прям как вы описали: мат, ругань, баны и т.п. Баны помогали плохо, так как ник можно сменить, а внешний айпи был один на всю общагу. Люди делали запароленные каналы, чтобы пообщаться спокойно, эти пароли регулярно вскрывали, каналы захватывали… В общем, обычное такое студ.общежитие. Потом я поехал учиться за границу. Студ. городок, десяток общаг, больше тысячи студентов в локальной сети (в русской общаге было меньше сотни), тоже irc-server. На каналах нет операторов, нет даже chanserv-а, но банить никого не нужно — все общаются спокойно и доброжелательно. Кроме чата был свой news-сервер с большим трафиком, но и там не возникало нужды кого-либо банить.
Это как детское воспитание. Если ребенку еще в детском садике объяснить что слова такие-то и такие-то нехорошие и их употребление — это неуважение и не только к другим, но и к себе, то и по мере взросления он этих слов будет употреблять не много и не часто. А если у человека матерное слово это просто просто «часть речи» (предлог или союз), то никакие модерации и даны по IP не спасут. Он будет считать, что он прав а остальные нет.
Запретный плод сладок, потому и у нас так получается, что если за мат получишь Бан, то большинство проявляет спортивный интерес. А там никто никого не банит, вот и не матерятся в той степени, в которой это у нас.
Дабы отсекать всякие извращения с заменами букв посреди слова, нужно принудительно транслировать их в язык превалирующий в данной фразе и выдавать именно в транслированном виде(просто получать их транскрипцию в этот язык). Например: Я пошел купить hleba => Я пошел купить хлеба.
Таким образом отсекутся слова с замененными схожими буквами и их проще будет проверять, и после транслирования они уже не будут матами. Но будет проблема со всякими именами, аббревиатурами и тд.
я на одном проекте решал так:
1. разбиваем строку по пробелам
2. проверяем слова на принадлежность к белому списку слов
3. если пусто, то проверяем регуляркой
4. если пусто, проверяем по доп базе написаной ручками
после нескольких месяцев тестирования и заполнения баз, эффект отличный.
Пишем фильтр «плохих» слов