0

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

4

4 回答 4

2

正如铁皮人所说,这个问题很难,但也不是不可能。我已经构建了一个 名为 CleanSpeak 的商业亵渎过滤器,它可以处理上述所有内容(leet speak、语音、语言规则、白名单等)。CleanSpeak 能够在低端服务器上每秒过滤 20,000 条消息,因此可以构建运行良好且性能良好的东西。我要提到的是,CleanSpeak 是大约 3 年持续发展的结果。

我告诉每个想要尝试解决语言过滤器的人一些事情。

  1. 不要使用正则表达式,除非你有一个小列表并且不介意很多事情通过。正则表达式总体上相对较慢且难以管理。
  2. 确定是否要处理变位、变形和其他语言规则。这些通常会为项目增加大量时间。
  3. 确定您需要什么类型的性能以及是否可以对字符串进行多次传递。你做的越多,你的过滤器就越慢。
  4. 了解suncthrope 和 clbuttic问题,并确定您将如何处理这些问题。这通常需要某种形式的语言智能和白名单。
  5. 意识到空格现在有不同的含义。您不能再将其用作单词分隔符(因此)
  6. 小心处理标点符号,因为它可以用来绕过过滤器(如 th---is)
  7. 了解人们如何使用 ascii 艺术和 unicode 来替换字符(/ = v - 那些是斜线)。有很多 unicode 字符看起来像英文字符,您需要适当地处理这些字符。
  8. 了解人们总是通过将单词拼凑在一起(像这样)来编造新的亵渎,并弄清楚您是否想处理它。

您可以在 StackOverflow 上搜索我对其他线程的评论,因为我可能有更多关于我在这里忘记的线程的信息。

于 2012-11-13T14:03:07.520 回答
0

这是您可以使用的:来自 CMU 网站的攻击性/亵渎性词汇表

于 2012-11-12T17:04:31.977 回答
0

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

如果有人想注入亵渎的话,那么在一个上下文中会有大量的词是无辜的,而在另一个上下文中是亵渎的,所以你必须编写一个上下文解析器来避免将干净的词列入黑名单。快速浏览CMU 的列表会发现我绝不会认为粗鲁/粗鲁/社会不可接受的词。你会看到有很多词可能是专有名称或名词、国家、亲昵的术语等。而且,使用 L33T 语音等有无数种方法可以让你的算法失效。搜索维基百科和互联网,您可以构建字母变体表。

看看CMU 的列表,想象一下如果除了正确的字母之外,每个字母a还可以是4o可能是,0或者pe可能是3s可能是,那么这个列表会有多长5。而且,这是一个非常非常简短的例子。

我被要求做一个类似的任务并编写代码来生成单词的 L33T 变体,并根据互联网上的几个亵渎/攻击性列表生成一个单词命中列表。运行生成器后,文件经过 1/4 多一点后,我的数据库中有超过 100 万个条目。那时我拔掉了这个项目的插头,因为搜索所花费的时间,即使使用 Perl 的 Regex::Assemble,也会很荒谬,尤其是因为它仍然很容易被愚弄。

我建议您与提出要求的人进行长时间的交谈,并询问他们是否了解所涉及的编程问题,以及准确性和成功的可能性很低,尤其是从长期来看,或者当他们意识到您正在审查时可能引起的客户强烈反对他们。

于 2012-11-12T19:10:28.083 回答
0

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

于 2012-11-12T21:03:26.020 回答