Многим из нас приходится иметь дело с пользовательским вводом, поисковыми запросами и ситуациями, когда вводимый текст потенциально может содержать ненормативную лексику или нежелательную лексику. Часто это нужно отфильтровать.
Где найти хороший список нецензурных слов на разных языках и диалектах?
Доступны ли API для источников, содержащих хорошие списки? Или, может быть, API, который просто говорит «да, это чисто» или «нет, это грязно» с некоторыми параметрами?
Какие есть хорошие методы для поимки людей, пытающихся обмануть систему, например, $$, azz или a55?
Бонусные баллы, если вы предлагаете решения для PHP. :)
Я думаю, что есть место для такого фильтра, когда, например, пользователь может использовать общедоступный поиск изображений, чтобы найти изображения, которые будут добавлены в пул конфиденциального сообщества. Если они могут искать «пенис», то, скорее всего, они получат много фотографий, да. Если нам не нужны изображения этого слова, то предотвращение этого слова в качестве поискового запроса - хороший привратник, хотя, по общему признанию, не надежный метод. Получение списка слов в первую очередь - настоящий вопрос.
Итак, я действительно имею в виду способ выяснить, является ли один токен грязным или нет, а затем просто запретить его. Я бы не стал предотвращать такие сантименты, как совершенно веселая отсылка к «длинношеему жирафу». Вы ничего не можете там сделать. :)
Пожалуйста, будьте осторожны с языковым контекстом, особенно если вы используете i18n. Однажды я попытался создать группу Google для курса, который я читал, под названием «Sanal ortamda görselleştirme», что по-турецки означает «Визуализация в виртуальных медиа». Google был достаточно глуп, чтобы отклонить его потому что в названии было слово "анальный". Sanal [tr] = Virtual [en] и Google беззастенчиво обвинили меня в ненормативной лексике! : D Пожалуйста, не позволяйте происходить таким странным вещам.
А как насчет того, чтобы найти слово в испанский? Таким образом можно обойти фильтр изображений Google (если вы локализованы на какой-то другой язык).
Еще одно предложение - НЕ запрещать эти слова, а регистрировать пользователей, которые их используют. Если пользователь / IP получает больше 2, 3 или что угодно, заблокируйте этого человека. Это тоже не надежно, но я думаю, что гораздо неудобнее быть заблокированным и сменить пользователя / IP / обоих, чем писать «пушистый белый кролик» вместо «киска». Отчасти пользователи не знают, КАКИЕ слова или выражения они не могут использовать, поэтому они не могут просто угадывать разные плохие слова так легко, как их забанят.
Фильтры ненормативной лексики - плохая идея. Очень сложно отличить кого-то, пытающегося обмануть систему («Фаджи вам!»), И того, кто законно говорит о чем-то совершенно подходящем («Мне нравится шоколадная помадка»).
pip install -U expletives?
Предлагаю не способствовать тоталитаризму и устроиться на настоящую работу.






Фильтры непристойности: плохая идея или невероятно плохая идея?
Кроме того, нельзя забывать о Нерассказанная история SpeedChat Toontown, где даже использование «белого списка безопасных слов» привело к тому, что 14-летний подросток быстро обошел его с помощью: «Я хочу засунуть своего длинношеего жирафа в твоего пушистого белого кролика».
Итог: В конечном счете, для любой системы, которую вы внедряете, нет абсолютно никакой замены человеческому обзору (будь то коллега или какой-либо другой). Не стесняйтесь реализовать элементарный инструмент, чтобы избавиться от проезжающих мимо машин, но для решительного тролля вам абсолютно необходим подход, не основанный на алгоритмах.
Система, которая удаляет анонимность и вводит подотчетность (что хорошо делает Stack Overflow), также полезна, особенно для борьбы с G.I.F.T. Джона Гэбриэла.
Вы также спросили, где вы можете получить списки ненормативной лексики, чтобы начать работу - один проект с открытым исходным кодом, который стоит проверить, - это Dansguardian - проверьте исходный код для их списков ненормативной лексики по умолчанию. Существует также дополнительный сторонний Список фраз, который вы можете загрузить для прокси, который может оказаться для вас полезным ориентиром.
Отредактируйте в ответ на редактирование вопроса: Спасибо за разъяснение того, что вы пытаетесь сделать. В этом случае, если вы просто пытаетесь сделать простой фильтр слов, есть два способа сделать это. Один из них - создать одно длинное регулярное выражение со всеми запрещенными фразами, которые вы хотите подвергнуть цензуре, и просто выполнить с ним поиск / замену регулярного выражения. Регулярное выражение вроде:
$filterRegex = "(boogers|snot|poop|shucks|argh)"
и запустите его в своей входной строке, используя preg_match () для оптового теста на попадание,
или preg_replace (), чтобы убрать их.
Вы также можете загружать эти функции с помощью массивов, а не одного длинного регулярного выражения, а для длинных списков слов это может быть более управляемым. См. В preg_replace () несколько хороших примеров того, как можно гибко использовать массивы.
Дополнительные примеры программирования PHP см. На этой странице для несколько продвинутый общий класс для фильтрации слов, в котором * центральные буквы от цензурированных слов, и этого предыдущий вопрос о переполнении стека, в котором также есть пример PHP (основная ценная часть - это фильтрованное слово на основе SQL подход - можно обойтись без компенсатора разговора, если вы сочтете его ненужным).
Вы также добавили: «Получение списка слов в первую очередь - настоящий вопрос.» - в дополнение к некоторым из предыдущих дансгаурдовских ссылок, вы можете найти этот удобный .zip из 458 слов, чтобы быть полезным.
@JPLemme: Да, это должно быть - я должен был добавить [sic] потом, так как Этвуд это написал. :)
«Клуб пингвинов» добавляет сотни записей в свой фильтр ненормативной лексики ежедневно: raphkoster.com/2008/05/09/…
Обертка границы слова вокруг ваших параметров регулярного выражения предотвратит ошибку болотный
@ck: Только если вас не беспокоит возможность отфильтровать неправильно написанные слова «F * ckkkk yo 'asssss» :) Я не уверен, что доверяю своим троллям очень точное написание.
Что касается регулярного выражения, не забудьте проверить границы слов и нечувствительность к регистру.
Удобная ревизия вашего регулярного выражения: $filterRegex = '/\b(boogers|snot|poop|shucks|argh)\b/i'; при условии, что вы не хотите блокировать опечатки в таких вещах, как «это не мое правописание,« жирные пальцы ». ;)
Так что вам не нужно ловить: b006ers, Booger, Booger, Booger, Booger или sɹǝbooq.
Если вы хотите услышать историю «Пушистый белый кролик» из уст пресловутой лошади, сейчас это эпизод подкаста: socialmediaclarity.tumblr.com/post/70499341079/…
Не надо.
Потому что:
Обновлено: хотя я согласен с комментатором, который сказал, что «цензура неправильная», это не суть этого ответа.
10 голосов за этот отказ? Как будто всякий, кто хочет отфильтровать ненормативную лексику, должен быть морализирующим недоумком? Печаль во благо. Это правильный вопрос, и язвительные ответы на него не следует вознаграждать. -1.
@Kludge: Ты единственный, кто сказал "морализаторское недоумение", на самом деле я вообще ничего не сказал о моральной природе внедрения фильтра ненормативной лексики. Митч упоминает отчасти причину, по которой я сказал «не надо», и это не язвительный проездной. Иногда «не надо» является правильным ответом на «как мне ...?» [продолжение]
Я думаю, что это один из таких случаев. То, что вы не согласны, - это нормально, но я не думаю, что вам стоит вдаваться в подробности. И если вы хотите спросить Почему, я думаю, этого делать не следует, я буду рад уточнить ответ.
@eyelidlessness: Возможно, вы правы, что я слишком много вложил в ваш односложный ответ. Но так как вы не уточнили, я не могу сказать, были ли ваши возражения моральными или техническими. Признаюсь, я устал от комментариев типа «цензура в любом виде - это плохо».
Почему они тебе надоели? Возможно, вы не согласны, но это вполне законная точка зрения. (Примечание: это нет суть моего ответа.)
-1. «Не делать» не является правильным ответом независимо от моральных или технических проблем. Во многих случаях лучше всего фильтровать контент в зависимости от его характера. Представьте себе сайт электронной коммерции, продающий женское нижнее белье и предлагающий функцию «Отзывы». Вы действительно хотите, чтобы неполовозрелые мальчики засоряли ваш участок мусором? Конечно, нет. И, возможно, это слишком обременительно для утверждения человеком. Простой фильтр для отказа в отзывах с мусором - это хорошо.
@pspahn, «не надо» - это правильный ответ на любой вопрос, в котором нужно найти решение не той проблемы. Конечно, есть допустимые случаи, когда контент следует модерировать, но «фильтр ненормативной лексики» - не то.
Ничего страшного, мы можем не соглашаться. На мой взгляд, если вы пытаетесь модерировать контент, основанный на ненормативной лексике, вам нужен фильтр ненормативной лексики. Я согласен с тем, что фильтры ненормативной лексики не работают много раз и не подходят для определенных сценариев; однако действительно существуют совершенно подходящие сценарии, в которых фильтр ненормативной лексики является правильным ответом.
@eyelidlessness По вашим рассуждениям, ответы на Stack Overflow будут широко открыты для выражения всевозможных мнений о том, что делается в вопросах. Переполнение стека - это ресурс вопросов и ответов, а не дискуссионный форум, и ответы могут быть использованы только чтобы дать ответ (в смысле «решение», а не в смысле «ответа»). Я никогда не предполагал, что оставлю этот биржевой комментарий пользователю с 5-значным представлением, но: Пожалуйста, прочтите страницу О, чтобы лучше понять формат сайта.
В любом случае, это попало в очередь на просмотр LQP и, вероятно, скоро будет удалено.
Честно говоря, я просмотрел другие ответы, и половина из них - мнения, а не реальные ответы. : |
@AdiInbar, я придерживаюсь своей позиции, что есть случаи, когда разумно не делать что-либо, и что это один из них. Есть бесчисленное количество случаев, когда вопрос был задан, а ответ заключался в том, что спрашивающий полностью пошел в неправильном направлении и должен рассмотреть другую реализацию. Единственная причина, по которой это так противоречиво, состоит в том, что ненормативная лексика является спорным.
представьте, что на вашем веб-сайте есть страница с автозаполнением "самых популярных поисковых запросов", и вы показываете "titfuck" в результатах №1. Вот где это полезно.
Честно говоря, я позволил бы им выговорить слова «обмануть систему» и вместо этого запретить их, а это только я. Но это также упрощает программирование.
Что я бы сделал, так это реализовать фильтр регулярных выражений, например: /[\s]dooby (doo?)[\s]/i, или если слово имеет префикс для других, /[\s]doob(er|ed|est)[\s]/. Это предотвратит фильтрацию таких слов, как assuaged, что совершенно верно, но также потребует знания других вариантов и обновления фактического фильтра, если вы изучите новый. Очевидно, это все примеры, но вам придется решить, как это сделать самостоятельно.
Я не собираюсь печатать все слова, которые знаю, когда я действительно не хочу их знать.
Я не знаю хороших библиотек для этого, но что бы вы ни делали, убедитесь, что вы ошибаетесь в направлении пропускания материала. Я имел дело с системами, которые не позволяли мне использовать «mpassell» в качестве имени пользователя, потому что он содержит «ass» в качестве подстроки. Это отличный способ оттолкнуть пользователей!
или запретить "кабину" в игре о летающих космических кораблях
Взгляните на Веб-служба фильтра ненормативной лексики CDYNE
Круто .. но он не поднял (.) (.)
Осторожный. CDYNE больше не обслуживает этот продукт. Вы можете использовать его на свой страх и риск.
URL-адрес проверки Ссылка не работает.
Не надо. Это просто приводит к проблемам. Один из моих личных опытов с фильтрами ненормативной лексики - это время, когда меня выгнали / забанили на IRC-канале за упоминание, что я «направлялся через мост в Хэнкок на пару часов» или что-то в этом роде.
Единственный способ предотвратить оскорбительный ввод пользователя - запретить любой ввод пользователя.
Если вы настаиваете на разрешении ввода пользователем и нуждаетесь в модерации, добавьте модераторов-людей.
Если вы можете сделать что-то вроде Digg / Stackoverflow, где пользователи могут отрицать / отмечать непристойный контент ... сделайте это.
Затем все, что вам нужно сделать, это просмотреть «непослушных» пользователей и заблокировать их, если они нарушат правила.
система фильтрации ненормативной лексики никогда не будет идеальной, даже если программист самоуверен и идет в ногу со всеми обнаженными разработками
Тем не менее, любой список «непристойных словечек», вероятно, будет работать так же хорошо, как и любой другой список, поскольку основная проблема - это понимание языка, которая в значительной степени неразрешима с помощью современных технологий.
Итак, единственное практическое решение двоякое:
Просто найдите слово с пробелами с обеих сторон, точка после него, нет?
H3ll no man, это работает только в самых тривиальных случаях; мы имеем дело с людьми здесь, и они довольно умные :)
Во время моего собеседования технический директор компании, проводивший собеседование со мной, опробовал словесную / веб-игру, которую я написал на Java. Какое слово было угадано первым из списка слов всего оксфордского словаря английского языка?
Конечно, самое нецензурное слово в английском языке.
Каким-то образом я все же получил предложение о работе, но затем я нашел список ненормативной лексики (не в отличие от этого) и написал быстрый скрипт для создания нового словаря без всех плохих слов (даже не просматривая список).
В вашем конкретном случае, я думаю, сравнение поиска с реальными словами звучит так же, как и в случае с подобным списком слов. Альтернативные стили / знаки препинания требуют немного больше работы, но я сомневаюсь, что пользователи будут использовать это достаточно часто, чтобы стать проблемой.
Не по теме, а какое самое нецензурное слово? Я всегда считал это словом c или словом n, но я предполагаю, что люди думают, что слово f
Что касается вашего подвопроса "обмануть систему", вы можете справиться с этим, нормализовав как список "плохих слов", так и введенный пользователем текст перед выполнением поиска. например, используйте ряд регулярных выражений (или tr, если он есть в PHP) для преобразования [z $ 5] в «s», [4 @] в «a» и т. д., затем сравните нормализованный список «плохих слов» с нормализованным текстом. Обратите внимание, что нормализация потенциально может привести к дополнительным ложным срабатываниям, хотя на данный момент я не могу вспомнить каких-либо реальных случаев.
Более сложная задача - придумать что-то, что позволило бы людям цитировать «ручка могущественнее меча», блокируя «пэни».
Не забывайте expert-exchange.com и pen-island.com; эти URL-адреса сайтов когда-то не содержали дефисов.
Я согласен с постом HanClinto выше в этом обсуждении. Обычно я использую регулярные выражения для сопоставления входного текста со строкой. И это тщетное усилие, поскольку, как вы первоначально упомянули, вы должны явно учитывать все уловки, связанные с написанием популярных в сети сообщений в вашем «заблокированном» списке.
Кстати, в то время как другие обсуждают этику цензуры, я должен согласиться с тем, что в сети необходима некоторая форма. Некоторым людям просто нравится публиковать вульгарные сообщения, потому что они могут быть мгновенно оскорбительными для большого количества людей и не требуют абсолютно никаких размышлений со стороны автора.
Спасибо за идеи.
HanClinto рулит!
Остерегайтесь проблем с локализацией: ругательство на одном языке может быть совершенно нормальным словом на другом.
Один из текущих примеров этого: ebay использует словарный подход для фильтрации «плохих слов» из отзывов. Если вы попытаетесь ввести немецкий перевод «это была совершенная транзакция» («das war eine perfekte Transaktion»), ebay отклонит отзыв из-за плохих слов.
Почему? Потому что немецкое слово «был» - это «война», а «война» есть в словаре «плохих слов» ebay.
Так что остерегайтесь проблем с локализацией.
Я согласен с бесполезностью этой темы, но если вам нужен фильтр, посмотрите Ning Самшит:
Boxwood is a PHP extension for fast replacement of multiple words in a piece of text. It supports case-sensitive and case-insensitive matching. It requires that the text it operates on be encoded as UTF-8.
Также см. Это сообщение в блоге для получения более подробной информации:
With Boxwood, you can have your list of search terms be as long as you like -- the search and replace algorithm doesn't get slower with more words on the list of words to look for. It works by building a trie of all the search terms and then scans your subject text just once, walking down elements of the trie and comparing them to characters in your text. It supports US-ASCII and UTF-8, case-sensitive or insensitive matching, and has some English-centric word boundary checking logic.
Если у вас есть хорошая таблица 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 />";
Я уверен, что есть более эффективный способ выполнить все эти замены, но я недостаточно умен, чтобы понять это (и, похоже, это работает нормально, хотя и неэффективно).
Я считаю, что вы должны ошибиться, разрешив пользователям регистрироваться, и использовать людей для фильтрации и добавления в вашу таблицу ненормативной лексики по мере необходимости. Хотя все зависит от стоимости ложного срабатывания (хорошее слово, помеченное как плохое) по сравнению с ложноотрицательным (плохое слово проходит). Это в конечном итоге должно определять, насколько вы агрессивны или консервативны в своей стратегии фильтрации.
Я также был бы очень осторожен, если вы хотите использовать подстановочные знаки, поскольку иногда они могут вести себя более обременительно, чем вы предполагаете.
Я пришел к выводу, что для создания хорошего фильтра ненормативной лексики нам нужны 3 основных компонента, или, по крайней мере, это то, что я собираюсь сделать. Вот они:
В качестве бонуса это будет как-то вознаграждать тех, кто вносит свой вклад, точными репортерами о злоупотреблениях и наказывать преступника, например приостановить действие своих аккаунтов.
Я немного опоздал на вечеринку, но у меня есть решение, которое может сработать для некоторых, кто это прочитает. Он написан на javascript, а не на php, но для этого есть веская причина.
Full disclosure, I wrote this plugin...
В любом случае.
Подход, который я выбрал, заключается в том, чтобы позволить пользователю «соглашаться» на фильтрацию ненормативной лексики. Обычно ненормативная лексика разрешена по умолчанию, но если мои пользователи не хотят ее читать, им и не нужно. Это также помогает с проблемой «l33t sp3 @ k».
Концепция представляет собой простой плагин jquery, который вводится сервером, если учетная запись клиента включает фильтрацию ненормативной лексики. Оттуда это всего лишь пара простых строк, которые затмевают ругательства.
Вот демонстрационная страница
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>
результат
*** will fail but password will not
Вот jsFiddle рабочая демонстрация, сопровождающий этот ответ.
Очень наивно. Не фильтровал a$$
@EmperorAiman никогда не предназначалось для фильтрации l33t говорить. Я не рекомендую пытаться фильтровать это, поскольку это проигрышная битва. Фильтр ненормативной лексики, который я опубликовал, «построен для того, чтобы пользователи могли« соглашаться »на фильтрацию ненормативной лексики». Это означает, что его лучше всего использовать на сайте, где по умолчанию разрешена ненормативная лексика. Если вы хотите отфильтровать a$$, вы добавляете его в список фильтров.
Хотя я знаю, что этот вопрос довольно старый, но это часто встречающийся вопрос ...
Есть как причина, так и явная потребность в фильтрах ненормативной лексики (см. Запись в Википедии здесь), но они часто не обеспечивают 100% точности по очень разным причинам; Контекст и точность.
Это зависит (полностью) от того, чего вы пытаетесь достичь - в основном, вы, вероятно, пытаетесь скрыть "семь грязных слов", а затем некоторые ... Некоторым предприятиям необходимо отфильтровать самую базовую ненормативную лексику: основные нецензурные слова , URL-адреса или даже личная информация и т. д., Но другие должны предотвращать незаконное присвоение имени учетной записи (например, Xbox live) или многое другое ...
Контент, создаваемый пользователями, не только содержит потенциальные нецензурные слова, но также может содержать оскорбительные ссылки на:
И, возможно, на нескольких языках. На сегодняшний день Shutterstock разработал основные списки грязных слов на 10 языках, но он по-прежнему базовый и очень ориентирован на их потребности в «тегировании». В сети есть ряд других списков.
Я согласен с принятым ответом, что это не определенная наука, а язык как - это постоянно развивающийся испытание, но тот, где коэффициент улова 90% лучше, чем 0%. Это зависит исключительно от ваших целей - от того, чего вы пытаетесь достичь, от уровня вашей поддержки и от того, насколько важно удалить ненормативную лексику разного типа.
При создании фильтра необходимо учитывать следующие элементы и их отношение к вашему проекту:
Вы можете легко создать фильтр ненормативной лексики, который улавливает более 90% ненормативной лексики, но вы никогда не достигнете 100%. Это просто невозможно. Чем ближе вы хотите приблизиться к 100%, тем сложнее становится ... Создав в прошлом сложный механизм ненормативной лексики, который обрабатывал более 500 тыс. Сообщений в реальном времени в день, я бы дал следующий совет:
Базовый фильтр будет включать:
Средне сложный фильтр будет включать (в дополнение к базовому фильтру):
Сложный фильтр будет включать в себя ряд из следующих (в дополнение к умеренному фильтру):
Я собрал 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, JSON, XML или CSV.
https://github.com/turalus/openDB
Я предлагаю вам выполнить этот SQL в своей БД и проверять каждый раз, когда пользователь что-то вводит.
Также в конце игры, но провел некоторые исследования и наткнулся здесь. Как отмечали другие, это почти невозможно, если бы это было автоматизировано, но если ваш дизайн / требование может включать в некоторых случаях (но не всегда) человеческое взаимодействие, чтобы проверить, является ли оно оскорбительным или нет, вы можете рассмотреть возможность ML. Сейчас я предпочитаю https://docs.microsoft.com/en-us/azure/cognitive-services/content-moderator/text-moderation-api#profanity по нескольким причинам:
Для меня это было / основано на общедоступном коммерческом сервисе (хорошо, видеоигры), которые другие пользователи могут / будут видеть имя пользователя, но дизайн требует, чтобы он прошел фильтр ненормативной лексики, чтобы отклонить оскорбительное имя пользователя. Печально то, что классическая "clbuttic" проблема, скорее всего, возникнет, поскольку имена пользователей обычно состоят из одного слова (до N символов), иногда из нескольких слов, соединенных друг с другом ... Опять же, когнитивная служба Microsoft не помечает "Assist" как текст. HasProfanity = true, но может отметить высокую вероятность одной из категорий.
Поскольку OP спрашивает, что насчет "$$", вот результат, когда я пропустил его через фильтр:
, как вы можете видеть, он определил, что это не оскорбительно, но имеет высокую вероятность, что это так, поэтому помечает как рекомендации рецензирования (человеческое взаимодействие).
Когда вероятность высока, я могу либо вернуть назад: «Извините, это имя уже занято» (даже если это не так), чтобы оно было менее оскорбительным для лиц, выступающих против цензуры, или что-то еще, если мы не хотим чтобы интегрировать проверку человеком, или верните «Ваше имя пользователя было уведомлено в оперативный отдел, вы можете дождаться, пока ваше имя пользователя будет проверено и одобрено, или выберите другое имя пользователя». Или как там ...
Кстати, стоимость / цена для этой услуги довольно низкая для моей цели (как часто меняется имя пользователя?), Но, опять же, для OP, возможно, дизайн требует более интенсивных запросов и может быть не идеальным для оплаты / подписки на ML-сервисы или не могут иметь пользовательский обзор / взаимодействие. Все зависит от дизайна ... Но если дизайн отвечает всем требованиям, возможно, это может быть решением OP.
Если интересно, могу перечислить минусы в комментарии в будущем.
Жаль, что все главные ответы - экзистенциальные и пораженческие отклонения от задачи программирования. Ввиду того, что «киборгские» вычислительные сервисы, такие как Mechanical Turk, набирают обороты, и почти все программное обеспечение становится социальным, как никогда важно иметь эвристику, чтобы пометить контент и привлечь внимание модератора!