Pozbywanie się wulgaryzmów

0

Siemka.
Jestem na etapie pisania moduły z komentarzami do artykułów w moim serwisie. Aby ograniczyć hołotę chcę nie dopuszczać do używania słów powszechnie uznanych za wulgarne i banować takich trolli.

Moje pytanie jest następujące. Jakie znacie sposoby na wyłapywanie wulgaryzmów z dodanej treści?
Na tę chwilę mam coś takiego, ale nie wydaje mi się to zbyt bystre ani wydajne:

        $brzydkie_slowa = [tablica z mnóstwem brzydkich słów];
        $komentarz = mb_strtoupper($komentarz , 'UTF-8');

        foreach($brzydkie_slowa as $przeklenstwo){
            if(stripos($komentarz , $przeklenstwo) !== false){
               return true;
            }
        }
        return false;
 
0

Nie robiłem nigdy nic takiego ale wydaje się to być dobrym rozwiązaniem jak na początek. Należy jedynie pamiętać o tym żeby w tablicy brzydkie_slowa były wszystkie odmiany tych słów. Gdyby to był jakiś prosty np. system bloga to można dodać coś takiego że autor (strony) musi sam zaakceptować komentarz.

0

Porządnie można to zrobić np. za pomocą wyrażeń regularnych.

1

@Tumeg: Nie widzę sensu pchać się w wyrażenia. Ten sposób można "udoskonalić" sprawdzając jedynie czy początek jest taki sam jak początek danego słowa co zapobiegnie dużej ilości elementów w tablicy (odmiany). Chociaż ma to też wady - np. sprawdzamy część kur algorytm uzna to za wulgaryzm a słowo będzie kura.

0

Witam. Mogę powiedzieć gdzie widziałem zestaw wyrazów wulgarnych jako plik txt co można sobie użyć ?!

w AllPlayer nie wiem czy w każdej wersji ale w starszej sprzed dwóch lat bodajże było w pliku txt

poza tym mając zestaw wyrazów to ja nie miałbym żadnego problemu z ich użyciem w dowolnym zastosowaniu...

być może niezbyt pojąłem zapytania w rzeczywistości właściwie chwilowo tylko chciałem jedynie podzielić się listą wulgaryzmów podaną wyżej w programie polskiego programisty... Dzięki Mu za to bo przynajmniej mi oszczędził trochę pracy...

Zatem pomyślałem, iż warto wskazać namiar na ten wartościowy plik txt ( niezaszyfrowany !!! póki co... )

0
Tumeg napisał(a):

Porządnie można to zrobić np. za pomocą wyrażeń regularnych.

Myślałem o tym, ale raczej mam wątpliwości czy to będzie porządnie. Co to w ogóle znaczy 'porządnie' w tym przypadku? To co mam w tej chwili też jest porządnie bo wyłapie mi każdy wulgaryzm jaki wrzucę w tablicę. Interesuje mnie raczej jak to zoptymalizować.

0

No właśnie - każdy jaki sobie wrzucisz w tablicę, a co jeśli na środku popularnego słowa na k wstawię sobie gwiazdkę ?

0

IMO jak jest wulgaryzmy zakropkowany to nic takiego.

0

@furious programming od takich kwiatków to trzeba mieć już moderatora. Nie wiem czy uda się napisać takie wyrażenie które wyłapie mi ch** czy mat****bca :)

0

Ten mechanizm jest spoko system wczesnego wykrywania. Warto dodać opcję dla moderatora która umożliwia rozszerzanie słownika słów wulgarnych w trakcie moderowania.

Jeżeli masz system reputacji, jak np. na tym forum, to możesz przyznawać punkty za poprawnie zgłoszone przez użytkowników posty z wulgaryzmami. Wtedy dużo szybciej odnajdziesz takie posty i zbanujesz autorów.

0

Wulgaryzmów jest za dużo, żeby skutecznie pozbywać się wszystkich, do tego ciągle ktoś wymyśla nowe :]

Na część przekleństw można napisać regexa - wszystkie słowa zawierające podciąg kurw można spokojnie oznaczyć jako wulgaryzm; Każda odmiana powinna zostać wyłapana, bo niewulgarne słowa takiego podciągu nie zawierają (mam nadzieję); Co do innych to też trzeba by pogłówkować i wyłapywać przynajmniej te najpopularniejsze, czy to regexami czy słownikiem;

To i tak nie zmienia faktu, iż moderatorzy przydadzą się, bo użytkownicy są zbyt cwani i zawsze uda im się obejść cenzor;


red label - skusiłbym się na podciągi jeba, jebi i jebn :D

0

Może ma ktoś jeszcze jakiś dobry podciąg do sprawdzenia?

0

Weź kartkę i rozpisz sobie wszystko.

0

Pisałem swojego czasu taki skrypt komentarzy, posiedziałem trochę i zrobiłem sobie funkcję, która wyłapuje przekleństwa i jeśli przy dodawaniu komentarza wykryje to każe userowi poprawić komentarz.

Taka funkcja:

		static function sprawdzWulgaryzmy($tekst){
			
			$przeklenstwa = array(
									'bit(h|ch)', 
									'(ch|h)(w|.w)(d|.d)(p|.p)', 
									'(|o)cip', 
									'(|o)(ch|h)(u|ó)j(|a)', 
									'(|do|na|po|do|prze|przy|roz|u|w|wy|za|z|matko)jeb(|a|c|i|n|y)', 
									'(|do|od|o|s|wy|za)pieprz(|e|n|on|a|y)', 
									'(|do|na|naw|od|pod|po|prze|przy|roz|spie|roz|poroz|s|u|w|za|wy)pierd(a|o|u)', 
									'fu(ck|k)', 
									'(|u)dup', 
									'(|po|s|w|za)(ku|q)r(w|ew|e)(i|y|a|s|o)', 
									'k(ó|u)tas', 
									'(|po|wy)rucha', 
									'motherfucker', 
									'piczk', 
									'(|w)pi(z|ź)d'
								);
			$buffor = false;
			foreach ($przeklenstwa as $item){
				if (preg_match('@'.$item.'([^ ]+)?@si', $tekst)){
					$buffor = true;
					break;
				}
			}
			#return substr(preg_replace( $przeklenstwa, '#cenzura#', ' '.$tekst ), 1);		//	zamiana przekleństw 
			return $buffor;
		}

@woolfik: Ta funkcja nie przepuści wyrażeń z Twojego postu wyżej :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1