阻止不良内容的设计模式

Dan*_*ows 6 php validation filter profanity

去年,我正在开展一个圣诞节项目,允许客户通过256个字符的自由文本字段发送电子邮件给他们圣诞节请求.该项目通过在(非常大的)产品数据库中搜索与文本字段匹配的建议产品,但为那些找不到相关产品的客户提供了自由文本选项.

一个显而易见的问题是客户有机会向一些毫无戒心的客户发送明确的请求,公司的品牌围绕着它.

由于各种原因,该项目最终没有进行,亵渎方面是一个方面.

但是,我回过头来考虑这个项目,并想知道这里可以使用哪种验证方式.我知道clbuttic,我知道这是对这种性质的任何问题的标准回应.

我考虑的解决方案是:

  • 通过像WebPurify这样的东西来运行它
  • 使用MechanicalTurk
  • 编写正则表达式模式,查找列表中的单词.更复杂的版本也会考虑复数和过去时期.
  • 写一系列可疑单词,并对每一个单词进行评分.如果提交超过分数,则验证失败.

所以有两个问题:

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

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

San*_*hal 6

你有没有想过贝叶斯过滤?贝叶斯过滤不仅仅用于检测垃圾邮件.您可以在各种文本识别任务中训练它们.抓住一个贝叶斯过滤器,收集一堆请求文本并开始将它们标记为包含亵渎与否.经过一段时间(多长时间在很大程度上取决于培训数据的数量和类型),您的过滤器将能够检测到包含亵渎性质的请求.

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

bogofilter

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

滚动你自己

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

现有的PHP库

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

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