去年我在做一个圣诞节项目,该项目允许客户相互发送电子邮件,其中包含 256 个字符的自由文本字段,用于他们的圣诞节请求。该项目通过搜索(非常大的)产品数据库来寻找与文本字段匹配的建议产品,但为那些找不到相关产品的客户提供免费文本选项。
一个明显的担忧是客户有机会向一些毫无戒心的客户发送相当明确的请求,而公司的品牌围绕着它。
项目最终没有进行,原因有很多,脏话是其中之一。
但是,我回过头来思考这个项目,想知道这里可以使用什么样的验证。我知道 clbuttic 我知道它是 standard response任何此类性质的问题。
我考虑的解决方案是:
- 通过类似 WebPurify 的程序运行它
- 使用 MechanicalTurk
- 编写一个正则表达式模式来查找列表中的单词。更复杂的版本还会考虑单词的复数形式和过去时态。
- 写下一系列可疑词,并对每个词进行评分。如果提交超过分数,则验证失败。
所以有两个问题:
- 如果提交失败,从UI角度如何处理?
- 这些解决方案的优缺点是什么,或者您可以建议的任何其他解决方案?
注意 - 诸如“亵渎过滤器是邪恶的”之类的回答是无关紧要的。在这种半假设的情况下,我还没有决定实现脏话过滤器,也没有选择是否实现脏话过滤器。我只需要尽我所能地利用我的编程技能(如果可能的话,它应该在 LAMP 堆栈上)。
最佳答案
您是否考虑过贝叶斯过滤?贝叶斯过滤不仅仅用于检测垃圾邮件。您可以在各种文本识别任务中训练他们。捕获一个贝叶斯过滤器,收集一堆请求文本并开始将它们标记为包含亵渎或不包含亵渎。一段时间后(多少时间在很大程度上取决于训练数据的数量和类型),您的过滤器将能够从不包含脏话的请求中检测出包含脏话的请求。
它不是万无一失的,但它比简单的字符串匹配和尝试处理clbuttic 问题要好得多。在 PHP 中有多种贝叶斯过滤的可能性。
bogo过滤器
Bogofilter 是一个独立的贝叶斯过滤器,可以在任何 unix-y 操作系统上运行。它的目标是过滤电子邮件,但您可以针对任何类型的文本对其进行训练。我已经成功地使用它为我自己的网站 ( source ) 实现了自定义评论垃圾邮件过滤器。您可以像与任何其他命令行应用程序一样与 bogofilter 进行交互。有关示例,请参阅我的源代码链接。
自己动手
如果您喜欢挑战,可以完全从头开始实现贝叶斯过滤器。 Here's a decent article about implementing a bayesian filter in PHP .
现有的 PHP 库
(Ab)使用现有的电子邮件过滤器
您可以使用标准的 SpamAssassin 或 DSpam 安装并训练它识别脏话。只需确保禁用专门针对电子邮件消息的选项(例如解析 MIME block 、阅读标题)并启用处理贝叶斯文本处理的选项。 DSpam 可能更容易适应。 SpamAssassin 的优势在于您可以在贝叶斯过滤器之上添加自定义规则。对于 SpamAssassin,请确保禁用所有默认规则并改为编写自己的规则。默认规则都是针对垃圾邮件检测的。
关于php - 阻止不良内容的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780721/