这是很解决一个难题,你需要确定是否正则表达式将工作为你和你如何处理嵌入(当你添加一个字典词的亵渎像frackface除了真正的F字)。
正则表达式通常会限制它们可以使用多长时间,这通常会阻止您为所有单词使用单个正则表达式。针对字符串执行多个正则表达式非常慢,具体取决于您需要的性能以及黑名单的大小。我们最初实施CleanSpeak作为正则表达式系统,但它没有扩展,我们使用不同的机制重写它。
您还需要考虑词组,标点符号,空格,leet-speak和其他语言。所有这些使得正则表达式作为解决方案的吸引力较小。下面是使用这个词打招呼一些例子(假设这是这项工作的亵渎):
- 列表项
- 你好
- 你好
- h_e_l_l_o
- | - | ELLO
- h3llo
- “hello there”(这个短语可能不包含任何亵渎词,但结合他们是亵渎的)
您还需要处理两个或两个以上字典(白名单)字词在彼此相邻时包含亵渎的边缘情况。包含S-词的一些例子:
这些显然不是亵渎,但大部分自产自销,许多商业解决方案与这些案件的问题。
我们花了3年的时间完善CleanSpeak所使用的过滤器,以确保它可以处理所有这些情况,并且我们会继续调整并使其更好。我们还花了8个月的时间完善了我们的系统性能,每秒可以处理大约5,000条消息。并不是说你不能建立可用的东西,但要准备好处理很多可能出现的问题,并且要创建一个不使用正则表达式的系统。
检查此链接:http://stackoverflow.com/questions/273516/how-do-you-implement-a-good-profanity-filter –
寻找斯坎索普问题:http://en.wikipedia .ORG /维基/ Scunthorpe_problem – rossum