Фільтруй базар?

Розгорілася дискусія у форумі – "як відслідковувати мати". Питання це обговорювалося вже не раз, і зараз знову пішов за класичним сценарієм:

 – Як відстежувати мати?
– Регулярним виразом можна. А краще кинь цю затію.
– Дайте регулярний вираз.
– А якщо він введе "с.л.о.в.о", що тоді робити будеш? Ще складніше. Плюнь на цю справу.
– Дайте регулярний вираз.
– А якщо латиницею? Кинь.
– Дайте регулярний вираз.
– Кинь цю затію.
– Дайте регулярний вираз.
– Кинь цю затію.
(І так далі)

Питання, звичайно ж, не пусте, і багато уми людства над ним б'ються, але якого-небудь вдалого рішення я не бачив. Сумно читати форум з Формули-1 з іменами "Міхаель Шума ***" або "Джоні *** Берта". Цікаво, а як цей форум буде реагувати на слово "застрахуйте"?

З'явилася як-то в ураїнськім інтернеті сторінка "перевірка слова на мати". Пропонувалося ввести слово або фразу і подивитися, що скаже програма, а якщо програма неправильно визначала результат, написати авторам. І таким чином автори хотіли силами веба протестувати програму, знайти-таки універсальний алгоритм розпізнавання російських матюків. Більше про це тестері ніхто нічого не чув … Сам перевіряв – Шумахера і Херберта вважає матерка, пошта до авторів не йде – не може з'єднатися з їх сервером.

Читав документацію по White Tiger WWW Board – там передбачалася захист від матів включаючи введення латинськими літерами і, наприклад, двох слешем замість букви "л": "/". Не думаю, що це сильно допоможе. Через такий фільтр спокійно пройде слово через точки.

Чи варто говорити про те, що заміна слів на зірочки підштовхне відвідувачів на різні дослідження з метою обійти захист. Поведінка цілком залежить від манер учасників і атмосфери форуму. Варто порівняти хоча б форум про Формулу-1 сайту телекомпанії ВТП і сайту f1news.ru – форум f1news.ru, по-моєму, самий затишний форум даної тематики, а в ПТП – прохідний двір і гризня по дрібницях. Так що програми-резалкі обліко моралє не піднімуть це точно.

І, все-таки, спробуємо написати регулярний вираз і зловити їм хоч щось. Перше, що спадає на думку: "сука / блядь / мудак"

Згадуємо про латиницю. Та-ак, краще відразу застосувати інший підхід: писати слова в масив, а з нього формувати рядок регулярного виразу. Робимо так же масив однакових символів кирилиці і латиниці і замінюємо через preg_replace:

$ Letter_cyr [] = "/ а /"; $ letter_lat [] = "[АA]";
$ Letter_cyr [] = "/ л /"; $ letter_lat [] = "[". preg_quote ("л /"). "]";
$ Letter_cyr [] = "/ к /"; $ letter_lat [] = "([kк ]//<)";

Останній варіант – буква до у вигляді "/<". До речі, можна замість такого масиву коду тримати файл з рядками, розділеними табуляторами. Але повернемося до виразу:

"[CС] [yу] ([kк ]//<)[ aа] / [bб] [л / \] [Rя] [Dд] [ьb] / [mм] [yу] [Dд] [aа] ( [kк ]//<)"


Майже всі символи мають латинський аналог. По-моєму, цього достатньо, щоб відмовитися від такої затії. Ні? Підемо далі. Перед тим, як заміняти російські символи на комбінації, передбачити можливість введення слова через точки, тире, підкреслення або прогалини:

$word = preg_replace(“/./”, “\0[^w]*”, $word);


Слова, написані з помилками – "блять" – просто внесемо в словник разом з правильними (до речі, у німецьких шифрувальників в Другу Світову Війну проблема була – російські шифровки розкодовували в кілька разів довше, ніж шифровки англійців і французів, тому що наші шифрувальники часто робили помилки). Правда, є ще можливість написати мат заголовними буквами і розділити його малими: "Баля", "МАаНДаАВОШКА" – простір для фантазії багатий, правда? Прикрити таке вже неможливо – якщо зробити, скажімо

$word = preg_replace(“/./”, “\0[^ ]*”, $word);


То буде коца вже пристойні слова – як в анекдоті про Вовочку "взагалі-то я мав на увазі прізвище Хеммінгуей, але хід ваших думок мені подобається". Далі фантазувати можна, але це вже межує з маразмом. Якщо дискусії у вашому форумі говністим, резалка не допоможе. Хіба що можна спробувати зробити деяку розумну перевірку повідомлення на вході і посилати повідомлення модератору з підсвічуванням підозрілих слів. Однак фільтр може пропустити якесь слово, а гівнюки з форуму будуть спеціально маскувати мати в повідомленнях, щоб модератор їх не побачив.

Отже, резюмуючи все це і виводячи мораль, скажу, що не бачу сенсу в такій проверялке матів. Вона буде працювати ненадійно. А якщо досвідчені матершінніка дізнаються, що така працює, то тримайтеся міцніше – будуть маскуватися, шукати прогалини у вашому фільтрі. Поки ніякої алгоритм не може визначати краще людини такі речі як вживання табуйованою лексики або лайка, а в правилах більшості конференцій є так само заборону на особисті образи, зухвала поведінка, спам – без модератора все одно не обійтися



 

Автор: Дмитро Лебедєв

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*