论坛首页 Java企业应用论坛

DFA敏感词过滤------java版

浏览 24202 次
精华帖 (3) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-15  
使用DFA想法很好,能实现基本过滤功能。有两个重要点说一下:
内存优化: 直接256*256太浪费内存,每层中只有少量能使用到,有大量空间被浪费,推荐使用双数组字典树。
分词: 中英文文本在过滤时需要考虑分词,否则就会出现很多误匹配,英文可以考虑空格分词,中文可以使用词典进行分词,分词后再进行匹配。
违禁词过滤是一个很复杂的过程,包括预处理,算法选取、模糊处理、跳词等过程。如果想商业化,需要做很多工作。
0 请登录后投票
   发表时间:2011-10-17  
ansjsun 写道
我的理解是 4个汉字 8个 byte  那么最后一层将是  18446744073709551616个节点

如果真是这样..那这个东西根本不能用


还有一些地方

int index = bytes[i] & 0xff; //字符转换成数字   



byte 转 int 需要这么干么?这么干的好处是?



因为java不支持 unsigned byte
0 请登录后投票
   发表时间:2011-10-17  
learnworld 写道
使用DFA想法很好,能实现基本过滤功能。有两个重要点说一下:
内存优化: 直接256*256太浪费内存,每层中只有少量能使用到,有大量空间被浪费,推荐使用双数组字典树。

确实很浪费内存,很多内存都是空着的
下一步研究一下 ‘双数组字典树’
0 请登录后投票
   发表时间:2011-11-26  
怎么看都就是个Trie Tree ,实现还不是很好。。怎么就成DFA了。。
0 请登录后投票
   发表时间:2011-11-26  
每一层所有节点都有子节点/子树的情况下才会有很多节点,实际上不会有那么多节点的,这种方案完全可行。只不过我觉得10W条数据化6秒过滤完是不是有点慢?每条数据后很多文本吗?1K以上?还是你是把log.Debug开着计算的时间?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics