禁用词表达式匹配处理问题

yuzhouliu 发布于 2013/02/06 09:13
阅读 133
收藏 0

在有些论坛里需要设置禁用的词汇,这个大家都知道原因,我的问题是这样的,禁用词汇的设置表达式是这样的,如:异性&(开房|同居|住宿)  ,就是异性不能和 开房 同居 住宿同时出现,这是设置禁用词汇的规则,那么怎么判断 一段文字中匹配了这样的规则呢?匹配的禁用词是哪个?

我用的是java语言,怎么处理呢,是不是用正则处理,就是把禁用表达式 异性&(开房|同居|住宿)  处理转换成 java正则表达式?

希望大家给个意见,谢谢!

加载中
0
yuzhouliu
yuzhouliu

多次试验后,我用一个笨的方法解决了这个问题

比如句子: XYTO A C B D E.

规则表达式是: A&(B|C) 

那么一次在句子中查找 A,B,C 如果找到就是true否则就是false.根据查找结果和规则表达式很容易得出: true&&(true||true) ,把这个结果使用表达式运算后就是true,就是匹配,匹配的词就是对应true的位置的原词。

0
华兹格
华兹格
围观,屏蔽字过滤的问题我还没做~~~坐等高人解答
0
_wq
_wq

正则表达式我觉得处理效率不高,试想如果文本很长,这种规则又比较多,那么可能会需要多次遍历输入文本,代价会比较高,我建议是把输出的规则拆成一个个的词,然后在文本里面查找这些词,最后根据查找结果再回来判定是否满足规则

比如有两个规则: A&(B|C), B&(D|E|F),那么

1. 分解成 A,B,C,D,E,F

2. 在输入文本里面查找这些字符串(多字符串查找,参考DFA之类的实现)

3. 假设匹配出的是A,B,C,然后再回去判定是否满足规则(自己想办法实现)得出匹配A&(B|C)规则而不匹配B&(D|E|F)规则


yuzhouliu
yuzhouliu
谢谢,目前我还没想好,但是我也计划用拆分法
返回顶部
顶部