我是铁杆新手。
我使用profanity_filter ruby gem来过滤我的内容应用程序中的粗言秽语。
profanity_filter,如果有一个粗话,请说"foulword"
它返回"f******d"
如果有任何用户玩智能并键入"foulwoord"
或"foulwordd"
或"foulllword"
等,则不会检测到这一点。
有没有办法确保它检测到这些用户智能犯规词?
期待帮助!
谢谢!
答案 0 :(得分:3)
您需要过滤多少个粗言秽语?
一种方法是使用类似Diff::LCS
(来自diff-lcs
gem)的内容来检查被检查单词和每个犯规单词之间有多少字母不同。如果你要检查大量的罚话,这可能会很慢。你可以做的一件事就是让更多更快,包括一个“好”词的字典。将“好”字典保留在Set
中,在检查每个内容字之前,首先测试它是否在字典中。如果是这样,你可以继续前进。 (如果你想快速检查字典非常,请将其保存在搜索框中。)
此外,如果您检查一个单词并发现它没问题,您可以将添加到词典中,这样您就不需要再次检查相同的单词。这里的危险是字典可能会变得太大。如果这是一个问题,你可以使用类似于“最近最少使用”的缓存,当字典变得太大时,会丢弃最近没有见过的“好”字。
另一种方法是在每个犯规词上生成变体,并将它们存储在“坏”词典中。如果你生成的每个单词与一个粗体单词相差1个字母,那么每个单词的单词大约为200-500。你也可以通过将字母“o”改为零等来生成与粗言辞不同的单词。
无论你做什么,你都不会在没有错误地标记“好”字的情况下抓住100%的“坏”字。如果你能得到一个过滤器,它可以获得可接受的高百分比的“坏”词,并且具有可接受的低误报率,那将是“成功”。
如果您正在为网站执行此操作,我建议您不要使用“坏”字来阻止内容,而是自动将其标记为主持人注意。如果允许淫秽内容在网站上出现甚至短暂是不可接受的,您可以延迟显示标记内容,直到主持人看到之后。这将避免在他的评论中提到的@Blorgbeard的Scunthorpe问题。