繁体   English   中英

红宝石导轨中带有模糊搜索的亵渎过滤器

[英]Profanity filter with fuzzy search in ruby rails

我是Rails新手。

我正在使用profanity_filter ruby gem来过滤内容应用程序中的粗话。

profanity_filter,如果根本有一个肮脏的词,让我们说"foulword"肮脏的词"foulword"它将返回"f******d"

如果任何用户玩"foulwoord"聪明,并且输入"foulwoord""foulwordd""foulllword"等,它就不会检测为"foulllword"词。

有没有一种方法可以确保它检测到这些用户智能脏话?

期待获得帮助!

谢谢!

您需要过滤多少个脏话?

一种方法是使用Diff::LCS类的东西(来自diff-lcs gem)来检查被检查单词与每个diff-lcs单词之间有多少个字母不同。 如果您要检查大量的粗话,这可能会很慢。 您可以做的一件事情来加快它速度,那就是包括一个“好”字词典。 将“好”字典保存在Set ,然后在检查每个内容词之前,首先测试它是否在字典中。 如果是这样,您可以继续。 (如果要非常快速地检查字典,请将其保留在搜索树中。)

此外,如果您检查一个单词并确定它是可以的,则可以添加到词典中,因此您无需再次检查相同的单词。 这里的危险是字典可能会变得太大。 如果这是一个问题,则可以使用类似于“最近最少使用”的高速缓存,当字典太大时,该高速缓存将丢弃最近没有看到的“好”单词。

另一种方法是在每个脏词上生成变体,并将其存储在“不良”字典中。 如果您生成的每个单词与一个错误单词相差1个字母,则每个错误单词大约会有200-500。 您还可以仅通过将字母“ o”更改为零等来生成与犯规单词不同的单词。

无论您做什么,都永远不会抓住100%的“坏”字,而不会错误地标记“好”字。 如果您可以获得一个过滤器,该过滤器捕获了可接受的高比例的“不良”字词和较低的误报率,那么这将是“成功”。

如果您正在网站上这样做,我建议您不要标记带有“坏”字的内容,而是自动标记它以引起管理员注意。 如果允许淫秽内容上去的网站上甚至一度是不可接受的,这可能会造成显示标记的内容,直到主持人也看着它。 这将避免他的评论中提到的@Blorgbeard的Scunthorpe问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM