锁定老帖子 主题:使用DFA实现文字过滤
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-14
nod0620 写道 还有个问题,我的违禁词汇是av,用户输入have,但是被检测出来了,这个该怎么改进 这个可以用前后是否是空格来判定,你是英文的?如果是中文基本不需要考虑这个问题。 |
|
返回顶楼 | |
发表时间: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这个位置上,然后重新做状态转移。这样就应该满足你的需求了。 |
|
返回顶楼 | |
发表时间:2009-12-16
不错,思路清晰~那么稀疏的数组想办法压缩压缩就好了
|
|
返回顶楼 | |
发表时间:2009-12-24
要实现我提到的那种需求,DAF树上应该需要多个指针吧,而且还要多个word数组来装状态未结束的词.
不过算法确实还是基于回退和继续查找的. 呵呵 看起来有点怪怪的 中(等待获得词状态) -> 中国(获得词状态) -> 有子节点所以继续转换 -> 中国人(获得词状态) -> 没有子节点 退出转换. |
|
返回顶楼 | |
发表时间:2010-01-04
拜读神贴,受益匪浅
敏感词里面有:“中国”,“中国人”这样的场景是不是 elif temp == 1 or temp[1] == 1: 这句处理? python数组越界会报错么?好象是会的? 朦胧中....... |
|
返回顶楼 | |