题
技术含量不是很高,但是...我必须在我们正在开发的新网站中实施坏词过滤器。所以我需要一个“好”坏词列表来为我的数据库提供...有什么提示/方向吗?用谷歌环顾四周我 找到了这个 一个,这只是一个开始,但仅此而已。
是的,我知道这种过滤器很容易逃脱......但客户的意愿就是客户的意愿!:-)
该网站必须过滤掉英语和意大利语单词,但对于意大利语,我可以请我的同事帮助我制作社区构建的“parolacce”列表:-) - 一封电子邮件就可以了。
谢谢你的帮助。
解决方案
我没有看到任何指定的语言,但你可以将它用于 PHP,它将为每个插入的工作生成一个正则表达式,这样即使是故意的拼写错误(即@ss, i3itch ) 也会被抓住。
<?php
/**
* @author unkwntech@unkwndesign.com
**/
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>
其他提示
提防 混乱的错误.
“苹果犯了一个严重的错误,强迫他们放弃远见——我的意思是,看看 NeXT 都做了什么!”
唔。“混乱”。
谷歌“clbuttic” - 数千次点击!
有人称他的车为“clbuttic”。
有“Clbuttic Steam Engine”留言板。
韦氏词典 - 没有帮助。
唔。这可能是什么?
暗示:当他们重复此Mbuttive错误时,对他们的正则脚本进行屁股的人会很尴尬。
Shutterstock 有一个 Github 存储库,其中包含 坏词列表 用于过滤。
您可以在这里查看: https://github.com/shutterstock/List-of-Dirty-Naughty-Obscene-and-Otherwise-Bad-Words
如果有人需要 API,谷歌目前提供了一个坏词指示器。
http://www.wdyl.com/profanity?q=naughtyword
{
response: "false"
}
更新:谷歌现在已经删除了这项服务。
我想说的是,当您发现帖子时就将其删除,并阻止帖子过于明确的用户。您可以在不使用任何脏话的情况下说出非常无礼的话。如果你屏蔽了“ass”(又名“donkey”)这个词,那么人们只会输入 a$$ 或 /\55,或者他们需要输入的任何其他内容来通过过滤器。
关于 Clbuttic 错误+1,我认为“坏词”过滤器扫描前导空格和尾随空格(例如“ass”)非常重要,而不是仅扫描确切的字符串,这样我们就不会出现像 clbuttic 这样的单词、 clbuttes、butt、buttess 等
维基百科 ClueBot 有一个坏词过滤器,请阅读其来源。
您始终可以说服客户建立一个用户会话,只是不断地发布脏话,并制定一个简单的解决方案将它们添加到系统中。这是一项艰巨的工作,但可能更能代表社区。
在研究这个主题时,我确定需要的不仅仅是一个可以进行任意替换的列表。我建立了一个网络服务,可以让您确定您想要的“清洁度”级别。它还努力识别误报 - 即某个词在某种情况下可能不好,但在其他情况下则不然。看一眼 http://filterlanguage.com