锁定老帖子 主题:DFA敏感词过滤------java版
精华帖 (3) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-15
使用DFA想法很好,能实现基本过滤功能。有两个重要点说一下:
内存优化: 直接256*256太浪费内存,每层中只有少量能使用到,有大量空间被浪费,推荐使用双数组字典树。 分词: 中英文文本在过滤时需要考虑分词,否则就会出现很多误匹配,英文可以考虑空格分词,中文可以使用词典进行分词,分词后再进行匹配。 违禁词过滤是一个很复杂的过程,包括预处理,算法选取、模糊处理、跳词等过程。如果想商业化,需要做很多工作。 |
|
返回顶楼 | |
发表时间:2011-10-17
ansjsun 写道 我的理解是 4个汉字 8个 byte 那么最后一层将是 18446744073709551616个节点
如果真是这样..那这个东西根本不能用 还有一些地方 int index = bytes[i] & 0xff; //字符转换成数字 byte 转 int 需要这么干么?这么干的好处是? 因为java不支持 unsigned byte |
|
返回顶楼 | |
发表时间:2011-10-17
learnworld 写道 使用DFA想法很好,能实现基本过滤功能。有两个重要点说一下:
内存优化: 直接256*256太浪费内存,每层中只有少量能使用到,有大量空间被浪费,推荐使用双数组字典树。 确实很浪费内存,很多内存都是空着的 下一步研究一下 ‘双数组字典树’ |
|
返回顶楼 | |
发表时间:2011-11-26
怎么看都就是个Trie Tree ,实现还不是很好。。怎么就成DFA了。。
|
|
返回顶楼 | |
发表时间:2011-11-26
每一层所有节点都有子节点/子树的情况下才会有很多节点,实际上不会有那么多节点的,这种方案完全可行。只不过我觉得10W条数据化6秒过滤完是不是有点慢?每条数据后很多文本吗?1K以上?还是你是把log.Debug开着计算的时间?
|
|
返回顶楼 | |