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

原创
2013/04/01 10:17
阅读数 3.9K
    上个周末出去和姑娘们看电影,各种娱乐,忘记写博客了(话说我觉得前者更美好),这周没事儿,写一篇。
    先扯几句,说实话,我至今搞不懂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,有什么问题大家可以留言~~愚人节发帖子,很有喜感啊~

展开阅读全文
加载中
点击加入讨论🔥(5) 发布并加入讨论🔥
打赏
5 评论
14 收藏
2
分享
返回顶部
顶部