锁定老帖子 主题:使用DFA实现文字过滤
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-21
谁有java版的DFA文字过滤?
|
|
返回顶楼 | |
发表时间:2009-05-18
楼主
你这样做还有一个问题 你采用GBK编码 假如某个代检查的文本的编码为:45,47,12,23,23,20 如果关键字中编码为:[b]47,12,23,23[/b] 红色标记处 这样会导致查询到了关键字,但是实际并不是关键字中的 我现在就遇到这个问题 |
|
返回顶楼 | |
发表时间:2009-05-18
刚才提的问题是我这两天碰到的
不过我用的是AC算法实现 |
|
返回顶楼 | |
发表时间:2009-05-19
pantiansheng 写道 楼主
这个只要转码就行了,把关键字和文本弄成一样编码的,然后再匹配
你这样做还有一个问题 你采用GBK编码 假如某个代检查的文本的编码为:45,47,12,23,23,20 如果关键字中编码为:[b]47,12,23,23[/b] 红色标记处 这样会导致查询到了关键字,但是实际并不是关键字中的 我现在就遇到这个问题 |
|
返回顶楼 | |
发表时间:2009-05-21
最后修改:2009-05-21
为了能看懂楼主的代码,又复习了一遍python,呵呵
有个问题没弄明白,能否请教一下: 就是在searchWord函数里面,应该是对传入参数str文本进行DFA状态转移,代码大意是 while a < len(str): if temp == None: //状态转移失败,回溯字符串指针 //如果之前word已经保存了2个字符,则 指针-2 a = a - len(word) elif temp == 1 or temp[1] == 1: //状态转移结束,成功匹配到一个字符串 //这里不理解了,既然已经成功匹配到一个串,那么无需回溯指针呀 //直接跳过当前成功匹配的串,继续DFA为什么不可以呢? a = a - len(word) + 1 //为什么成功还要回溯指针呢? else: //状态转移,未结束 word.append(index) a = a + 1 不知道我那里理解的有问题,还望不吝赐教,先谢过啦 |
|
返回顶楼 | |
发表时间:2009-05-21
对于这种方法,如果用PHP来写的话,如果有1000个禁用词语,光一个Trie树就需要相当大的内存占用量,速度应该快不了,貌似不怎么可取哦
|
|
返回顶楼 | |
发表时间:2009-05-21
最后修改:2009-05-21
bachmozart 写道 为了能看懂楼主的代码,又复习了一遍python,呵呵
````````````````` 文本abc 关键词,ab,bc,回退一步是为了尽量搜索出其他关键字 灰~机 写道 对于这种方法,如果用PHP来写的话,如果有1000个禁用词语,光一个Trie树就需要相当大的内存占用量,速度应该快不了,貌似不怎么可取哦
1000个小case了,6w个关键字在jvm占用180m的内存。还说得过去。 |
|
返回顶楼 | |
发表时间:2009-05-21
ahuaxuan 写道 bachmozart 写道 为了能看懂楼主的代码,又复习了一遍python,呵呵
````````````````` 文本abc 关键词,ab,bc,回退一步是为了尽量搜索出其他关键字 明白了,多谢 |
|
返回顶楼 | |
发表时间:2009-05-21
ahuaxuan 写道 1000个小case了,6w个关键字在jvm占用180m的内存。还说得过去。 写了个PHP的该算法,又用php的array特性,缩小了Trie树占的内存量。效率还算过得去 比preg_match_all那个正则方法效率高6倍左右 |
|
返回顶楼 | |
发表时间:2009-05-21
楼主
请教个问题 在实时情况下 如何保证重新加载同步问题 |
|
返回顶楼 | |