Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: badwords
Forum PHP.pl > Forum > PHP
Apo
Witam
Napisałem do bota badwords. Ale zrobilem to troche niewydajnie bo bot sprawdza badwords przez in_array() co jest troche zle. Myślałem o preg_match ale nie wiem czy będzie wydajnie robić pętle całej tablicy z badwords i poruwnywać wiadomość od użytkownika czy tam gdzieś nie ma tego słowa. Napiszcie jak wy byście to zrobili smile.gif
konys
Kiedyś szukałem skryptów, które cenzurowałyby tekst lepiej niż badwordfiltry podmieniające uprzednio wpisane na sztywno słowa. Skleciłem cenzora opartego na wyrażeniach regularnych odpornego na wprowadzanie krzaków w stylu "n_i_e_c(e)n_zuralny" - po prostu usuwa wszystko co nie jest literą lub spacją. Wiąże się to z dwoma problemami - jeśli wprowadzi się "n i e c e n z u r a l n y" - to cenzor to łyknie. Można zdefiniować wyrażenie regularne, które wyszukiwałoby słów niecenzuralnych rozbitych spacjami, jednak znacznie zmniejszyłoby to wydajność. Drugim problemem są błędy interpunkcyjne. Poprawnie po znaku przestankowym powinna znaleźć się spacja, jeśli jednak ktoś o niej zapomni, dwa sąsiadujące ze sobą wyrazy po połączeniu mogą okazać się słowem niecenzuralnym (np. "wyrzuci;Pozdrowionka" biggrin.gif )
Co do wydajności - przy zagmatwaniu języka polskiego czasem wyrażenia regularne mogą być wydajniejsze od wpisywania pełnej tablicy słów do podmiany. Na przykład chcąc usunąć wszystkie słowa zawierające "bomb", mamy możliwość zdefiniowania prostego wyrażenia regularnego, lub tablicy słów zawierającej między innymi: bomba, bomby, bombom, bombami, bombowy, bombowa, bombowe, bombardowanie, bombardować, zbombardować, zbombardowany...
Używanie wyrażeń regularnych ma tę wadę, że usuniemy faktycznie wszystkie słowa zawierające podsłowo "bomb". Jeśli więc chcemy zezwolić na użycie słowa "bombastyczny" - musimy umieścić to słowo w osobnej tablicy słów dopuszczalnych.

Ok. dość wodolejstwa - efekt mojej pracy można przetestować i ściągnąć pod adresem: http://www.webforms.pl/cenzor/
chomiczek
Ja używam czegoś takiego, kwestia doddania swoich słów:
  1. <?php
  2. $doCenzury= "Gówniany człowiek rozjebał drzewko biggrin.gif";
  3. $slowka = array('g(o|ó)wn(i.*?|o.*?|)','rozjeb(a.*?|.*?|));
  4. for ($szukaj=0; $szukaj<count($slowka); $szukaj++)
  5. $czysty= preg_replace("/(\W|^)$slowka[$szukaj](\W|$)/i", " [ocenzurowano] ",$doCenzury);
  6.  
  7. echo $czysty;
  8. ?>


Kwestia stworzenie porządnej tablicy ze słowami :/
bigZbig
@konys - fajny cenzor, ale nieuwzglednia bledow ortograficznych np. pani na "K" pisana przez ó. Wyjatek stanowi popularne okreslenie organu meskiego, ktore jest cenzurowane zarowno po wpisaniu go z bledem, jak i poprawnie, z tym ze w tym drugim przypadku otrzymany wynik wyglada tak cXXX. Takie dzialanie cenzora nie jest oczywiscie zamierzone, ale wynika z popelnionego przez programiste bledu ortograficznego. Wspomniane wyzej slowo pisze sie przez "ch", a nie jak sie to utarlo przez "h". aaevil.gif

Edit
-----------------------
Aha - od kiedy słowo "pedał" nalezy do slow niecenzuralnych?
zombie
Cytat(bigZbig @ 2006-04-20 10:05:00)
Aha - od kiedy słowo "pedał" nalezy do slow niecenzuralnych?

hehe... na pewno nie sprawdzi się na forum dla rowerzystów. laugh.gif
podobnie jest z lesbijkę, pedofil, napalony ...

... ale nie czepiam się. skrypcik fajny, a słownik to już inna sprawa.
konys
tja - słownik konstruowałem dla konkretnego portalu, z którego cykliści z pewnością nie korzystają, więc użycie słowa 'pedał' miałoby wydźwięk jedynie pejoratywny. Może należałoby zrobić kilka poziomów filtracji (np. ostre mięcho, lekka pikanteria, megafiltracja)? Jak widzę nie ma chwilowo zastrzeżeń do enginu, jedynie do słownika. Jeśli ktoś wyrazi zainteresowanie, mógłbym (w wolnej chwili) zrobić interfejs dodawania wyrażeń cenzurowanych, wówczas można by wspólnie stworzyć słownik wyrazów niecenzuralnych. Jak się na to zapatrujecie?
bigZbig
Faktycznie wydzwiek poszczegolnych slow zalezy od kontekstu. Nie sadze aby udoalo sie stworzyc jakis uniwersalny slownik, ktory sprawdzi sie w kazdej sytuacji. Z drugiej strony warto stworzyc liste slow potencjalnie niecenzuralnych. W razie potrzeby zawsze mozna pewne slowa z tej listy usunac.

Najlatwiejszym sposobem zgromadzenia pewnej listy slow jest zapisywanie np. w bazie danych wszystkich slow uzytych w demku cenzora. Liste te oczywiscie trzebaby pozniej zweryfikowac.

Do cenzora ponadto przydalby sie jakis modul raportujacy, ktory gromadzilby dane statystyczne co do liczby uzycia poszczegolnych slow. Jesliby takiego cenzora zaimplementowac na jakims forum to wartoby bylo gromadzic tez informacje, ktory uzytkownik bluzga.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.