фильтр плохих слов

Не очень технический, но ... Мне нужно реализовать фильтр плохих слов на новом сайте, который мы разрабатываем. Итак, мне нужен список "хороших" плохих слов, чтобы накормить мою базу данных ... любыми подсказками / указаниями? Посмотрев в Google, я нашел, и это старт, но не более того.

Да, я знаю, что от таких фильтров легко избавиться ... но клиент будет, это будет клиент !!! :-)

Сайт должен будет отфильтровать как английские, так и итальянские слова, но для итальянского я могу попросить своих коллег помочь мне с созданным сообществом списком "parolacce" :-) - подойдет электронное письмо.

Спасибо за любую помощь.


person ila    schedule 23.08.2008    source источник
comment
Фильтрация непристойности ... плохая идея или действительно плохая идея?   -  person stephenbayer    schedule 22.10.2008
comment
объедините это с проверкой орфографии, если вы получите больше орфографических ошибок после цензуры, вы где-то напутались и можете с этим справиться   -  person nailitdown    schedule 02.09.2010
comment
связанные: programmers.stackexchange.com/ questions / 143405 /   -  person David Cary    schedule 28.06.2012
comment
Однако очень немногие фильтры могут обнаружить слова Shiτ и fucκ. Даже StackOverflow.   -  person Theodore R. Smith    schedule 03.08.2013
comment
Всем, кто говорит, что это бессмысленно и / или глупо, следует учитывать, что такая фильтрация может быть полезна как часть более крупной системы. Да, вероятно, это плохая идея - искать / заменять или автоматически отклонять исключительно на основе черного списка, но можно использовать фильтр, например, для отправки отправленного пользователем контента для ручного утверждения / модерации. Или, возможно, его можно использовать, чтобы предупредить пользователя перед отправкой, что он может быть забанен, если он разместит оскорбительный материал.   -  person Cam Jackson    schedule 09.08.2013
comment
Это отлично подходит для веб-образовательного программного обеспечения, позволяющего отмечать ответы учеников, содержащие ненормативную лексику, которые затем могут быть переданы учителям для проверки. Я создал карту сворачивания ASCII, в которой вручную сопоставил все 65 000+ кодовых точек Unicode с их ближайшим визуальным эквивалентом ASCII, если таковой существует. Затем я сделал то же самое для всех перестановок последовательностей из 2, 3 и 4 символов, используя механизм визуального сходства, чтобы свернуть их до ближайшего односимвольного эквивалента (например, g \ / \ / = W, | - | = H, | _ = L), а затем использовал алгоритм иерархической временной памяти для их мгновенного распознавания.   -  person Triynko    schedule 10.02.2015
comment
После долгих поисков и сбора: github.com/alvations/expletives/tree/master   -  person alvas    schedule 16.04.2017
comment
Привет @triynko Если вы готовы поделиться кодом, мне было бы интересно. Интересная идея.   -  person Robert Lugg    schedule 31.08.2019


Ответы (9)


Я не видел ни одного указанного языка, но вы можете использовать его для PHP, он будет генерировать RegEx для каждой введенной работы, так что даже намеренные орфографические ошибки (например, @ss, i3itch) также будут обнаружены.

<?php

/**
 * @author [email protected]
 **/

if($_GET['act'] == 'do')
 {
    $pattern['a'] = '/[a]/'; $replace['a'] = '[a A @]';
    $pattern['b'] = '/[b]/'; $replace['b'] = '[b B I3 l3 i3]';
    $pattern['c'] = '/[c]/'; $replace['c'] = '(?:[c C (]|[k K])';
    $pattern['d'] = '/[d]/'; $replace['d'] = '[d D]';
    $pattern['e'] = '/[e]/'; $replace['e'] = '[e E 3]';
    $pattern['f'] = '/[f]/'; $replace['f'] = '(?:[f F]|[ph pH Ph PH])';
    $pattern['g'] = '/[g]/'; $replace['g'] = '[g G 6]';
    $pattern['h'] = '/[h]/'; $replace['h'] = '[h H]';
    $pattern['i'] = '/[i]/'; $replace['i'] = '[i I l ! 1]';
    $pattern['j'] = '/[j]/'; $replace['j'] = '[j J]';
    $pattern['k'] = '/[k]/'; $replace['k'] = '(?:[c C (]|[k K])';
    $pattern['l'] = '/[l]/'; $replace['l'] = '[l L 1 ! i]';
    $pattern['m'] = '/[m]/'; $replace['m'] = '[m M]';
    $pattern['n'] = '/[n]/'; $replace['n'] = '[n N]';
    $pattern['o'] = '/[o]/'; $replace['o'] = '[o O 0]';
    $pattern['p'] = '/[p]/'; $replace['p'] = '[p P]';
    $pattern['q'] = '/[q]/'; $replace['q'] = '[q Q 9]';
    $pattern['r'] = '/[r]/'; $replace['r'] = '[r R]';
    $pattern['s'] = '/[s]/'; $replace['s'] = '[s S $ 5]';
    $pattern['t'] = '/[t]/'; $replace['t'] = '[t T 7]';
    $pattern['u'] = '/[u]/'; $replace['u'] = '[u U v V]';
    $pattern['v'] = '/[v]/'; $replace['v'] = '[v V u U]';
    $pattern['w'] = '/[w]/'; $replace['w'] = '[w W vv VV]';
    $pattern['x'] = '/[x]/'; $replace['x'] = '[x X]';
    $pattern['y'] = '/[y]/'; $replace['y'] = '[y Y]';
    $pattern['z'] = '/[z]/'; $replace['z'] = '[z Z 2]';
    $word = str_split(strtolower($_POST['word']));
    $i=0;
    while($i < count($word))
     {
        if(!is_numeric($word[$i]))
         {
            if($word[$i] != ' ' || count($word[$i]) < '1')
             {
                $word[$i] = preg_replace($pattern[$word[$i]], $replace[$word[$i]], $word[$i]);
             }
         }
        $i++;
     }
    //$word = "/" . implode('', $word) . "/";
    echo implode('', $word);
 }

if($_GET['act'] == 'list')
 {
    $link = mysql_connect('localhost', 'username', 'password', '1');
    mysql_select_db('peoples');
    $sql = "SELECT word FROM filters";
    $result = mysql_query($sql, $link);
    $i=0;
    while($i < mysql_num_rows($result))
     {
        echo mysql_result($result, $i, 'word') . "<br />";
        $i++;
     }
     echo '<hr>';
 }
?>
<html>
    <head>
        <title>RegEx Generator</title>
    </head>
    <body>
        <form action='badword.php?act=do' method='post'>
            Word: <input type='text' name='word' /><br />
            <input type='submit' value='Generate' />
        </form>
        <a href="badword.php?act=list">List Words</a>
    </body>
</html>
person UnkwnTech    schedule 23.08.2008
comment
В день оргазма ig-pay atin-lay. Urse-cay ords-way are-ar ill-stite-quay eadable-ray. (бывший владелец AOL ник Itshay). - person plinth; 12.05.2009
comment
ты имеешь в виду в не-день orget-fay - person Raiyan; 22.05.2015
comment
Это отличная ссылка, спасибо вам за это. В приложении, однако, я не уверен, как изменить гамбургер на [h H] [a ​​A @] [m M] [b B I3 l3 i3] [u U v V] [r R] [g G 6] [ e E 3] [r R] поможет отфильтровать ненормативную лексику. - person JVE999; 24.02.2020

Остерегайтесь ошибок пользователя.

«Apple совершила грубую ошибку, вытеснив своего провидца - я имею в виду, посмотрите, чем была задумана NeXT!»

Хм. "клещевик".

Google "clbuttic" - тысячи просмотров!

Есть кто-то, кто называет свою машину «клатской».

Есть доски объявлений "Clbuttic Steam Engine".

Словарь Вебстера - бесполезно.

Хм. Что это может быть?

ПОДСКАЗКА: люди, которые делают предположения относительно своих сценариев регулярных выражений, будут смущены, когда они повторят эту грубую ошибку.

person AgentConundrum    schedule 23.08.2008
comment
Я открыл эту ветку с намерением добавить тот же ответ ... а потом понял, что давным-давно дал вам за это голос :) - person Ed S.; 12.05.2009

Shutterstock имеет репозиторий Github с использованным списком нецензурных слов для фильтрации.

Вы можете проверить это здесь: https://github.com/shutterstock/List-of-Dirty-Naughty-Obscene-and-Otherwise-Bad-Words

person David Fraga    schedule 09.03.2012
comment
Хотя это многовато - Мистер Хэндс явно оскорбляет. - person UpTheCreek; 17.09.2015
comment
Французская БД плохая ... - person Cocorico; 05.02.2016

Если кому-то нужен API, Google в настоящее время предоставляет индикатор плохого слова.

http://www.wdyl.com/profanity?q=naughtyword

{
response: "false"
}

Обновление: Google удалил эту службу.

person Tony    schedule 03.08.2012
comment
Похоже, больше не проявляет активности. - person Nick; 14.06.2016
comment
Поскольку этот список не работает, raw.githubusercontent.com/RobertJGabriel / Google-profanity-words / - вариант. - person Tony; 11.09.2019

Я бы посоветовал просто удалять сообщения, когда вы о них узнали, и блокировать пользователей, которые чрезмерно откровенны в своих сообщениях. Можно говорить очень оскорбительные вещи, не используя нецензурных слов. Если вы заблокируете слово «осел» (также известное как осел), люди будут просто вводить $$ или / \ 55 или что-то еще, что им нужно ввести, чтобы пройти через фильтр.

person Kibbee    schedule 24.08.2008

+1 к ошибке Clbuttic, я думаю, что для фильтров «плохих слов» важно сканировать как начальные, так и конечные пробелы (например, «ass»), а не только точную строку, чтобы у нас не было таких слов, как clbuttic , clbuttes, buttert, buttess и т. д.

person Jon Limjap    schedule 30.08.2008
comment
И не блокируйте город Сканторп. - person TRiG; 25.11.2009
comment
К сожалению, это не избавляет от проклятий в начале абзаца или около знаков препинания. Если бы у меня был абзац, состоящий из (ругательства) !, он не прошел бы ваш тест. - person proudgeekdad; 23.02.2011

Wikipedia ClueBot имеет фильтр неверных слов, прочтите его источник.

http://en.wikipedia.org/wiki/User:ClueBot/Source#Score_list

person Ming-Tang    schedule 02.09.2010

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

person Ross    schedule 23.08.2008

Изучая эту тему, я определил, что было необходимо нечто большее, чем просто список, в котором выполняются произвольные замены. Я создал веб-службу, которая позволяет вам определять желаемый уровень «чистоты». Он также пытается идентифицировать ложные срабатывания, то есть когда слово может быть плохим в одном контексте, но не в другом. Взгляните на http://filterlanguage.com

person Richard    schedule 02.09.2010
comment
URL недоступен. - person Lenin; 13.12.2012