如何实现良好的亵渎性语言过滤器?

2022-08-30 06:20:56

我们中的许多人需要处理用户输入,搜索查询以及输入文本可能包含亵渎性语言或不良语言的情况。通常,这需要被过滤掉。

在哪里可以找到各种语言和方言的脏话列表?

是否有可用于包含良好列表的源的 API?或者,一个API只是简单地说“是的,这是干净的”或“不,这是肮脏的”,带有一些参数?

有什么好方法可以抓住那些试图欺骗系统的人,比如a$$,azz或a55?

如果您提供PHP解决方案,则可获得奖励积分。:)

编辑:对答案的回应,说只是避免程序化问题:

我认为这种过滤器有一席之地,例如,当用户可以使用公共图像搜索来查找添加到敏感社区池中的图片时。如果他们能搜索“阴茎”,那么他们可能会得到很多照片,是的。如果我们不想要这样的图片,那么阻止这个词作为搜索词是一个很好的守门人,尽管诚然,这不是一个万无一失的方法。首先获得单词列表是真正的问题。

因此,我实际上指的是一种方法,可以弄清楚单个令牌是否肮脏,然后简单地禁止它。我不会费心阻止像完全搞笑的“长颈长颈鹿”这样的情绪。你在那里无能为力。:)


答案 1

淫秽过滤器:坏主意,还是难以置信的坏主意?

此外,人们不能忘记Toontown的SpeedChat的不为人知的历史,即使使用“安全词白名单”也会导致一个14岁的孩子迅速绕过它:“我想把我的长颈长颈鹿放在你蓬松的白兔身上。

底线:最终,对于您实施的任何系统,绝对没有替代人工审查(无论是同行还是其他方式)的替代品。随意实现一个基本的工具来摆脱路过,但对于坚定的巨魔来说,你绝对必须有一个非基于算法的方法。

一个消除匿名性并引入问责制的系统(Stack Overflow做得很好)也是有帮助的,特别是为了帮助打击约翰·加布里埃尔(John Gabriel)的G.I.F.T。

你还问了在哪里可以获得亵渎性语言列表来让你入门 - 一个开源项目是Dansguardian - 查看其默认亵渎列表的源代码。您还可以为代理下载一个额外的第三方短语列表,这可能是一个有用的收集点。

编辑以回应问题编辑:感谢您对您要执行的操作的澄清。在这种情况下,如果您只是尝试执行简单的单词筛选,则有两种方法可以执行此操作。一种是使用您要审查的所有被禁止的短语创建一个长正则表达式,并且仅执行正则表达式查找/替换它。一个正则表达式,如:

$filterRegex = "(boogers|snot|poop|shucks|argh)"

并使用preg_match()在输入字符串上运行它,以批量测试命中,

preg_replace() 将它们清空。

您还可以使用数组而不是单个长正则表达式加载这些函数,对于长单词列表,它可能更易于管理。请参阅preg_replace() 以获取有关如何灵活使用数组的一些很好的示例。

有关其他 PHP 编程示例,请参阅此页面,了解用于单词过滤的高级泛型类,该类 *是从被审查的单词中取出中心字母,以及之前的 Stack Overflow 问题,其中也有一个 PHP 示例(其中最有价值的部分是基于 SQL 的过滤单词方法 - 如果您发现没有必要,可以省去 leet-speak 补偿器)。

你还补充说:“首先获得单词列表是真正的问题”——除了之前的一些Dansgaurdian链接之外,你可能会发现这个方便的458个单词.zip很有帮助。


答案 2

虽然我知道这个问题已经相当古老了,但这是一个常见的问题......

对亵渎性过滤器既有原因又有明显的需求(请参阅此处的维基百科条目),但由于非常明显的原因,它们通常不能100%准确;上下文准确性

这取决于(完全)你试图实现的目标 - 在最基本的层面上,你可能试图覆盖“七个肮脏的词”,然后一些......有些企业需要过滤最基本的亵渎:基本的脏话,URL甚至个人信息等等,但其他企业需要防止非法帐户命名(Xbox live就是一个例子)或更多...

用户生成的内容不仅包含潜在的脏话,还可能包含对以下内容的冒犯性引用:

  • 性行为
  • 性取向
  • 宗教
  • 种族
  • 等。。。

而且可能以多种语言。到目前为止,Shutterstock已经开发了10种语言的基本脏词列表,但它仍然是基本的,并且非常面向他们的“标记”需求。网络上还有许多其他列表。

我同意公认的答案,即它不是一门明确的科学,因为语言是一个不断发展的挑战,但90%的捕获率优于0%。这完全取决于您的目标 - 您要实现的目标,您获得的支持水平以及删除不同类型的亵渎行为的重要性。

在生成筛选器时,需要考虑以下元素以及它们与项目的关系:

  • 字词/短语
  • 缩略语(FOAD/LMFAO 等)
  • 误报(单词,地点和名称,如“mishit”,“scunthorpe”和“titsworth”)
  • 网址(色情网站是一个明显的目标)
  • 个人信息(电子邮件、地址、电话等 - 如适用)
  • 语言选择(通常默认为英语)
  • 审核(如何(如果有的话)与用户生成的内容进行交互以及您可以使用它做什么)

您可以轻松构建一个亵渎性语言过滤器,捕获90%以上的亵渎性语言,但您永远不会达到100%。这是不可能的。你越想达到100%,它就越难...我过去构建了一个复杂的亵渎引擎,每天处理超过50万条实时消息,我会提供以下建议:

基本筛选器将涉及:

  • 构建适用的亵渎语言列表
  • 开发一种处理亵渎性语言派生的方法

一个中等复杂的文件管理器将涉及,(除了基本的过滤器):

  • 使用复杂模式匹配来处理扩展派生(使用高级正则表达式)
  • 处理 Leetspeak (l33t)
  • 处理误报

复杂的过滤器将涉及以下许多内容(除了中等过滤器):

  • 白名单和黑名单
  • 短语/术语的朴素贝叶斯推理过滤
  • Soundex 函数(一个单词听起来像另一个单词)
  • 列文施泰因距离
  • 堵塞
  • 人工版主帮助指导过滤引擎通过示例学习,或者在没有指导的情况下匹配不够准确的地方(自我/持续改进的系统)
  • 也许是某种形式的AI引擎

推荐