请教下java中关于敏感词检测程序的设计思路?
如题,现在手头有现成的敏感词库文件(格式是“敏感词|等级”),还有分词工具jcseg,项目工程里要实现一个对传入的文本(100~200字)进行敏感词检测的功能。
一开始我的思路是这样:
- 项目启动时对载入敏感词库作为缓存(一个大map,敏感词为key,等级为value)
- 对请求传入的文本分词,遍历分词结果,每个分词在map中查找,如果有值,则请求文本存在敏感词
今天百度了下,还有其他方法:如项目加载时把敏感词库拼接成一个大的正则表达式,然后直接对文本匹配(貌似不用预先分词),这样效果会比我想的更好吗? 或者说还有没有其他敏感词检测方案?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
正则在过滤词组多的时候,效率很慢。 分词相对更准确,比如是‘他妈`是过滤词,那么,那个弹吉他妈妈唱的真好听。就不会被过滤,而正则就肯定匹配上了。
这个我也做过,我是用的多模匹配,wumamber算法,如果敏感词典不是很大的话可以试试。
不要忽略网民的智慧
http://www.cnblogs.com/chenssy/p/3751221.html#2966041
应该要用正则表达式吧?
谢谢,我说的等级可能就是频次吧,第一次接触这块,没啥概念。
以前好像看到过一个方案,但敏感词没有等级之说,只要你先把词库set进类中,然后传入文本,它就会反馈出现过1次以上的敏感词,并返回出词和出现的次数。你搜搜,好像是用树形节点实现的算法,貌似非常快。
jcseg作者亲自回答,真荣幸:) 确实目前我的需求比较简单,只是从一个短文本中找出有没有敏感词而已。昨天查了很多资料,最后决定还是先用把敏感词载入做成一个关联数组和索引数组,然后对目标文本进行逐字逐词查敏感词索引的方法来做。 参考了 http://bbs.9ria.com/thread-88142-1-1.html 这个帖子里的方法。以后如果有更复杂的需求,还是会考虑分词处理一下
回复
过奖了,其实我很早就看到你的提问了。苦于新安装的系统无法输入中文。 是一个有效的方法。。
从最终的过滤效果来看,其实使用正则是比分词后更好的.
例如:骂人,假设是一个敏感词,如果写成:"骂 人", jcseg是会切分成 骂/ 人/ 两个词条的.
但是实际上,人还是会看成本身的意思,而"/骂s{1,}人/"这个正则 则可以过滤掉.
目前我使用的方法也是正则,如果你要使用Jcseg,Jcseg从1.9.4开始支持检测模式切分,正好可以用于这个需求:也就是直接返回词库中有的词条,你将所有的敏感词加入到词库中,只要返回了词条就是敏感词.
具体还是要考虑你的使用场合吧.