论坛首页 综合技术论坛

使用DFA实现文字过滤

浏览 72328 次
该帖已经被评为良好帖
作者 正文
   发表时间:2009-12-14  
nod0620 写道

还有个问题,我的违禁词汇是av,用户输入have,但是被检测出来了,这个该怎么改进

这个可以用前后是否是空格来判定,你是英文的?如果是中文基本不需要考虑这个问题。
0 请登录后投票
   发表时间:2009-12-14  
solonote 写道
text.txt:
中国人
words.txt:
中国
中国人

result:
cost time :  0.0160000324249
I have find some words as  1
中国 1

这种情况有问题的,而且不能以ab,bc这种情况来回退.
请问楼主如何处理?

再复杂一点:
words.txt:
中国 国人 中国人

我期望的结果是:
中国 1
国人 1
中国人 1

请教一下要实现这种需求,应该在算法上做些什么改进?

一般来说如果是违禁词,那么只要有一个满足条件,那么就认为该文是有问题的,你应该不是用在违禁词过滤的场景了吧,像你这样的需求理论上来讲是没有问题,只需要在状态转换的过程中,每次遇到一个符合条件的词之后,继续寻找,以满足最大匹配,那么就可以找出中国,和中国人,我代码中也有体现。而中国人和国人的问题,就需要遇到匹配词之后,指针需要返回到刚才遇到匹配词的位置+1这个位置上,然后重新做状态转移。这样就应该满足你的需求了。
0 请登录后投票
   发表时间:2009-12-16  
不错,思路清晰~那么稀疏的数组想办法压缩压缩就好了
0 请登录后投票
   发表时间:2009-12-24  
要实现我提到的那种需求,DAF树上应该需要多个指针吧,而且还要多个word数组来装状态未结束的词.
不过算法确实还是基于回退和继续查找的.
呵呵 看起来有点怪怪的
中(等待获得词状态) -> 中国(获得词状态) -> 有子节点所以继续转换 -> 中国人(获得词状态) -> 没有子节点 退出转换.

0 请登录后投票
   发表时间:2010-01-04  
拜读神贴,受益匪浅

敏感词里面有:“中国”,“中国人”这样的场景是不是
elif temp == 1 or temp[1] == 1: 
这句处理?

python数组越界会报错么?好象是会的?
朦胧中.......
0 请登录后投票
论坛首页 综合技术版

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