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