牛客网项目第三章-开发社区核心功能-过滤敏感词
在访问某个网站的时候,在网站上发布一些内容,该网站会对我们发布的内容进行过滤,色情、暴力等非法内容会被隐去,或者把这些词汇更换成*号;发布内容可以看成一串字符串,可以使用API对字符串里面的内容进行替换,例如String中replace();但网站在实际运营过程中,敏感词比较多,有几十甚至上百,输入的字符串也可能过长,使用String性能太差,通常会采用前缀树,来自己生成一个敏感词过滤方法。下节发布帖子可以用到该敏感词过滤方法。
一、前缀树
1.查找效率高,消耗内存大,以空间换时间
2.应用:(1)字符串检索,可以检索到一串字符串中的敏感词
(2)词频统计:可以统计出一篇文章中的哪个词出现的频率最多,热点词
(3)字符串排序:对文章进行排序
二、敏感词过滤器工具
1.定义前缀树
前缀树过滤敏感词的逻辑
2.根据敏感词,初始化前缀树
(1)前缀树根节点为空,除了根节点其余节点只包含一个字符,从根节点到某一个节点就是当前该节点对应的字符串,每个节点的所有自己点包含的字符串不同,相同需要合并
(2)通过前缀树判断输入的字符串有无敏感词
需要三个指针,第一个指针指向根节点,第二个指针指向字符串的第一个字符(标记敏感词的开头),第三个指针指向字符串的第一个字符(标记敏感词的结尾)定义一个变量StringBuilder存放过滤后的字符串
三、编写过滤敏感词的方法
1.首先在resources包下定义存放敏感词的文件sensitive-words.txt
2.在util包下定义敏感词过滤工具类SensitiveFilter,为了复用方便,加注解由容器管理
(1)在SensitiveFilter中定义private修饰的内部类前缀树
(2)根据敏感词初始化前缀树
(3)定义将敏感词加到前缀树的方法
(4)检索敏感词
(5)在test包下新建一个测试类SensitiveTests