侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

common-tools(3)之基于DFA的敏感词查找

2022-06-19 星期日 / 0 评论 / 0 点赞 / 74 阅读 / 2437 字

上个周末出去和姑娘们看电影,各种娱乐,忘记写博客了(话说我觉得前者更美好),这周没事儿,写一篇。 先扯几句,说实话,我至今搞不懂DFA(有限状态自动机)是个怎样的东西,大学那会儿昏昏沉沉,除了漂

    上个周末出去和姑娘们看电影,各种娱乐,忘记写博客了(话说我觉得前者更美好),这周没事儿,写一篇。
    先扯几句,说实话,我至今搞不懂DFA(有限状态自动机)是个怎样的东西,大学那会儿昏昏沉沉,除了漂亮的计算机老师,啥也没记住……刚才搜搜维基百科,一堆奇形怪状的符号的也懒的看了,就说说我的理解吧(只针对需求)。应该说,这种方法是一种“空间换时间”的方法,将一堆敏感词构建成一棵树,然后载入文本来查找这棵树,据说效率很高。


    OK,进入主题。这个工具方法其实来自网上搜的一篇博文,地址:


    http://ahuaxuan.iteye.com/blog/336577?


    博客中应该对DFA理论作了一些介绍,有兴趣的可以去看看,并且博主提供了源代码。我的工具类中这个功能就是根据其源码改进而来的。先说使用方法,给出Demo源码。

package com.baijob.commonTools.wordSraech;import org.junit.Assert;import org.junit.Test;import com.baijob.commonTools.wordSearch.Words;public class WordSearchTest {	@Test	public void wordSearchTest() {		Words words = new Words();		//----------------------------添加敏感词 start		words.addWord("敏感词1");		words.addWord("敏感词2");		words.addWord("敏感词3");		words.addWord("敏感词4");		words.addWord("敏感词5");		//----------------------------添加敏感词 end				String content = "我是一句话,我包含了敏感词2,你能找到敏感词2吗?还有敏  感  词4";		//给定文本是否包含敏感词		Assert.assertTrue(words.contains(content));		//返回第一个找到的敏感词		System.out.println(words.getFindedFirstWord(content)); //敏感词2		//返回找到的所有敏感词		System.out.println(words.getFindedAllWords(content));	    //[敏感词2, 敏感词2, 敏感词4]	}}

源码请看这里https://github.com/looly/common-tools/tree/master/src/main/java/com/baijob/commonTools/wordSearch

除了基本的方法,此类还有一些重载方法,多个一个Type参数,方便区分不同类型的敏感词从而分分别查找。

OK,有什么问题大家可以留言~~愚人节发帖子,很有喜感啊~

广告 广告

评论区