regex - 使用正则表达式的脏话过滤器(100 个单词的列表)

标签 regex language-agnostic profanity

从给定的字符串中去除亵渎词的正确方法是什么:
1) 我有一个包含 100 个单词的列表,需要在字符串数组中查找。
2)处理部分单词的正确方法是什么?大多数人如何处理这个问题?例如质量这个词。然后有时部分词也不好 - 假设 foobar 是一个非常亵渎的词,我可能想禁止 foobar 和 foobar* 和 *foobar。

那么您是将所有单词放入一个表达式中还是遍历列表?

处理它的正确方法是什么?我正在使用 Groovy/Grails,但欢迎使用任何现代语言示例。

最佳答案

这是一个很难解决的问题,您需要确定正则表达式是否适合您以及您如何处理嵌入(当您将字典词添加到像 frackface 这样的亵渎性词时,除了真正的 F 词时)。

正则表达式通常对它们的长度有限制,这通常会阻止您对所有单词使用单个正则表达式。对一个字符串执行多个正则表达式真的很慢,这取决于您需要什么性能以及您的黑名单有多大。我们初步实现 CleanSpeak作为一个正则表达式系统,但它没有扩展,我们使用不同的机制重写了它。

您还需要考虑短语、标点符号、空格、leet-speak 和其他语言。所有这些都使正则表达式作为解决方案的吸引力降低。以下是一些使用 hello 一词的示例(假设它是本练习中的脏话):

  • 列表项
  • 您好
  • h.e.l.l.o
  • h_e_l_l_o
  • |-|你好
  • h3llo
  • “你好”(这句话可能不包含任何亵渎的词,但将它们结合起来就是亵渎的)

  • 您还需要处理两个或多个字典(白名单)单词在彼此相邻时包含脏话的边缘情况。一些包含 s 字的例子:
  • 猛击它
  • ssh 现在是安静时间

  • 这些显然不是亵渎,但大多数本土和许多商业解决方案都存在这些案例的问题。

    在过去的 3 年中,我们一直在完善 CleanSpeak 使用的过滤器。以确保它处理所有这些情况,我们将继续对其进行调整并使其变得更好。我们还花了 8 个月的时间完善我们的系统以提高性能,它每秒可以处理大约 5,000 条消息。并不是说你不能构建一些可用的东西,而是准备好处理可能出现的很多问题,并创建一个不使用正则表达式的系统。

    关于regex - 使用正则表达式的脏话过滤器(100 个单词的列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8319136/

    相关文章:

    javascript - 使用正则表达式捕获负数

    arrays - 按组保留数组的前 N ​​个元素

    algorithm - 用 DNA 计算绘制哈密顿路径

    php - 正则表达式 - 匹配(仅)具有混合字符的单词

    regex - 在多个索引处拆分字符串 --> [String]?

    mysql - 如何使查询更新 fasion mysql 的查找和替换排序中的列?

    javascript - 验证该字符串是正则表达式模式的开头

    algorithm - 计算算法复杂度 - 困惑

    iphone - 用于 iPhone 的 Objective C 中的基本脏话过滤器

    python - 什么是好的 Python 亵渎过滤器库?