在红宝石轨道中使用模糊搜索的亵渎过滤器

时间:2012-02-03 23:00:06

标签: ruby filter rubygems word profanity

我是铁杆新手。

我使用profanity_filter ruby​​ gem来过滤我的内容应用程序中的粗言秽语。

profanity_filter,如果有一个粗话,请说"foulword"它返回"f******d"

如果有任何用户玩智能并键入"foulwoord""foulwordd""foulllword"等,则不会检测到这一点。

有没有办法确保它检测到这些用户智能犯规词?

期待帮助!

谢谢!

1 个答案:

答案 0 :(得分:3)

您需要过滤多少个粗言秽语?

一种方法是使用类似Diff::LCS(来自diff-lcs gem)的内容来检查被检查单词和每个犯规单词之间有多少字母不同。如果你要检查大量的罚话,这可能会很慢。你可以做的一件事就是让更多更快,包括一个“好”词的字典。将“好”字典保留在Set中,在检查每个内容字之前,首先测试它是否在字典中。如果是这样,你可以继续前进。 (如果你想快速检查字典非常,请将其保存在搜索框中。)

此外,如果您检查一个单词并发现它没问题,您可以添加到词典中,这样您就不需要再次检查相同的单词。这里的危险是字典可能会变得太大。如果这是一个问题,你可以使用类似于“最近最少使用”的缓存,当字典变得太大时,会丢弃最近没有见过的“好”字。

另一种方法是在每个犯规词上生成变体,并将它们存储在“坏”词典中。如果你生成的每个单词与一个粗体单词相差1个字母,那么每个单词的单词大约为200-500。你也可以通过将字母“o”改为零等来生成与粗言辞不同的单词。

无论你做什么,你都不会在没有错误地标记“好”字的情况下抓住100%的“坏”字。如果你能得到一个过滤器,它可以获得可接受的高百分比的“坏”词,并且具有可接受的低误报率,那将是“成功”。

如果您正在为网站执行此操作,我建议您不要使用“坏”字来阻止内容,而是自动将其标记为主持人注意。如果允许淫秽内容在网站上出现甚至短暂是不可接受的,您可以延迟显示标记内容,直到主持人看到之后。这将避免在他的评论中提到的@Blorgbeard的Scunthorpe问题。