[英]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.