2008-08-23 64 views
44

不是很技術性,但...我必須在我們正在開發的一個新網站中實施一個壞詞過濾器。所以我需要一個「好的」不好的單詞列表來餵養我的數據庫...任何提示/方向?與谷歌I found this環顧四周,這是一個開始,但沒有更多。「壞詞」過濾器

是的,我知道這種過濾器很容易逃脫...但客戶端將是客戶端! :-)

該網站將不得不過濾掉英語和意大利語的單詞,但對於意大利語,我可以要求我的同事幫助我使用社區建立的「parolacce」:-) - 一封電子郵件即可。

感謝您的任何幫助。

+20

猥褻過濾...一個糟糕的主意或一個真正的交際不良想法? – stephenbayer 2008-10-22 13:18:36

+1

與spellchecker配合起來,如果在審查後得到更多的拼寫錯誤,你已經搞砸了某處並且可以處理它 – nailitdown 2010-09-02 04:28:01

+0

相關:http://programmers.stackexchange.com/questions/143405/how-to- generate-language-safe-uuids – 2012-06-28 03:21:16

回答

32

我沒有看到任何指定的語言,但是您可以將它用於PHP,它將爲每個受損工作生成一個RegEx,以便即使是故意錯誤拼寫(即@ss,i3itch)也會被捕獲。

<?php 

/** 
* @author [email protected] 
**/ 

if($_GET['act'] == 'do') 
{ 
    $pattern['a'] = '/[a]/'; $replace['a'] = '[a A @]'; 
    $pattern['b'] = '/[b]/'; $replace['b'] = '[b B I3 l3 i3]'; 
    $pattern['c'] = '/[c]/'; $replace['c'] = '(?:[c C (]|[k K])'; 
    $pattern['d'] = '/[d]/'; $replace['d'] = '[d D]'; 
    $pattern['e'] = '/[e]/'; $replace['e'] = '[e E 3]'; 
    $pattern['f'] = '/[f]/'; $replace['f'] = '(?:[f F]|[ph pH Ph PH])'; 
    $pattern['g'] = '/[g]/'; $replace['g'] = '[g G 6]'; 
    $pattern['h'] = '/[h]/'; $replace['h'] = '[h H]'; 
    $pattern['i'] = '/[i]/'; $replace['i'] = '[i I l ! 1]'; 
    $pattern['j'] = '/[j]/'; $replace['j'] = '[j J]'; 
    $pattern['k'] = '/[k]/'; $replace['k'] = '(?:[c C (]|[k K])'; 
    $pattern['l'] = '/[l]/'; $replace['l'] = '[l L 1 ! i]'; 
    $pattern['m'] = '/[m]/'; $replace['m'] = '[m M]'; 
    $pattern['n'] = '/[n]/'; $replace['n'] = '[n N]'; 
    $pattern['o'] = '/[o]/'; $replace['o'] = '[o O 0]'; 
    $pattern['p'] = '/[p]/'; $replace['p'] = '[p P]'; 
    $pattern['q'] = '/[q]/'; $replace['q'] = '[q Q 9]'; 
    $pattern['r'] = '/[r]/'; $replace['r'] = '[r R]'; 
    $pattern['s'] = '/[s]/'; $replace['s'] = '[s S $ 5]'; 
    $pattern['t'] = '/[t]/'; $replace['t'] = '[t T 7]'; 
    $pattern['u'] = '/[u]/'; $replace['u'] = '[u U v V]'; 
    $pattern['v'] = '/[v]/'; $replace['v'] = '[v V u U]'; 
    $pattern['w'] = '/[w]/'; $replace['w'] = '[w W vv VV]'; 
    $pattern['x'] = '/[x]/'; $replace['x'] = '[x X]'; 
    $pattern['y'] = '/[y]/'; $replace['y'] = '[y Y]'; 
    $pattern['z'] = '/[z]/'; $replace['z'] = '[z Z 2]'; 
    $word = str_split(strtolower($_POST['word'])); 
    $i=0; 
    while($i < count($word)) 
    { 
     if(!is_numeric($word[$i])) 
     { 
      if($word[$i] != ' ' || count($word[$i]) < '1') 
      { 
       $word[$i] = preg_replace($pattern[$word[$i]], $replace[$word[$i]], $word[$i]); 
      } 
     } 
     $i++; 
    } 
    //$word = "/" . implode('', $word) . "/"; 
    echo implode('', $word); 
} 

if($_GET['act'] == 'list') 
{ 
    $link = mysql_connect('localhost', 'username', 'password', '1'); 
    mysql_select_db('peoples'); 
    $sql = "SELECT word FROM filters"; 
    $result = mysql_query($sql, $link); 
    $i=0; 
    while($i < mysql_num_rows($result)) 
    { 
     echo mysql_result($result, $i, 'word') . "<br />"; 
     $i++; 
    } 
    echo '<hr>'; 
} 
?> 
<html> 
    <head> 
     <title>RegEx Generator</title> 
    </head> 
    <body> 
     <form action='badword.php?act=do' method='post'> 
      Word: <input type='text' name='word' /><br /> 
      <input type='submit' value='Generate' /> 
     </form> 
     <a href="badword.php?act=list">List Words</a> 
    </body> 
</html> 
1

你總是可以說服客戶端讓用戶只是不斷地發帖咒罵會話,使一個簡單的解決方案,將其添加到系統中。這是很多工作,但它可能會更有代表性的社區。

4

我會說當你意識到他們的時候刪除帖子,並阻止那些對他們的帖子過於明確的用戶。你可以說出非常冒犯的話,而不用任何髒話。如果你屏蔽了驢(又名驢)這個詞,那麼人們只需輸入$$或/ \ 55,或者輸入任何他們需要輸入的內容來越過過濾器。

3

對Clbuttic錯誤+1,我認爲對於「壞詞」過濾器來掃描前後空格(例如,「屁股」)而非僅僅是確切的字符串是非常重要的,以便我們不會有像clbuttic,clbuttes,buttert,buttess等

-1

我最近發現這個免費的壞詞過濾在線web服務。他們允許在JSON中使用WCF和表單文章。它的工作非常好,我不必更新列表,因爲他們的列表不斷更新。他們提供免費和負擔得起的高級服務。

它值得一看。

http://www.thefilthylist.com

-3

在研究這個話題我確定需要什麼比這一點確實任意替換列表的更多。我已經建立了一個Web服務,可以讓您確定您所需的「清潔程度」。它還努力識別誤報 - 即在某種情況下單詞可能不好,但在其他情況下不好。 看看http://filterlanguage.com

6

如果有人需要一個API,谷歌目前提供的一個壞詞的指標。

http://www.wdyl.com/profanity?q=naughtyword 

{ 
response: "false" 
} 

更新:Google現在已刪除此服務。