亵渎过滤器导入

时间:2012-11-12 16:27:52

标签: ruby-on-rails ruby filter profanity

我希望在基于Rails的应用程序中编写基本的亵渎性过滤器。只要用户提交了适当的属性,这将使用简单的搜索和替换机制。我的问题是,对于那些之前写过这些文件的人来说,是否有一个CSV文件或一些数据库可以将亵渎词汇列表导入我的数据库?我们正在提交我们将自己取代亵渎的话。我们或多或少需要一个亵渎,种族辱骂和任何不完全被评为PG-13被触发的数据库。

4 个答案:

答案 0 :(得分:1)

正如田人所说,这个问题很难,但并非不可能。我已经构建了一个commercial profanity filter named CleanSpeak来处理上面提到的所有内容(leet speak,phonetics,language rules,whitelisting等)。 CleanSpeak能够在低端服务器上每秒过滤20,000条消息,因此可以构建效果良好且性能良好的东西。我会提到CleanSpeak是大约3年持续发展的结果。

我告诉大家有一些想要尝试解决语言过滤器的事情。

  1. 不要使用正则表达式,除非你有一个小列表并且不介意很多事情要通过。正则表达式总体上相对较慢且难以管理。
  2. 确定是否要处理变形,变形和其他语言规则。这些通常会给项目增加相当多的时间。
  3. 确定您需要什么类型的性能以及是否可以对字符串进行多次传递。越过你的过滤器就越慢。
  4. 了解scunthrope and clbuttic问题并确定如何处理这些问题。这通常需要某种形式的语言智能和白名单。
  5. 意识到空白现在有不同的含义。您不能再将其用作单词分隔符(仅此而已)
  6. 小心处理标点符号,因为它可用于绕过过滤器(l.i.k.e th --- is)
  7. 了解人们如何使用ascii art和unicode来替换字符(/ = v - 那些是斜杠)。有很多unicode字符看起来像英文字符,你会想要妥善处理它们。
  8. 明白人们总是通过粉碎文字来构成新的亵渎(likethis)并弄清楚你是否想要处理它。
  9. 你可以在StackOverflow上搜索我对其他线程的评论,因为我可能有更多关于我在这里忘记的线程的信息。

答案 1 :(得分:0)

您可以使用以下内容:Offensive/Profane Word List from CMU site

答案 2 :(得分:0)

根据个人经验,你明白这是徒劳的做法吗?

如果有人想要亵渎,那么在一个上下文中会有一大堆无辜的词汇,而在另一个上下文中亵渎,所以你必须编写一个上下文解析器以避免黑名单清单。快速浏览一下CMU's list,可以看出我从不认为粗鲁/粗暴/社会不可接受的词语。你会看到有很多单词可能是专有名词或名词,国家,昵称等等。而且,有很多方法可以使用L33T说话等等来抛弃你的算法。搜索维基百科和互联网,您可以构建各种字母表。

查看CMU's list并想象如果除了正确的字母之外,每个a也可能是4o可以{ {1}}或0p可以是e3可以是s。而且,这是一个非常非常简短的例子。

我被要求做类似的任务并编写代码来生成单词的L33T变体,并根据互联网上提供的几个亵渎/攻击列表生成一个单词列表。在运行生成器之后,通过文件的方式超过1/4,我的数据库中有超过一百万个条目。我在那个时候拔掉了项目的插头,因为搜索的时间,甚至使用Perl的Regex :: Assemble,都是荒谬的,特别是因为它仍然很容易被愚弄。

我建议您与任何要求的人进行长时间的交谈,并询问他们是否理解所涉及的编程问题,以及准确性和成功的可能性较低,特别是长期,或者当他们意识到您时可能的客户反对'审查他们。

答案 3 :(得分:0)

我有一个我已添加到的(混淆了一下),但这里是:https://github.com/rdp/sensible-cinema/blob/master/lib/subtitle_profanity_finder.rb