在ruby rails中使用模糊搜索的亵渎过滤器



我是铁路新手。

我正在使用亵渎过滤器ruby gem来过滤我的内容应用程序中的脏话。。

如果有脏话,比如说"foulword",它会返回"f******d"

如果任何用户玩得很聪明,并键入"foulwoord""foulwordd""foulllword"等,则不会将其检测为脏话。

有没有办法确保它能检测到这些用户聪明的脏话?

期待帮助!

谢谢!

你需要过滤多少脏话?

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

此外,如果你检查了一个单词,发现它还可以,你可以将其添加到词典中,这样你就不需要再检查同一个单词了。这里的危险在于这本字典可能会变得太大。如果这是一个问题,你可以使用类似于"最近使用最少"的缓存,当字典变得太大时,它会丢弃最近没有出现的"好"单词。

另一种方法是对每个脏话生成变体,并将其存储在"坏"字典中。如果你生成的每个单词与一个脏话相差一个字母,那么每个脏话大约有200-500个字母。你也可以生成不同于脏话的单词,只需将字母"o"改为零,等等。

无论你做什么,你都不会在不错误地标记"好"字的情况下,100%地捕捉到"坏"字。如果你能得到一个过滤器,它捕捉到可以接受的高百分比的"坏"词,而误报率可以接受的低,那就是"成功"。

如果你这样做是为了一个网站,我建议你不要用"坏"字屏蔽内容,而是自动标记它以引起主持人的注意。如果允许淫秽内容在网站上短暂出现是不可接受的,你可以推迟显示标记的内容,直到主持人查看后。这将避免他评论中提到的@Blorgbeard的斯肯索普问题。

最新更新