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