Jak wdrożyć dobry filtr wulgaryzmów?

Wielu z nas musi radzić sobie z wprowadzaniem użytkowników, zapytaniami i sytuacjami, w których tekst wejściowy może potencjalnie zawierać wulgaryzmy lub niepożądany język. Często trzeba to odfiltrować.

Gdzie można znaleźć dobrą listę przekleństw w różnych językach i dialektach?

Czy istnieją API dostępne dla źródeł zawierających dobre listy? A może API, które po prostu mówi "tak, to jest czyste" lub "nie, to jest brudne" z niektórymi parametrami?

Jakie są dobre metody łapania ludzi próbujących oszukać system, jak$$, azz lub a55?

Punkty bonusowe jeśli oferujesz rozwiązania dla PHP. :)

Edit: odpowiedź na odpowiedzi, które mówią po prostu uniknąć problemu programowego:

Myślę, że jest miejsce na tego rodzaju filtr, gdy na przykład użytkownik może użyć publicznego wyszukiwania obrazów, aby znaleźć zdjęcia, które zostaną dodane do wrażliwej puli społeczności. Jeśli mogą szukać "penisa", prawdopodobnie dostaną wiele zdjęć, tak. Jeśli my nie chcę zdjęć tego, to zapobieganie słowu jako wyszukiwanemu terminowi jest dobrym strażnikiem, choć co prawda nie jest niezawodną metodą. Uzyskanie listy słów na pierwszym miejscu jest prawdziwym pytaniem.

Więc naprawdę mam na myśli sposób, aby dowiedzieć się, że pojedynczy token jest brudny lub nie, a następnie po prostu go zablokować. Nie zawracałbym sobie głowy zapobieganiem takim sentymentom jak przezabawne odniesienie do "żyrafy z długimi szyjkami". Nic nie możesz zrobić. :)

Author: codeforester, 2008-11-07

20 answers

Filtry nieprzyzwoite: zły pomysł, czy niesłychanie zły pomysł?

Nie można również zapomnieć nieopisanej historii SpeedChat Toontown , gdzie nawet użycie "białej listy bezpiecznych słów" spowodowało, że 14-latek szybko obejrzał go z: "chcę wsadzić moją długonogą żyrafę w Twojego puszystego białego króliczka."

Podsumowując: ostatecznie, dla każdego systemu, który wdrażasz, nie ma absolutnie żadnego substytutu ludzkiej recenzji (czy to peer, czy inaczej). Nie krępuj się zaimplementować podstawowego narzędzia, aby pozbyć się drive-by, ale dla zdeterminowanego trolla, absolutnie musisz mieć podejście nie oparte na algorytmie.

System, który usuwa anonimowość i wprowadza odpowiedzialność (coś, co Stack Overflow robi dobrze), jest również pomocny, szczególnie w walce z G. I. F. T. Johna Gabriela

Zapytałeś również, gdzie możesz uzyskać listy wulgaryzmów , aby zacząć - jednym z projektów open-source do sprawdzenia jest Dansguardian -- Sprawdź kod źródłowy ich domyślnych list wulgaryzmów. Istnieje również dodatkowa lista wyrażeń stron trzecich , którą możesz pobrać dla proxy, która może być dla Ciebie przydatna.

Edit w odpowiedzi na pytanie edit: Dzięki za wyjaśnienie co próbujesz zrobić. W takim przypadku, jeśli po prostu próbujesz zrobić prosty filtr słów, istnieją dwa sposoby, aby to zrobić. Jednym z nich jest utworzenie pojedynczego długiego wyrażenia regularnego ze wszystkimi zakazane zwroty, które chcesz cenzurować, i po prostu zrobić regex znaleźć / zastąpić z nim. A regex like:

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

I uruchom go na swoim łańcuchu wejściowym za pomocą preg_match () , aby sprawdzić trafienie,

Lub preg_replace () aby je usunąć.

Można również załadować te funkcje za pomocą tablic, a nie pojedynczych długich wyrażeń regularnych, a dla długich list słów może to być łatwiejsze do opanowania. Zobacz preg_replace () dla kilku dobrych przykładów jak tablice mogą być stosowany elastycznie.

Aby uzyskać dodatkowe przykłady programowania PHP, zajrzyj na tę stronę dla nieco zaawansowanej klasy generycznej do filtrowania słów, które * ' s out środkowych liter ze cenzurowanych słów, i to poprzednie pytanie o przepełnienie stosu , które również ma przykład PHP (główną cenną częścią jest podejście filtrowane słowo oparte na SQL - kompensator Leet-speak może zostać pominięty, jeśli uznasz go za niepotrzebny).

Dodałeś także: " otrzymujesz listę słów na pierwszym miejscu jest prawdziwe pytanie. " -- oprócz niektórych poprzednich linków Dansgaurdian, możesz znaleźć to przydatne .zip z 458 słów pomocnych.

 165
Author: HanClinto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:17

Chociaż wiem, że to pytanie jest dość stare, ale jest to powszechnie występujące pytanie...

Istnieje zarówno powód, jak i wyraźna potrzeba filtrów wulgaryzmów( Zobacz wpis w Wikipedii tutaj), ale często nie są one w 100% dokładne z bardzo różnych powodów; kontekst i dokładność .

To zależy (w całości) od tego, co próbujesz osiągnąć - w najbardziej podstawowym, prawdopodobnie starasz się pokryć "siedem brudnych słów", a następnie niektóre... Niektóre firmy muszą filtrować najbardziej podstawowe wulgaryzmy: podstawowe przekleństwa, adresy URL, a nawet dane osobowe itp., ale inne muszą zapobiegać nielegalnemu nazewnictwu kont (przykładem jest Xbox live) lub znacznie więcej...

Treści generowane przez użytkowników nie zawierają tylko potencjalnych przekleństw, mogą również zawierać obraźliwe odniesienia do:

  • akty seksualne
  • orientacja seksualna
  • Religia
  • pochodzenie etniczne
  • itd...

I potencjalnie, w wielu językach. Shutterstock opracował podstawowe listy dirty-words w 10 językach do tej pory, ale nadal jest podstawowy i bardzo zorientowany na ich potrzeby "tagowania". Istnieje wiele innych list dostępnych w Internecie.

Zgadzam się z przyjętą odpowiedzią, że nie jest to zdefiniowana Nauka i jako język jest ciągle ewoluującym wyzwaniem, ale takim, w którym wskaźnik połowu 90% jest lepszy niż 0%. To zależy wyłącznie od twoich celów - co próbujesz osiągnąć, poziom wsparcia masz i jak ważne jest, aby usunąć profanacje różnych typów.

Budując filtr, musisz wziąć pod uwagę następujące elementy i jak odnoszą się one do twojego projektu:

  • słowa / zwroty
  • Akronimy (FOAD / LMFAO etc)
  • W 2007 roku, po raz pierwszy w historii, został wybrany do Izby Gmin.]} to strona internetowa, w której znajdziesz darmowe filmy porno.]}
  • Dane Osobowe (email, adres, telefon itp. - Jeśli dotyczy)
  • wybór języka (zwykle domyślnie angielski)
  • [17]} Moderacja (jak, jeśli w ogóle, możesz wchodzić w interakcje z treściami generowanymi przez użytkowników i co możesz z nimi zrobić) [18]}

Możesz łatwo zbudować filtr wulgaryzmów, który przechwytuje 90%+ wulgaryzmów, ale nigdy nie osiągniesz 100%. To niemożliwe. Im bliżej chcesz dostać się do 100%, tym trudniej... Po zbudowaniu w przeszłości złożonego silnika wulgaryzmów, który zajmował się ponad 500K wiadomości w czasie rzeczywistym dziennie, proponuję następującą radę:

Podstawowy filtr obejmowałby:

  • Tworzenie listy obowiązujących profanacji
  • opracowanie metody radzenia sobie z derywacjami profanacji

Średnio skomplikowany filer wymagałby, (oprócz podstawowego filtra):

  • Korzystanie z kompleksowego dopasowania wzorców do obsługi rozszerzonych derywacji (za pomocą zaawansowanych regex)
  • radzenie sobie z Leetspeak (l33t)
  • radzenie sobie z false positives

Filtr złożony obejmowałby szereg następujących (oprócz filtra umiarkowanego):

  • Białe listy i czarne listy
  • naiwne wnioskowanie bayesowskie filtrowanie fraz/terminów
  • Soundex funkcje (gdzie słowo brzmi jak inne)
  • Levenshtein odległość
  • Stemming
  • [17]}Moderatorzy, którzy pomagają w kierowaniu silnikiem filtrującym, aby uczyć się na przykładach lub tam, gdzie mecze nie są wystarczająco dokładne bez wskazówek (system samodoskonalenia się/ciągłego doskonalenia) {18]}
  • być może jakaś forma silnika si
 37
Author: nickhar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-19 05:42:52

Nie znam żadnych dobrych bibliotek do tego, ale cokolwiek robisz, upewnij się, że błądzisz w kierunku przepuszczania rzeczy. Miałem do czynienia z systemami, które nie pozwalają mi używać " mpassell "jako nazwy użytkownika, ponieważ zawiera" ass " jako podłańcuch. To świetny sposób na zrażenie użytkowników!

 24
Author: Matt Passell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-07 20:26:00

Podczas rozmowy kwalifikacyjnej moja firma CTO, która przeprowadzała ze mną rozmowę, wypróbowała grę słowno-internetową, którą napisałem w Javie. Z listy słów całego Oxford English dictionary, jakie było pierwsze słowo, które przyszło do odgadnięcia?

Oczywiście, najbardziej obrzydliwe słowo w języku angielskim.

Jakoś dostałem ofertę pracy, ale potem namierzyłem listę słów wulgaryzmów (nie W przeciwieństwie do tej) i napisałem szybki skrypt do generowania nowego słownika bez wszystkich złe słowa (Nawet nie trzeba patrzeć na listę).

Dla Twojego konkretnego przypadku, myślę, że porównywanie wyszukiwania do prawdziwych słów brzmi jak sposób, aby przejść z listą słów takich jak ta. Alternatywne style / interpunkcja wymagają nieco więcej pracy, ale wątpię, aby użytkownicy używali tego wystarczająco często, aby być problemem.

 23
Author: Matthew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-07 22:36:23

System filtrowania wulgaryzmów nigdy nie będzie doskonały, nawet jeśli programista jest zarozumiały i śledzi wszystkie nagie wydarzenia

To powiedziawszy, każda lista "niegrzecznych słów" może działać tak dobrze, jak każda inna lista, ponieważ podstawowym problemem jest rozumienie języka, które jest dość trudne do rozwiązania w obecnej technologii

Więc jedyne praktyczne rozwiązanie jest dwojakie:

  1. bądź przygotowany na częste aktualizowanie słownika
  2. wynajmij a ludzki edytor do korygowania fałszywych alarmów (np. " clbuttic "zamiast" classic") i fałszywych negatywów (oops! przegapiłem jeden!)
 21
Author: Steven A. Lowe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-24 20:49:48
 13
Author: Tim Cavanaugh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-07 20:27:24

Jedynym sposobem, aby zapobiec obraźliwym wejściom użytkowników, jest zapobieganie wszelkim wejściom użytkowników.

Jeśli nalegasz na umożliwienie wprowadzania użytkowników i potrzebujesz moderacji, włącz moderatorów ludzkich.

 12
Author: Axel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-07 20:42:39

Jeśli chodzi o podpytanie" trick the system", możesz sobie z tym poradzić, normalizując zarówno listę" złych słów", jak i wprowadzony przez użytkownika tekst przed wykonaniem wyszukiwania. na przykład, użyj serii wyrażeń regularnych (lub tr jeśli PHP je posiada), aby przekonwertować [z$5] na "s", [4@] do " a " itp. następnie porównaj znormalizowaną listę "złych słów" z znormalizowanym tekstem. Zauważ, że normalizacja może potencjalnie prowadzić do dodatkowych fałszywych alarmów, chociaż nie mogę myśleć o żadnych rzeczywistych przypadkach w chwila.

Większym wyzwaniem jest wymyślenie czegoś, co pozwoli ludziom zacytować "pióro jest potężniejsze niż miecz", blokując jednocześnie "p E n i s".

 7
Author: Dave Sherohman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-08 01:35:13

Uważaj na problemy z lokalizacją: to, co jest przekleństwem w jednym języku, może być zupełnie normalnym słowem w innym.

Jeden z obecnych przykładów: ebay wykorzystuje podejście słownikowe do filtrowania "złych słów"od opinii. Jeśli spróbujesz wprowadzić niemieckie tłumaczenie "to była doskonała transakcja" ("das war eine perfekte Transaktion"), ebay odrzuci opinie z powodu złych słów.

Dlaczego? Ponieważ niemieckie słowo " było "to " wojna", a "wojna" jest w słowniku ebay " zły słowa".

Więc uważaj na problemy z lokalizacją.

 7
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-27 12:55:55

Jeśli możesz zrobić coś takiego jak Digg / Stackoverflow, gdzie użytkownicy mogą obniżyć / oznaczyć nieprzyzwoite treści... zrób to.

Następnie wszystko, co musisz zrobić, to przejrzeć "niegrzecznych" użytkowników i zablokować ich, jeśli łamią zasady.

 6
Author: scunliffe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-07 20:46:59

Jestem trochę spóźniony na imprezę, ale mam rozwiązanie, które może zadziałać dla niektórych, którzy to czytają. Jest w javascript zamiast php, ale jest ku temu ważny powód.

Pełne ujawnienie, napisałem tę wtyczkę...

W każdym razie.

Podejście, które zastosowałem, polega na umożliwieniu użytkownikowi" wyrażenia zgody " na filtrowanie wulgaryzmów. Zasadniczo wulgaryzmy będą domyślnie dozwolone, ale jeśli moi użytkownicy nie chcą tego czytać, nie muszą. Pomaga to również w przypadku " l33t SP3@K" problem.

Koncepcja jest prosta jQuery plugin, który jest wstrzykiwany przez serwer, jeśli konto klienta umożliwia filtrowanie wulgaryzmów. Stamtąd, to tylko kilka prostych linii, które wymazują przysięgi.

Oto strona demo
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>

Wynik

* * * nie powiedzie się, ale hasło nie będzie

 4
Author: Chase Florell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-19 20:01:53

Zgadzam się z wpisem HanClinto wyżej w tej dyskusji. Zazwyczaj używam wyrażeń regularnych do dopasowywania tekstu wejściowego. I jest to daremny wysiłek, ponieważ, jak pierwotnie wspomniałeś, musisz wyraźnie uwzględnić każdą Sztuczną formę pisania popularną w sieci na liście "zablokowanych".

Na marginesie, podczas gdy inni debatują nad etyką cenzury, muszę się zgodzić, że jakaś forma jest potrzebna w sieci. Niektórzy ludzie po prostu lubią zamieszczać wulgaryzmy, ponieważ mogą być natychmiast obraźliwe dla dużej grupy ludzi i nie wymaga absolutnie żadnej myśli ze strony autora.

Dziękuję za pomysły.

HanClinto rządzi!

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-24 20:30:20

Gdy już masz dobrą tabelę MYSQL z kilkoma złymi słowami, które chcesz filtrować (zacząłem od jednego z linków w tym wątku), możesz zrobić coś takiego:

$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 />";

Jestem pewien, że istnieje bardziej efektywny sposób, aby zrobić te wszystkie wymiany, ale nie jestem wystarczająco mądry, aby to rozgryźć (i to wydaje się działać dobrze, choć nieefektywnie).

Uważam, że powinieneś pomylić się po stronie zezwalania użytkownikom na rejestrację i używania ludzi do filtrowania i dodawania do tabeli wulgaryzmów zgodnie z wymaganiami. Chociaż wszystko zależy od kosztu fałszywie dodatniego (ok słowo oznaczone jako złe) kontra fałszywie ujemnego (złe słowo przechodzi). To powinno ostatecznie decydować o tym, jak agresywny lub konserwatywny jesteś w swojej strategii filtrowania.

Byłbym również bardzo ostrożny, jeśli chcesz używać symboli wieloznacznych, ponieważ czasami mogą zachowywać się bardziej anonimowo niż zamierzasz.

 2
Author: andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-16 02:33:47

Zebrałem 2200 złych słów w 12 językach: 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 lub CSV opcje są dostępne.

Https://github.com/turalus/openDB

Sugerowałbym wykonanie tego SQL w DB i sprawdzanie za każdym razem, gdy użytkownik coś wprowadza.

 2
Author: Tural Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-03 08:22:10

Szczerze mówiąc, pozwoliłbym im wypuścić słowa "oszukać system" i zbanować je zamiast tego, co tylko ja. Ale także ułatwia programowanie.

Zaimplementowałbym filtr regex w ten sposób: /[\s]dooby (doo?)[\s]/i lub słowo jest poprzedzone innymi, /[\s]doob(er|ed|est)[\s]/. Uniemożliwiłoby to filtrowanie słów takich jak assuaged, co jest doskonale poprawne, ale wymagałoby również znajomości innych wariantów i aktualizacji rzeczywistego filtra, jeśli nauczysz się nowego. Oczywiście są to wszystkie przykłady, ale trzeba aby zdecydować, jak zrobić to samodzielnie.

Nie zamierzam wpisywać wszystkich słów, które znam, nie wtedy, gdy nie chcę ich znać.
 1
Author: Robert K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-07 20:25:28

To tylko prowadzi do problemów. Jednym z moich osobistych doświadczeń z filtrami wulgaryzmów jest czas, w którym zostałem wyrzucony / zbanowany z kanału IRC za to, że wspominałem, że" jechałem przez most do Hancock na kilka godzin " lub coś w tym stylu.

 1
Author: Adam Jaskiewicz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-07 20:37:46

Zgadzam się z bezsensownością tematu, ale jeśli musisz mieć filtr, sprawdź Boxwood :

Boxwood jest rozszerzeniem PHP do szybkiej wymiany wielu słów w tekście. Obsługuje dopasowanie uwzględniające wielkość liter i wielkość liter. Wymaga, aby tekst, na którym działa, był zakodowany jako UTF-8.

Zobacz również ten wpis na blogu po więcej szczegółów:

Z Boxwood, możesz mieć listę wyszukiwanych terminów tak długo, jak chcesz-algorytm wyszukiwania i zastępowania nie staje się wolniejszy z więcej słów na liście słów do szukania. Działa poprzez zbudowanie trie wszystkich wyszukiwanych terminów, a następnie skanuje tekst tematu tylko raz, przechodząc w dół elementów trie i porównując je z znakami w tekście. Obsługuje US-ASCII i UTF-8, dopasowywanie wielkości liter lub niewrażliwe i ma pewne sprawdzanie granic słowa w języku angielskim logika.

 1
Author: Gordon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-30 09:01:18

Doszedłem do wniosku, że aby stworzyć dobry filtr wulgaryzmów, potrzebujemy 3 głównych komponentów, a przynajmniej to zrobię. Są to:

  1. Filtr: usługa w tle, która sprawdza się na czarnej liście, słowniku lub czymś takim.
  2. nie zezwalaj na konto anonimowe
  3. Zgłoś nadużycie

Bonus, będzie to nagrodzenie w jakiś sposób tych, którzy przyczyniają się do rzetelnego reporterów nadużyć i karać sprawcę, np. zawiesić swoje konta.

 1
Author: Jaider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-22 14:27:16

Nie.

Ponieważ:

  • Clbuttic
  • wulgaryzmy to nie OMG zło
  • wulgaryzmy nie mogą być skutecznie zdefiniowane
  • większość ludzi prawdopodobnie nie docenia bycia "chronionym" przed wulgaryzmami

Edit: chociaż zgadzam się z komentatorem, który powiedział "cenzura jest zła", to nie taka jest natura tej odpowiedzi.

 -1
Author: eyelidlessness,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-16 03:20:11

Filtry wulgaryzmów to zły pomysł.Powodem jest to, że nie możesz złapać każdego przekleństwa. Jeśli spróbujesz, dostaniesz fałszywych alarmów.

Łapanie Słów

Powiedzmy, że chcesz złapać słowo na K. Łatwe, prawda? Zobaczmy.

Możesz zapętlić łańcuch, aby znaleźć "fuck."Niestety, ludzie oszukują filtry w dzisiejszych czasach. Filtr wulgaryzmów nie wychwycił " fuk."

Można spróbować sprawdzić wiele pisowni i wariantów tego słowa, Ale to spowolni obniżyć wydajność Twojego kodu. Aby złapać słowo na F, musisz szukać "fuc"," Fuc"," fuk"," Fuk"," F*** " itp. Lista jest długa i długa.

Unikanie Niewinności

Okay, więc co powiesz na to, żeby było niewrażliwe na wielkość liter i ignorować spacje, żeby wychwyciło "F u C k"? To może brzmieć jak dobry pomysł, ale ktoś może po prostu ominąć filtr wulgaryzmów za pomocą "F. U. C. K." [3]}

Ignorujesz interpunkcję.

Teraz to jest prawdziwy problem, ponieważ zdanie w stylu " Piekło o, tam!"Wola pick up jako "hell" I " Whass up?"łapie jak dupa"."

I jest kilka słów, które musisz wykluczyć z filtra, takich jak "Cons tit ution", ponieważ jest w nim "tit".

Ludzie mogą również używać słów zastępczych, takich jak " Frack."To też blokujesz? A "długopis" jak "penis"? Twój program nie ma sztucznej inteligencji, aby wiedzieć, czy ciąg jest dobry czy zły.

Nie używaj filtrów wulgaryzmów. Są trudne do rozwinięcia i są powolne jak pełzanie.

 -2
Author: clickbait,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-21 19:52:25