发布一个敏感词过滤的小项目

项目背景

对于用户发表的内容,我们通常要做一些敏感词的检测,如果敏感词规模很小,逐个词进行 Search 也没啥大问题;但如果敏感词规模很大,并且会逐渐积累,那么就需要一种新的算法来提高检测效率。

实现原理

采用红黑树来存储敏感词汇列表,采用全分词算法来检测敏感词。

项目安装

>> wget "http://pysoft.googlecode.com/files/filter_keywords-0.1.tar.gz"
>> tar -zxf http://pysoft.googlecode.com/files/filter_keywords-0.1.tar.gz
>> cd filter_keywords-0.1
>> python setup.py install

使用样例

>> import filter_keywords
>> dir(filter_keywords)
['FkwDict', '__doc__', '__file__', '__name__', 'filter_keywords', 'fkw_full_seg']

创建字典

>> from filter_keywords import FkwDict
>> fkw_dict = FkwDict(10)    # 参数为 Hash 的大小,可根据关键词规模自行调整
>> dir(fkw_dict)
['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'add_word', 'load_dict', 'search_word']

添加一个关键词

>> fkw_dict.add_word(u"叮当猫".encode("utf-8"))  # 只接受 utf-8 编码,内部不做编码检测
>> fkw_dict.search_word(u"叮当猫".encode("utf-8")) 
True
>> fkw_dict.search_word(u"叮当猫2".encode("utf-8")) 
False

加载字典文件

fkw_dict.load_dict("src/word.txt") # 字典文件只接受 utf-8 编码,每行一个关键词
print fkw_dict.search_word(u'世界'.encode("utf-8"))

注: 网上收集了一个字典文件,下载地址如下:
http://pysoft.googlecode.com/svn/trunk/c-project/filter_keywords/src/word.txt

敏感词检测

text = u"工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作 "
result = filter_keywords(fkw_dict, text.encode("utf-8"))
print " ".join([unicode(item, "utf-8").encode("GBK") for item in result])

检测结果

工信 处女 干事 每月 月经 经过 下属 科室 都要 亲口 口交 交代 口交 交换 交换机 技术 技术性 性器 器件 安装 工作

其它信息

被你看出来了,其实,我是做分词的,全分词算法 函数 filter_keywords 只是 fkw_full_seg 的 alias。

使用 mem_collector 管理内存,红黑树存储字典条目,经 Valgrind 检测,无内存泄漏。 欢迎下载试用,有问题麻烦及时反馈,谢谢。

注:mem_collector 项目
http://chinaren.wei.blog.163.com/blog/static/13907612920103225325129/

C 语言接口,请参照 src/test.c 文件。

转载于:https://my.oschina.net/apoptosis/blog/148144

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值