Как реализовать хороший фильтр ненормативной лексики?


208

Многим из нас приходится иметь дело с пользовательским вводом, поисковыми запросами и ситуациями, когда вводимый текст может содержать ненормативную лексику или нежелательный язык. Часто это нужно отфильтровать.

Где можно найти хороший список нецензурных слов на разных языках и диалектах?

Доступны ли API для источников, которые содержат хорошие списки? Или, может быть, API, который просто говорит «да, это чисто» или «нет, это грязно» с некоторыми параметрами?

Каковы хорошие методы для ловли людей, пытающихся обмануть систему, например, $$, azz или a55?

Бонусные баллы, если вы предлагаете решения для PHP. :)

Изменить: Ответ на ответы, которые говорят, просто избежать программной проблемы:

Я думаю, что есть место для такого рода фильтров, когда, например, пользователь может использовать общедоступный поиск изображений, чтобы найти изображения, которые будут добавлены в чувствительный пул сообщества. Если они могут искать «пенис», то они, скорее всего, получат много фотографий, да. Если нам не нужны картинки этого, то предотвращение слова в качестве поискового запроса - это хороший привратник, хотя и не надежный метод. Получение списка слов в первую очередь является реальным вопросом.

Так что я действительно имею в виду способ выяснить, является ли грязный токен грязным или нет, а затем просто запретить его. Я бы не стал предотвращать такое чувство, как совершенно смешное упоминание о «длинношерстном жирафе». Вы ничего не можете сделать там. :)


12
Обидно, что все главные ответы - экзистенциальные и пораженческие отклонения от задачи программирования. Сейчас, когда вычислительные сервисы «киборга», такие как Mechanical Turk, набирают обороты, и почти все программное обеспечение становится социальным, важно, как никогда, иметь эвристический способ пометить контент и обратить на него внимание модератора!
Джейсон Смит

10
Пожалуйста, будьте осторожны с языковым контекстом, особенно если вы делаете i18n. Однажды я попытался создать группу Google для курса, который я читал, под названием «Sanal ortamda görselleştirme», что в переводе с турецкого означает «Визуализация в виртуальной среде». Google был настолько глуп, чтобы отклонить его, потому что в заголовке было слово «анальный» . Sanal [tr] = Virtual [en] и Google бесстыдно обвинили меня в ненормативной лексике! : D Пожалуйста, не позволяйте таким странным вещам происходить.
edgerunner

А что, если вы ищете слово на испанском ? Таким образом, вы можете обойти фильтр Google Images (если вы переведены на другой язык).
new123456

Другим предложением было бы НЕ запрещать эти слова, а регистрировать пользователей, которые их используют. Если пользователь / IP получает больше, чем 2, 3 или что вы хотите, заблокируйте этого человека. Также не является надежным, но я думаю, что гораздо более неудобно быть заблокированным и вынужден менять пользователя / IP / оба, чем писать «пушистого белого зайчика» вместо «киски». Часть, пользователи не знают, какие слова или выражения они не могут использовать, поэтому они не могут просто угадать разные плохие слова так легко, как их забанят.
Франциско Презенсия

1
Фильтры ненормативной лексики - плохая идея. Очень трудно провести различие между кем-то, кто пытается обмануть систему («Fudge you!»), И тем, кто на законных основаниях говорит о чем-то совершенно подходящем («Мне нравится шоколадная выдумка»)
clickbait

Ответы:


177

Фильтры непристойности: плохая идея или невероятно плохая идея общения?

Кроме того, нельзя не вспомнить «Неописанную историю» SpeedChat в Тоунтауне , где даже использование «белого списка безопасных слов» привело к тому, что 14-летний парень быстро обошел его: «Я хочу засунуть своего жирафа с длинной шеей в вашего пушистого белого зайчика». «.

Итог: в конечном счете, для любой системы, которую вы внедряете, ничто не может заменить рецензирование человеком (независимо от того, является ли оно аналогичным или нет). Не стесняйтесь реализовывать элементарный инструмент, чтобы избавиться от попутчиков, но для решительного тролля вам абсолютно необходим подход, не основанный на алгоритмах.

Также полезна система, которая устраняет анонимность и вводит подотчетность (что хорошо справляется с переполнением стека), особенно для борьбы с ПОДАРОКОМ Джона Габриэля.

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

Отредактируйте в ответ на вопрос edit: Спасибо за разъяснение того, что вы пытаетесь сделать. В этом случае, если вы просто пытаетесь сделать простой фильтр слов, есть два способа сделать это. Один из них - создать одно длинное регулярное выражение со всеми запрещенными фразами, которые вы хотите подвергнуть цензуре, и просто выполнить поиск / замену регулярного выражения. Регулярное выражение, как:

$filterRegex = "(boogers|snot|poop|shucks|argh)"

и запустите его на входной строке, используя preg_match (), чтобы протестировать результат на хит,

или preg_replace () чтобы убрать их.

Вы также можете загружать эти функции с массивами, а не с одним длинным регулярным выражением, и для длинных списков слов это может быть более управляемым. Смотрите preg_replace () для некоторых хороших примеров того, как можно гибко использовать массивы.

Дополнительные примеры программирования на PHP см. На этой странице с несколько более сложным универсальным классом для фильтрации слов, который * выделяет центральные буквы из цензурированных слов, и этот предыдущий вопрос о переполнении стека, в котором также есть пример PHP (основная ценная часть которого есть основанный на SQL подход отфильтрованного слова - можно обойтись без компенсатора речи, если в этом нет необходимости).

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


@JPLemme: Да, так и должно быть - мне следовало добавить [sic] впоследствии, так как это было написано Атвудом. :)
HanClinto

"Club Penguin" добавляет сотни записей в свой фильтр ненормативной лексики каждый день : raphkoster.com/2008/05/09/…
Фрэнк Фармер

6
Оболочка границы слова вокруг ваших опций регулярных выражений предотвратит грубую ошибку
cjk

@ck: Только если вы не беспокоитесь о возможности отфильтровать неправильно написанные слова "F * ckkkk yo 'asssss" :) Я не уверен, что доверяю своим троллям иметь очень точное написание.
HanClinto

1
Если вы хотите услышать историю «Пушистого белого зайчика» из уст пресловутой лошади, это эпизод подкаста: socialmediaclarity.tumblr.com/post/70499341079/…
Ф. Рэндалл Фермер

44

Хотя я знаю, что этот вопрос довольно старый, но это часто встречающийся вопрос ...

Существует как причина, так и явная потребность в фильтрах ненормативной лексики (см. Статью в Википедии здесь ), но они часто не достигают 100% точности по совершенно разным причинам; Контекст и точность .

Это зависит (целиком) от того, чего вы пытаетесь достичь - в самом основном, вы, вероятно, пытаетесь охватить « семь грязных слов », а затем некоторые ... Некоторым предприятиям необходимо отфильтровать самое основное из ненормативной лексики: ругайтесь словами, URL-адресами или даже личной информацией и т. д., но другие должны предотвращать незаконное присвоение имени учетной записи (например, Xbox live) или многое другое ...

Пользовательский контент не только содержит потенциальные ругательства, но также может содержать оскорбительные ссылки на:

  • Половые акты
  • Сексуальная ориентация
  • религия
  • Этнос
  • И т.д...

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

Я согласен с принятым ответом, что это не определенная наука, и, поскольку язык - это постоянно развивающаяся проблема, но проблема, когда коэффициент вылова составляет 90%, лучше, чем 0%. Это зависит исключительно от ваших целей - что вы пытаетесь достичь, уровень поддержки у вас и насколько важно удалить ненормативную лексику разных типов.

При построении фильтра необходимо учитывать следующие элементы и их связь с вашим проектом:

  • Слова / фразы
  • Сокращения (FOAD / LMFAO и т. Д.)
  • Ложные срабатывания (слова, места и названия, такие как «мишит», «скунторп» и «титсворт»)
  • URL-адрес (порносайты являются очевидной мишенью)
  • Личная информация (электронная почта, адрес, телефон и т. Д. - если применимо)
  • Выбор языка (обычно английский по умолчанию)
  • Модерация (как, если вообще, вы можете взаимодействовать с пользовательским контентом и что вы можете с ним делать)

Вы можете легко создать фильтр ненормативной лексики, который фиксирует более 90% ненормативной лексики, но вы никогда не достигнете 100%. Это просто невозможно. Чем ближе вы хотите приблизиться к 100%, тем сложнее становится ... Создав в прошлом сложный механизм ненормативной лексики, который обрабатывал более 500 тыс. Сообщений в режиме реального времени в день, я бы предложил следующий совет:

Базовый фильтр будет включать:

  • Составление списка применимых ненормативной лексики
  • Разработка метода борьбы с ненормативной лексикой

Умеренно сложный файлер будет включать (в дополнение к базовому фильтру):

  • Использование сложного сопоставления с образцом для работы с расширенными деривациями (с использованием расширенного регулярного выражения)
  • Работа с Leetspeak (l33t)
  • Работа с ложными срабатываниями

Сложный фильтр будет включать в себя ряд следующих (в дополнение к умеренному фильтру):

  • Белые и черные списки
  • Наивная байесовская фильтрация фраз / терминов
  • Функции Soundex (где слово звучит как другое)
  • Расстояние Левенштейна
  • Морфологический
  • Модераторы-люди, помогающие руководить фильтрующим механизмом, чтобы учиться на примере или там, где совпадения недостаточно точны без руководства (система самосовершенствования / непрерывного совершенствования)
  • Возможно, какая-то форма движка ИИ

28

Я не знаю каких-либо хороших библиотек для этого, но что бы вы ни делали, убедитесь, что вы ошибаетесь в направлении пропуска вещей. Я имел дело с системами, которые не позволяют мне использовать «mpassell» в качестве имени пользователя, потому что он содержит «ass» в качестве подстроки. Это отличный способ оттолкнуть пользователей!


17
или запрещение «кабины» в игре с летающими космическими кораблями
Shinhan

24

Во время моего собеседования, технический директор компании, который брал у меня интервью, попробовал создать словесную / веб-игру, которую я написал на Java. Из списка слов всего оксфордского словаря английского языка, какое было первое слово, которое было предложено угадать?

Конечно, самое грязное слово в английском языке.

Так или иначе, я все еще получил предложение о работе, но затем я отследил список ненормативной лексики (не похожий на этот ) и написал быстрый скрипт для генерации нового словаря без всех плохих слов (даже без необходимости просматривать список) ,

Для вашего конкретного случая, я думаю, что сравнение поиска с реальными словами звучит так же, как и список слов. Альтернативные стили / знаки препинания требуют немного больше работы, но я сомневаюсь, что пользователи будут использовать это достаточно часто, чтобы стать проблемой.


8
Не по теме, но какое самое грязное слово? Я всегда считал это словом c или n словом, но я предполагаю, что люди думают, что слово f
Джефф

2
«Я сомневаюсь, что пользователи будут использовать это достаточно часто, чтобы стать проблемой» . Как только пользователи наткнуться на фильтр, они будут работать над поиском способов обхода. Это может быть так же просто, как замена букв цифрами на нечетное размещение пробелов и т. Д.).
BryanH

21

система фильтрации ненормативной лексики никогда не будет идеальной, даже если программист вздрагивает и идет в ногу со всеми обнаженными разработками

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

Итак, единственное практическое решение имеет два аспекта:

  1. будьте готовы регулярно обновлять свой словарь
  2. нанять редактора-человека для исправления ложных срабатываний (например, «clbuttic» вместо «классических») и ложных отрицаний (ой! пропустил один!)

1
Просто найдите слово с пробелами по обе стороны, после полной остановки, нет?
Дэвид Д

1
Нет человека, который работает только в самых тривиальных случаях; мы имеем дело с людьми здесь, и они довольно умны :)
Стивен А. Лоу

14

Единственный способ предотвратить оскорбительный ввод пользователя - запретить весь ввод пользователя.

Если вы настаиваете на разрешении пользовательского ввода и нуждаетесь в модерации, то включайте модераторов-людей.



7

Что касается подвопроса «обмануть систему», вы можете справиться с этим, нормализуя как список «плохих слов», так и введенный пользователем текст перед выполнением поиска. Например, используйте серию регулярных выражений (или tr, если он есть у PHP), чтобы преобразовать [z $ 5] в «s», [4 @] в «a» и т. д., затем сравните нормализованный список «плохих слов» с нормализованным текст. Обратите внимание, что нормализация потенциально может привести к дополнительным ложным срабатываниям, хотя в настоящий момент я не могу вспомнить ни одного фактического случая.

Более сложная задача - придумать что-то, что позволит людям цитировать « ручка сильнее меча», в то же время блокируя «пенис».


14
Не забывайте экспертов-exchange.com и pen-island.com; те URL-адреса сайта не содержали дефисов.
BryanH

7

Остерегайтесь вопросов локализации: что ругательство на одном языке может быть совершенно нормальным словом на другом.

Один текущий пример этого: ebay использует словарный подход для фильтрации «плохих слов» по ​​отзывам. Если вы попытаетесь ввести немецкий перевод «это была совершенная транзакция» («das war eine perfekte Transaktion»), ebay отклонит отзыв из-за плохих слов.

Зачем? Потому что немецкое слово «был» - «война», а «война» в словаре «плохих слов» на ebay.

Так что остерегайтесь вопросов локализации.


6

Если вы можете сделать что-то вроде Digg / Stackoverflow, где пользователи могут понизить / пометить непристойный контент ... сделайте это.

Тогда все, что вам нужно сделать, это просмотреть «непослушных» пользователей и заблокировать их, если они нарушают правила.


4

Я немного опоздал на вечеринку, но у меня есть решение, которое может сработать для тех, кто читает это. Это в javascript вместо php, но есть веская причина для этого.

Полное раскрытие, я написал этот плагин ...

В любом случае.

Подход, который я выбрал, заключается в том, чтобы позволить пользователю «согласиться» на их фильтрацию ненормативной лексики. В основном ненормативная лексика будет разрешена по умолчанию, но если мои пользователи не хотят читать ее, они не должны. Это также помогает с проблемой «l33t sp3 @ k».

Концепция проста плагин, который вводится сервером, если учетная запись клиента включает фильтрацию ненормативной лексики. Оттуда это просто пара простых строк, которые вычеркивают ругательства.

Вот демонстрационная страница
https://chaseflorell.github.io/jQuery.ProfanityFilter/demo/

<div id="foo">
    ass will fail but password will not
</div>

<script>
    // code:
    $('#foo').profanityFilter({
        customSwears: ['ass']
    });
</script>

результат

*** не удастся, но пароль не будет


Вот рабочая демонстрация jsFiddle, сопровождающая этот ответ.
Чейз Флорелл

Очень наивно. Не фильтроватьa$$
Вингер Сендон

3
@EmperorAiman ​​никогда не было предназначено отфильтровать слова . Я не рекомендую пытаться фильтровать это, потому что это проигрышная битва. Фильтр ненормативной лексики, который я опубликовал, «построен для того, чтобы позволить пользователям« отказаться »от ненормативной лексики». Это означает, что его лучше всего использовать на сайте, который по умолчанию допускает ненормативную лексику. Если вы хотите фильтровать a$$, то вы добавляете его в список фильтров.
Чейз Флорелл

4

Я собрал 2200 плохих слов на 12 языках: en, ar, cs, da, de, eo, es, fa, fi, fr, hi, hu, it, ja, ko, nl, no, pl, pt, ru, sv th, tlh, tr, zh.

Доступны опции MySQL dump, JSON, XML или CSV.

https://github.com/turalus/openDB

Я бы посоветовал вам выполнить этот SQL в вашей БД и проверять каждый раз, когда пользователь что-то вводит.


2

Не. Это просто приводит к проблемам. Один из моих личных опытов с фильтрами ненормативной лексики - это время, когда меня выгнали / забанили на канале IRC за упоминание о том, что я «направляюсь через мост на Хэнкок на пару часов» или что-то в этом роде.


2

Я согласен с постом HanClinto выше в этой дискуссии. Я обычно использую регулярные выражения для совпадения строк входного текста. И это тщетное усилие, так как, как вы изначально упоминали, вы должны явно учитывать все хитрые формы письма, популярные в сети, в вашем «заблокированном» списке.

С другой стороны, в то время как другие обсуждают этику цензуры, я должен согласиться с тем, что какая-то форма необходима в Интернете. Некоторым людям просто нравится публиковать вульгарность, потому что она может быть мгновенно оскорбительной для большого количества людей и абсолютно не требует размышлений со стороны автора.

Спасибо за идеи.

Правила HanClinto!


2

Если у вас есть хорошая таблица MYSQL с некоторыми плохими словами, которые вы хотите отфильтровать (я начал с одной из ссылок в этой теме), вы можете сделать что-то вроде этого:

$errors = array();  //Initialize error array (I use this with all my PHP form validations)

$SCREENNAME = mysql_real_escape_string($_POST['SCREENNAME']); //Escape the input data to prevent SQL injection when you query the profanity table.

$ProfanityCheckString = strtoupper($SCREENNAME); //Make the input string uppercase (so that 'BaDwOrD' is the same as 'BADWORD').  All your values in the profanity table will need to be UPPERCASE for this to work.

$ProfanityCheckString = preg_replace('/[_-]/','',$ProfanityCheckString); //I allow alphanumeric, underscores, and dashes...nothing else (I control this with PHP form validation).  Pull out non-alphanumeric characters so 'B-A-D-W-O-R-D' shows up as 'BADWORD'.

$ProfanityCheckString = preg_replace('/1/','I',$ProfanityCheckString); //Replace common numeric representations of letters so '84DW0RD' shows up as 'BADWORD'.

$ProfanityCheckString = preg_replace('/3/','E',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/4/','A',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/5/','S',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/6/','G',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/7/','T',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/8/','B',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/0/','O',$ProfanityCheckString); //Replace ZERO's with O's (Capital letter o's).

$ProfanityCheckString = preg_replace('/Z/','S',$ProfanityCheckString); //Replace Z's with S's, another common substitution.  Make sure you replace Z's with S's in your profanity database for this to work properly.  Same with all the numbers too--having S3X7 in your database won't work, since this code would render that string as 'SEXY'.  The profanity table should have the "rendered" version of the bad words.

$CheckProfanity = mysql_query("SELECT * FROM DATABASE.TABLE p WHERE p.WORD = '".$ProfanityCheckString."'");
if(mysql_num_rows($CheckProfanity) > 0) {$errors[] = 'Please select another Screen Name.';} //Check your profanity table for the scrubbed input.  You could get real crazy using LIKE and wildcards, but I only want a simple profanity filter.

if (count($errors) > 0) {foreach($errors as $error) {$errorString .= "<span class='PHPError'>$error</span><br /><br />";} echo $errorString;} //Echo any PHP errors that come out of the validation, including any profanity flagging.


//You can also use these lines to troubleshoot.
//echo $ProfanityCheckString;
//echo "<br />";
//echo mysql_error();
//echo "<br />";

Я уверен, что есть более эффективный способ сделать все эти замены, но я не достаточно умен, чтобы понять это (и это, кажется, работает хорошо, хотя и неэффективно).

Я считаю, что вам следует ошибиться, если вы позволите пользователям регистрироваться и использовать людей для фильтрации и добавления в вашу таблицу ненормативной лексики по мере необходимости. Хотя все зависит от стоимости ложного срабатывания (хорошо помеченное как плохое слово) и ложного отрицания (плохое слово проходит). Это должно в конечном итоге определять, насколько агрессивны или консервативны вы в своей стратегии фильтрации.

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


1

Честно говоря, я бы позволил им вывести слова «обмануть систему» ​​и запретить их, а это только я. Но это также упрощает программирование.

То, что я сделал бы, это реализовать фильтр регулярных выражений, например, так: /[\s]dooby (doo?)[\s]/iили это слово с префиксом в других /[\s]doob(er|ed|est)[\s]/. Это предотвратит фильтрацию слов, таких как предикат, что вполне допустимо, но также потребует знания других вариантов и обновления фактического фильтра, если вы изучите новый. Очевидно, что это все примеры, но вам придется решить, как сделать это самостоятельно.

Я не собираюсь печатать все слова, которые я знаю, не тогда, когда я на самом деле не хочу их знать.


1

Я согласен с бесполезностью субъекта, но если у вас есть , чтобы иметь фильтр, проверить Нин самшит :

Boxwood - это расширение PHP для быстрой замены нескольких слов в тексте. Он поддерживает регистрозависимое и регистрозависимое сопоставление. Требуется, чтобы текст, с которым он работает, был закодирован как UTF-8.

Также см. Этот блог для более подробной информации:

С Boxwood вы можете сделать так, чтобы ваш список поисковых терминов был настолько длинным, насколько вам нужно - алгоритм поиска и замены не становится медленнее с большим количеством слов в списке слов для поиска. Он работает путем создания трех всех поисковых терминов, а затем сканирует текст вашего предмета только один раз, просматривая элементы этого дерева и сравнивая их с символами в вашем тексте. Он поддерживает US-ASCII и UTF-8, регистрозависимое или нечувствительное сопоставление и имеет некоторую логику проверки границ слов, ориентированную на английский язык.


1

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

  1. Фильтр: фоновый сервис, который проверяет черный список, словарь или что-то в этом роде.
  2. Не разрешать анонимный аккаунт
  3. Сообщить о нарушении

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


1

Также в конце игры, но проводил некоторые исследования и наткнулся здесь. Как уже упоминали другие, это почти почти невозможно, если бы это было автоматизировано, но если ваш дизайн / требование может включать в некоторых случаях (но не всегда) человеческие взаимодействия для проверки, является ли это нечестным или нет, вы можете рассмотреть ОД. https://docs.microsoft.com/en-us/azure/cognitive-services/content-moderator/text-moderation-api#profanity - мой текущий выбор по нескольким причинам:

  • Поддерживает много локализации
  • Они продолжают обновлять базу данных, поэтому мне не нужно идти в ногу с последними сленгами или языками (проблема обслуживания)
  • Когда есть высокая вероятность (то есть 90% или более), вы можете просто отрицать это
  • Вы можете наблюдать за категорией, которая вызывает флаг, который может быть или не быть ненормативной лексикой, и может попросить кого-то просмотреть его, чтобы понять, что он является или не профан.

Для меня это было / основано на общедоступной коммерческой службе (ОК, видеоигры), которую другие пользователи могут / увидят имя пользователя, но дизайн требует, чтобы ему пришлось пройти фильтр ненормативной лексики, чтобы отклонить оскорбительное имя пользователя. Грустная часть этого вопроса в том, что классическая проблема «clbuttic», скорее всего, возникнет, поскольку имена пользователей, как правило, состоят из одного слова (до N символов) из нескольких соединенных слов… Опять же, когнитивная служба Microsoft не будет помечать «Assist» как текст. HasProfanity = true, но может указывать высокую вероятность для одной из категорий.

Как ОП спрашивает, а как насчет «$$», вот результат, когда я пропустил его через фильтр: введите описание изображения здеськак вы можете видеть, он определил, что это не нечестно, но имеет высокую вероятность, что это так, поэтому помечает как рекомендации обзора (взаимодействия человека).

Когда вероятность высока, я могу либо вернуться назад: «Извините, это имя уже занято» (даже если это не так), чтобы оно было менее оскорбительным для лиц, не занимающихся цензурой, или что-то еще, если мы не хотим чтобы интегрировать обзор людей или вернуть «Ваше имя пользователя было уведомлено в оперативном отделе эксплуатации, вы можете подождать, пока ваше имя пользователя будет просмотрено и одобрено, или выбрать другое имя пользователя». Или что угодно ...

Кстати, цена / цена на эту услугу для моей цели довольно низкая (как часто меняется имя пользователя?), Но, опять же, для OP, возможно, дизайн требует более интенсивных запросов и, возможно, не идеален для оплаты / подписки на ML-сервисы, или не могут иметь обзор / взаимодействие с человеком. Все зависит от дизайна ... Но если дизайн отвечает всем требованиям, возможно, это может быть решением OP.

Если интересно, могу перечислить минусы в комментарии в будущем.


-2

Фильтры ненормативной лексики - плохая идея. Причина в том, что вы не можете уловить каждое ругательство. Если вы попытаетесь, вы получите ложные срабатывания.

Ловить слова

Скажем так, вы хотите поймать F-Word. Легко, правда? Ну посмотрим.

Вы можете перебрать строку, чтобы найти «ебать». К сожалению, в наши дни люди используют фильтры. Фильтр ненормативной лексики не улавливал "fuk".

Можно попытаться проверить наличие нескольких вариантов написания и вариантов слова, но это снизит производительность вашего кода. Чтобы поймать F-Word, вам нужно искать «fuc», «Fuc», «fuk», «Fuk», «F ***» и т. Д. И этот список можно продолжать и продолжать.

Избежание невинности

Итак, как насчет того, чтобы сделать его без учета регистра и игнорировать пробелы, чтобы он ловил "F u C k"? Это может звучать как хорошая идея, но кто-то может просто обойти фильтр ненормативной лексики с "FUCK"

Вы игнорируете пунктуацию.

Теперь это реальная проблема, так как предложение типа « Черт возьми ! будет воспринимать как "ад" и "как задницу ?" воспринимает как "задницу"

И там уже кучу слов , которые вы должны исключить из фильтра, таких как «Cons синица социологическое загрязнение» , потому что это «синица» в нем.

Люди могут также использовать замещающие слова, такие как «Frack». Вы тоже это блокируете? А как насчет «ручка» для «пенис»? Ваша программа не имеет искусственного интеллекта, чтобы знать, хороша ли строка или нет.

Не используйте ненормативную лексику. Их трудно развивать, и они так же медленны, как ползать.


2
-1 не отвечает на вопрос ОП и в основном является мнением. Есть много допустимых вариантов использования этой утилиты. Например, очистка исходного кода перед аудитом, чтобы компания не смущалась.
davidjmcclelland

-3

Не.

Так как:

  • Clbuttic
  • Ненормативная лексика это не OMG EVIL
  • Ненормативная лексика не может быть эффективно определена
  • Большинство людей, скорее всего, не ценят «защиту» от ненормативной лексики

Изменить: Хотя я согласен с комментатором, который сказал, что «цензура не так», это не характер этого ответа.


90
10 голосов за этот не ответ? Как будто любой, кто хочет отфильтровать ненормативную лексику, должен быть морализатором? Печаль во благо. Это правильный вопрос, и язвительные ответы не должны быть вознаграждены. -1.
Клюге

12
@Kludge: Вы единственный, кто сказал «морализирующий полусмысленности», на самом деле я ничего не сказал о моральной природе применения фильтра ненормативной лексики вообще. Митч привел одну из причин, по которой я сказал «нет», и это не изворотливая поездка. Иногда "не" является правильным ответом на "как я ...?" [продолжение]
век

2
@eyelidlessness: Возможно, вы правы, что я слишком много прочитал в вашем ответе из одного слова. Но так как вы не уточнили, я не могу сказать, были ли ваши возражения моральными или техническими. Я признаю, что устал от комментариев «цензура в любой форме - это плохо».
Клюге

5
-1. «Не» не является правильным ответом независимо от моральных или технических вопросов. Есть много случаев, когда совершенно уместно фильтровать контент в зависимости от характера контента. Представьте себе интернет-магазин по продаже женского нижнего белья и функции «Отзывы». Вы действительно хотите, чтобы мальчики-подростки засоряли ваш сайт мусором? Конечно нет. И, может быть, слишком громоздко иметь процесс одобрения человеком. Простой фильтр для запрета отзывов с мусором - это хорошо.
pspahn

3
@pspahn, «не» - это правильный ответ на любой вопрос, требующий решения не той проблемы. Есть, конечно, допустимые случаи, когда контент должен модерироваться, но «фильтр ненормативной лексики» это не так.
век
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.