敏感词过滤算法

一:需求

基于网站中用户进行输入的地方恶意使用敏感词等,在用户输入之后进行敏感词屏蔽,相比于网络上的大多数算法,DFA算法属于效率比较高的一种,以下是具体实现。

二:实现

(1):目录结构
[root@rainsty DirtyWordOfFilter]# ll
total 20
-rw-r--r-- 1 root root 1398 Apr 20 21:39 api.py
-rw-r--r-- 1 root root   45 Apr 20 21:39 __init__.py
drwxr-xr-x 2 root root 4096 Apr 22 22:47 __pycache__
drwxr-xr-x 2 root root 4096 Apr 20 21:39 static
-rw-r--r-- 1 root root  220 Apr 20 21:39 __version__.py
[root@rainsty DirtyWordOfFilter]# 
(2):词库
将需要过滤的词,做成json文件,利用python的dict数据结构,实现快速查询。
实例如下:WordLibrary.json
{
    "一":{
        "夜":{
            "情":{
                "\u0000":0
            },
            "欢":{
                "\u0000":0
            }
        },
        "本":{
            "道":{
                "\u0000":0
            }
        }
    }
}
(3):API代码

----api.py

import os
import json

HERE = os.path.realpath(__file__).strip()[:-6]


class DFAFilter(object):
    def __init__(self):
        self.keyword_chains = {}
        with open(os.path.join(HERE, 'static', 'WordLibrary.json'), 'r', encoding='utf-8') as f:
            self.keyword_chains = json.loads(f.read())
        self.delimit = '\x00'

def filter(self, message, word_re="*"):
    message = message.lower()
    ret = []
    start = 0
    while start < len(message):
        level = self.keyword_chains
        step_ins = 0
        for char in message[start:]:
            if char in level:
                step_ins += 1
                if self.delimit not in level[char]:
                    if step_ins == 1:
                        level = level[char]
                    else:
                        ret.append(word_re * step_ins)
                        start += step_ins - 1
                        break
                else:
                    ret.append(word_re * step_ins)
                    start += step_ins - 1
                    break
            else:
                ret.append(message[start])
                break
        else:
            ret.append(message[start])
        start += 1

    return ''.join(ret)

三:源码地址分享

源码地址:Github:[https://github.com/Rainstyed/rainsty/tree/master/Algorithm/DirtyWordOfFilter]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值