设计思路-铭感词过滤

需求

用户输入,如果是系统中管理员录入的铭感词则替换为***或者提示用户铭感词

 

方案一

将管理员录入的词库全部导入到分词词库,设置分词只分含有词库的词语

比如敏感词 弟弟,小老弟  输入 你好  则不返回  输入 你好小老弟 返回 [小老弟] 有返回则表示含有铭感词语 针对替换 分词框架都会返回start 和postion类似这样的位置

缺点:如果铭感词库比较多或者是saas场景 则会消耗大量内存

 

方案二

其实大量的中文词库分词框架都能分出来,只是有一些特殊的分不出来。我们只将这些特殊的导入词库

管理员录入敏感词 “弟弟”

则我们自行组织成一句话

"测试铭感词分词弟弟" 假设弟弟是特殊字符 ik分词不了,

交给分词器 比如ik 当判断分词后的结果不包含弟弟,  则将弟弟2个字录入ik词库

 

当用户输入 “你好弟弟”  因为录入了词库 分词 [你好,弟弟]  拿这2个字去数据库in  如果找到则表示是铭感词 做后续逻辑

缺点:相较第一种依赖了数据库去匹配是否是铭感词

但是这个问题是可以解决的,可以采用布隆过滤器 将系统录入的铭感词录入。

当用户输入分词后 先到布隆过滤器去匹配 如果匹配到有 则表示有可能包含铭感词语(可以了解一下布隆过滤器算法),这个时候才到数据库去匹配。

90%以上的用户输入都不会包含铭感词 通过布隆过滤器减少了大量数据库匹配io,同时通过布隆过滤器也节省了内存,布隆过滤器测试地址https://krisives.github.io/bloom-calculator/

如3000个铭感词 百分之1的误差占用内存35k

 

posted @ 2023-03-30 09:38  意犹未尽  阅读(45)  评论(0编辑  收藏  举报