6

去年,我正在开展一个圣诞节项目,该项目允许客户相互发送电子邮件,其中包含 256 个字符的自由文本字段,用于他们的圣诞节请求。该项目通过在(非常大的)产品数据库中搜索与文本字段匹配的建议产品来工作,但为那些无法找到相关产品的客户提供免费文本选项。

一个明显的担忧是客户有机会向一些毫无戒心的客户发送相当明确的请求,而公司的品牌就围绕在它周围。

由于各种原因,该项目最终没有进行,其中之一是亵渎。

然而,我回过头来思考这个项目,想知道这里可以使用哪些类型的验证。我知道clbuttic我知道这是对这种性质的任何问题的标准回答。

我考虑的解决方案是:

  • 通过 WebPurify 之类的东西运行它
  • 使用 MechanicalTurk
  • 编写一个在列表中查找单词的正则表达式模式。一个更复杂的版本也会考虑这个词的复数和过去时。
  • 写出一系列可疑的单词,并为每个单词打分。如果提交超过分数,则验证失败。

所以有两个问题

  1. 如果提交失败,从UI角度如何处理?
  2. 这些解决方案或您可以建议的任何其他解决方案的优缺点是什么?

注意 - 像“亵渎过滤器是邪恶的”这样的答案是无关紧要的。在这种半假设的情况下,我还没有决定实施脏话过滤器,也没有决定是否实施。我只需要用我的编程技能做到最好(如果可能的话,应该在 LAMP 堆栈上)。

4

3 回答 3

6

您是否考虑过贝叶斯过滤?贝叶斯过滤不仅仅用于检测垃圾邮件。您可以在各种文本识别任务中训练他们。拿一个贝叶斯过滤器,收集一堆请求文本,然后开始将它们标记为是否包含亵渎。一段时间后(多少时间很大程度上取决于训练数据的数量和类型),您的过滤器将能够从不包含脏话的请求中检测出包含脏话的请求。

这不是万无一失的,但它比简单的字符串匹配和尝试处理复杂问题要好得多。PHP 中的贝叶斯过滤有多种可能性。

过滤器

Bogofilter 是一个独立的贝叶斯过滤器,可以在任何 unix-y 操作系统上运行。它的目标是过滤电子邮件,但您可以针对任何类型的文本对其进行训练。我已经成功地使用它为我自己的网站(源代码)实现了自定义评论垃圾邮件过滤器。您可以像使用任何其他命令行应用程序一样与 bogofilter 交互。有关示例,请参见我的源代码链接。

自己滚

如果您喜欢挑战,您可以完全从头开始实施贝叶斯过滤器。这是一篇关于在 PHP 中实现贝叶斯过滤器的不错的文章

现有的 PHP 库

(Ab)使用现有的电子邮件过滤器

您可以使用标准的 SpamAssassin 或 DSpam 安装并训练它识别亵渎。只需确保您禁用专门针对电子邮件消息的选项(例如解析 mime 块、阅读标题)并启用处理baysian 文本处理的选项。DSpam 可能更容易适应。SpamAssassin 的优势在于您可以在贝叶斯过滤器之上添加自定义规则。对于 SpamAssassin,请确保禁用所有默认规则并编写自己的规则。默认规则都针对垃圾邮件检测。

于 2011-04-27T20:52:12.350 回答
0

过去,我使用了一种美化形式的str_replace. 这是我的理由:

  1. 脏话可以被愚蠢的词代替,传达信息的原意,但不鼓励使用脏话
  2. 在发生过滤的成功帖子上,会向用户显示成功消息,但会显示已进行清理的通知(例如,“您的帖子已添加,便盆。”)
  3. 我从不希望提交失败。帖子要么未经审查,要么经过审查。在您的情况下,您可能希望完全阻止亵渎的帖子。

值得一提的是,Apple 最近才停止在其免费的激光雕刻中禁止使用淫秽语言。也许他们有合理的理由?

于 2011-04-25T17:23:46.987 回答
0

使用一些字符串匹配规则并仅将它们放入审核队列怎么样?

听起来许多请求可能不使用自由文本字段,因此它们应该安全地通过。

然后,只有一小部分应该使您的字符串匹配以适度的方式结束。即使拥有庞大的用户群,这也应将审核时间降至最低。您甚至可能做出明显的亵渎行为,例如 f 或 n 词自动无法进一步减少剩余列表。

使您的审核页面易于使用,并突出显示标记消息的单词,这应该使其成为一个快速扫描和清理的过程。如果人们试图发布过多垃圾或误报过多,请根据需要进行调整。

或者只是将此策略与@Sander 建议的贝叶斯过滤一起使用。

编辑:还有一个“报告滥用”按钮将帮助您找出是否有坏东西通过,但这将涉及保存已发送的消息一段时间,如果这将是高度活跃的,这可能不是理想的。

于 2011-04-27T21:03:18.333 回答