Як ви реалізуєте хороший нецензурний фільтр?


208

Багатьом з нас потрібно мати справу з введенням користувача, пошуковими запитами та ситуаціями, коли текст введення потенційно може містити нецензурну лексику або небажану мову. Часто це потрібно відфільтрувати.

Де можна знайти хороший список лайливих слів різними мовами та діалектами?

Чи доступні API-джерела для джерел, які містять хороші списки? Або, можливо, API, який просто говорить "так це чисто" або "ні, це не брудно" з деякими параметрами?

Які існують хороші методи, коли можна наздогнати людей, які намагаються обдурити систему, як-от $$, azz або a55?

Бонусні бали, якщо ви пропонуєте рішення для PHP. :)

Редагувати: відповідь на відповіді, які говорять, просто уникайте програмного питання:

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

Тож я справді маю на увазі спосіб з’ясувати один маркер брудним чи ні, а потім просто заборонити його. Я б не заважав запобігти таким настроям, як цілком весела посилання на жирафа з довгими шиями. Нічого, що ти можеш там зробити. :)


12
Прикро, що всі найвищі відповіді - це екзистенціальні та дефектистські відхилення від завдання програмування. Коли обчислювальні служби "кіборгів", такі як Механічний турк, набирають ваги, і майже все програмне забезпечення стає соціальним, важливіше, ніж будь-коли, мати евристичний вміст з червоним прапором і доводити його до відома модератора!
JasonSmith

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

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

Ще однією пропозицією буде НЕ забороняти ці слова, а реєструвати користувачів, які їх використовують. Якщо користувач / IP отримує більше 2, 3 або що завгодно, то заблокуйте цю особу. Не дурно захищений, але я думаю, що набагато незручніше заблокувати і змінити користувача / IP / і те й інше, ніж писати "пухнастий білий зайчик" замість "кицька". Частина, користувачі не знають, ЩО слова чи вирази вони не можуть використовувати, тому вони не можуть просто так легко відгадати різні погані слова, як їх забороняють.
Francisco Presencia

1
Фільтри непристойності - це погана ідея. Дуже важко розрізнити того, хто намагається обдурити систему ("Зворожити тебе!") І хтось законно говорить про щось цілком підходяще ("Мені подобається шоколадне
помадка

Відповіді:


177

Фільтри непристойності: погана ідея чи неймовірно заважає погана ідея?

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

Підсумок: Зрештою, для будь-якої системи, яку ви впроваджуєте, абсолютно немає заміни людському огляду (незалежно від того, будь ласка, будь-який інший). Не соромтеся застосувати рудиментарний інструмент для позбавлення від драйву, але для визначеного троля вам потрібно мати підхід на основі не алгоритму.

Система, яка знімає анонімність і вводить підзвітність (те, що Stack Overflow добре справляється), також корисна, особливо для того, щоб допомогти боротися з ПОДАРУНОК Джона Габріеля

Ви також запитали, де ви можете отримати списки нецензурних ознак, щоб розпочати роботу - один проект з відкритим кодом, який слід перевірити, є Dansguardian - ознайомтеся з вихідним кодом списків ненормативної лексики за замовчуванням. Існує також додатковий список сторонніх фраз, який ви можете завантажити для проксі-сервера, який може стати корисною для вас.

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

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

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

або preg_replace (), щоб видалити їх.

Ви також можете завантажувати ці функції в масиви, а не в один довгий регулярний вираз, а для довгих списків слів це може бути більш керованим. Дивіться у preg_replace () кілька добрих прикладів того, як масиви можна гнучко використовувати.

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

Ви також додали: " Отримання списку слів в першу чергу - це справжнє питання ". - Окрім деяких попередніх посилань на Дансгаурді, вам може бути корисний цей .zip з 458 слів.


@JPLemme: Так, так - я мав би потім додати [sic], оскільки саме так написав Етвуд. :)
HanClinto

"Клубний пінгвін" додає сотні записів у свій фільтр профанації щодня : raphkoster.com/2008/05/09/…
Френк Фармер

6
Обмежувач слів навколо ваших варіантів регулярних виразів запобігає помилковій помилці
cjk

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

1
Якщо ви хочете почути історію "Пухнастого білого зайчика" з уст прославленого коня, зараз це епізод подкасту: socialmediaclarity.tumblr.com/post/70499341079/…
F. Randall Farmer

44

Хоча я знаю, що це питання досить старе, але це питання, яке часто зустрічається ...

Існує і причина, і чітка потреба у нецензурних фільтрах (див. Запис у Вікіпедії тут ), але вони часто не відповідають 100% точності з дуже чітких причин; Контекст і точність .

Це (повністю) залежить від того, чого ви намагаєтеся досягти - якнайбільш просто, ви, мабуть, намагаєтесь прикрити " сім брудних слів ", а потім деякі ... Деяким підприємствам потрібно відфільтрувати найосновніші ненормативні лекції: basic лаяти слова, URL-адреси чи навіть особисту інформацію тощо, але інші повинні запобігати незаконному іменуванню облікового запису (Xbox Live - приклад) або багато іншого ...

Вміст, створений користувачем, не просто містить потенційні лайливі слова, він також може містити образливі посилання на:

  • Статеві акти
  • Сексуальна орієнтація
  • Релігія
  • Етнічність
  • І т.д. ...

І, можливо, на декількох мовах. На сьогодні Shutterstock розробив основні списки брудних слів на 10 мовах, але він все ще є основним і дуже орієнтований на їхні "теги" потреби. В Інтернеті є ряд інших списків.

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

Створюючи фільтр, потрібно враховувати наступні елементи та те, як вони стосуються вашого проекту:

  • Слова / фрази
  • Скорочення (FOAD / LMFAO тощо)
  • Помилкові позитиви (слова, місця та назви типу "mishit", "scunthorpe" та "titsworth")
  • URL-адреси (порно-сайти очевидна ціль)
  • Особиста інформація (електронна адреса, адреса, телефон тощо - якщо це можливо)
  • Вибір мови (зазвичай англійська за замовчуванням)
  • Поміркованість (як, якщо взагалі, ви можете взаємодіяти з створеним користувачем вмістом і що з ним робити)

Ви можете легко створити фільтр нецензурної лексики, який фіксує 90% + нецензурні лексики, але ви ніколи не потрапите на 100%. Це просто неможливо. Чим ближче ви хочете досягти 100%, тим важче стає ... Створюючи складний механізм профанації в минулому, який стосувався більше ніж 500 000 повідомлень у реальному часі, я пропоную наступну пораду:

Основний фільтр передбачає:

  • Складання списку застосовних ненормативних даних
  • Розробка методу поводження з похідними ненормативних лексик

Помірно складний філер включатиме: (Окрім базового фільтра):

  • Використання складного узгодження шаблону для боротьби з розширеними похідними (з використанням розширеного регулярного вираження)
  • Робота з Leetspeak (l33t)
  • Справа з помилковими позитивами

Складний фільтр передбачає ряд наступних (Окрім помірного фільтра):

  • Білі списки та чорні списки
  • Наївна байєсівська фільтрація виводів фраз / термінів
  • Функції Soundex (де слово звучить як інше)
  • Відстань Левенштейна
  • Стерління
  • Людські модератори, які допомагають керувати двигуном фільтрації, щоб навчитися на прикладі чи там, де збіги недостатньо точні без настанов (система самоврядування / постійно вдосконалюється)
  • Можливо, якась форма двигуна ШІ

28

Я не знаю жодної хорошої бібліотеки для цього, але що б ви не зробили, переконайтеся, що ви помиляєтесь у напрямку пропускання речей. Я мав справу з системами, які не дозволяють мені використовувати "mpassell" як ім'я користувача, оскільки він містить "ass" як підрядку. Це чудовий спосіб відчужувати користувачів!


17
або забороняє "кабіну" в грі на літаючих космічних кораблях
Сіньхан

24

Під час мого співбесіди у мене компанія CTO, яка опитувала мене, випробувала слово / веб-гру, яку я написав на Java. Зі списку слів у всьому словнику англійської мови в Оксфорді, що було першим словом, який придумав?

Звичайно, найбільш недобре слово в англійській мові.

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

Для вашого конкретного випадку, я думаю, що порівняння пошуку з реальними словами звучить як шлях до списку слів. Альтернативні стилі / пунктуація вимагають трохи більше роботи, але я сумніваюся, що користувачі будуть використовувати це досить часто, щоб викликати проблему.


8
Поза темою, але що найголовніше? Я завжди вважав це словом c або n роком, але я вважаю, що люди думають, що це слово f
Jeff

2
"Я сумніваюся, що користувачі будуть використовувати це досить часто, щоб бути проблемою" Залишайте надію в живих. Як тільки користувачі натрапляють на фільтр, вони працюватимуть над пошуком способів обходу. Це може бути таким же простим, як заміна букв цифрами на непарне розміщення пробілів тощо).
BryanH

21

система фільтрації нецензурної лексики ніколи не буде ідеальною, навіть якщо програміст знаходиться в стані безпеки і бути в курсі всіх ню розробок

але це означає, що будь-який список "неслухняних слів", ймовірно, буде таким же, як і будь-який інший список, оскільки основна проблема - розуміння мови яке в значній мірі нерозв'язне з сучасними технологіями

Отже, єдине практичне рішення - це подвійне:

  1. будьте готові часто оновлювати свій словник
  2. найміть редактора людини для виправлення помилкових позитивних результатів (наприклад, "clbuttic" замість "classic") та помилкових негативів (ой, пропустив один!)

1
Просто виявіть слово з пробілами в обидві сторони, повна зупинка після, ні?
Девід Д

1
H3ll ніхто не чоловік, який працює лише для самих тривіальних випадків; тут ми маємо справу з людьми, і вони досить розумні :)
Стівен А. Лоу

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 відхилить відгуки через погані слова.

Чому? Тому що німецьке слово "was" - це "війна", а "war" - в словнику 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 ​​ніколи не мав на меті відфільтрувати розмову l33t . Я не рекомендую намагатися фільтрувати це, оскільки це програшний бій. Фільтр нецензурної лексики, який я опублікував, "створений для того, щоб дозволити користувачам" Входити "в фільтрацію нецензурної лексики". Це означає, що його найкраще використовувати на сайті, який за промовчанням дозволяє нецензурну лексику. Якщо ви хочете відфільтрувати 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 , -й, тлх, тр, ж.

Доступні параметри дампа MySQL, 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]/. Це завадить фільтрувати такі слова, як assuaged, що є абсолютно дійсним, але також вимагатиме знання інших варіантів та оновлення фактичного фільтра, якщо ви вивчите новий. Очевидно, що це все приклади, але вам доведеться вирішити, як це зробити самостійно.

Я не збираюся набирати всі слова, які я знаю, не тоді, коли я насправді не хочу їх знати.


1

Я погоджуюся з марністю теми, але якщо у вас є фільтр, перегляньте самшит Нінга :

Boxwood - розширення PHP для швидкої заміни декількох слів у фрагменті тексту. Він підтримує відповідність регістру та чутливості до регістру. Це вимагає, щоб текст, над яким він працює, кодувався як UTF-8.

Також дивіться цю публікацію в блозі для отримання більш детальної інформації:

За допомогою Boxwood ви можете мати список пошукових термінів на скільки завгодно завгодно - алгоритм пошуку та заміни не повільніше, а більше слів у списку слів шукати. Це працює, будуючи трійку всіх пошукових термінів, а потім лише один раз сканує ваш предметний текст, знижуючи елементи трійки та порівнюючи їх із символами тексту. Він підтримує US-ASCII та UTF-8, залежно від регістру чи нечутливого відповідності, і має деяку логіку перевірки кордонів, орієнтованих на англійську мову.


1

Я зробив висновок, що для створення гарного фільтра профанації нам потрібні 3 основні компоненти, або, принаймні, це те, що я збираюся робити. Це вони:

  1. Фільтр: фонова служба, яка підтверджує чорний список, словник чи щось подібне.
  2. Не дозволити анонімний рахунок
  3. Повідомити про зловживання

Бонус, це буде якось винагородити тих, хто сприяє точним зловживанням журналістами та покарає порушника, наприклад, призупинить їхні рахунки.


1

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

  • Підтримує багато локалізації
  • Вони постійно оновлюють базу даних, тому мені не доведеться бути в курсі останніх сленгів чи мов (проблема технічного обслуговування)
  • Якщо є велика ймовірність (тобто 90% або більше), ви можете просто заперечити це прагматично
  • Ви можете спостерігати за категорією, яка спричиняє прапор, який може бути, а може і не бути нецензурним, і може хтось перегляне його, щоб навчити, що він є чи не є нечестивим.

Для моєї потреби це було / ґрунтується на загальнодоступній комерційній службі (ОК, відеоігри), яку інші користувачі можуть / побачать ім'ям користувача, але дизайн вимагає, щоб він мав пройти фільтр профанації, щоб відхилити образливе ім'я користувача. Сумна частина цього питання про класичний "чіткий" випуск, швидше за все, відбудеться, оскільки імена користувачів - це звичайно одне слово (до N символів). Іноді кілька об'єднаних слів ... Знову пізнавальна служба Microsoft не позначить "Assist" як Text. HasProfanity = вірно, але може позначити одну з категорій ймовірність високої.

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

Коли ймовірність велика, я можу або повернутись назад "Вибачте, це ім'я вже прийнято" (навіть якщо це не так), щоб воно було менш образливим для антицензурних осіб або щось таке, якщо ми не хочемо щоб інтегрувати людський огляд або повернути "Ваше ім'я користувача було повідомлено у відділ роботи в реальному часі, ви можете зачекати, коли ваше ім'я користувача буде переглянуто та затверджено, або вибрати інше ім'я користувача". Або що завгодно ...

До речі, ціна / ціна на цю послугу є досить низькою для моєї мети (як часто змінюється ім’я користувача?), Але знову ж таки, для ОП, можливо, дизайн вимагає більш інтенсивних запитів і може не бути ідеальним для оплати / підписки на ML-послуги або не можуть мати огляд / взаємодію з людиною. Все залежить від дизайну ... Але якщо дизайн не відповідає законопроекту, можливо, це може бути рішенням ОП.

Якщо вам цікаво, я можу перерахувати мінуси у коментарі в майбутньому.


-2

Фільтри непристойності - це погана ідея. Причина полягає в тому, що ви не можете зловити кожне лаяння слова. Якщо ви спробуєте, ви отримаєте помилкові позитиви.

Ловля слів

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

Ви можете провести цикл через рядок, щоб знайти "ебать". На жаль, люди сьогодні обманюють фільтри. Фільтр нецензурної лексики не взяв "фук".

Можна спробувати перевірити численні написання та варіанти слова, але це уповільнить продуктивність вашого коду. Щоб зловити F-Word, потрібно шукати "fuc", "Fuc", "fuk", "Fuk", "F ***" і т. Д. І список продовжується і далі.

Уникнення невинності

Гаразд, а як же зробити нечутливі до регістру та проігнорувати пробіли, щоб вони вловили "F u C k"? Це може здатися гарною ідеєю, але хтось може просто обійти фільтр нецензурної лексики за допомогою "FUCK"

Ви ігноруєте розділові знаки.

Тепер це справжня проблема, оскільки речення на кшталт " Чорт, о!" підбере як "пекло" і "Wh жопа вгору?" підхоплює як "дупу".

І є купа слів, які вам доведеться виключити з фільтра, наприклад " Мінус титуції", оскільки в ньому є "синиця".

Люди також можуть використовувати слова-замінники, наприклад, "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.