# wordsfilter **Repository Path**: graysonzhang/wordsfilter ## Basic Information - **Project Name**: wordsfilter - **Description**: 针对敏感词过滤的工具,可以对包含敏感词的字符串进行处理,如色情、政治、暴力、人名等特殊字符,防止发表一些不和谐的词条给业务运营带来风险。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2023-05-11 - **Last Updated**: 2023-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: 敏感词, 敏感词过滤, DFA, 敏感词提取 ## README # 敏感词过滤 ## 敏感词过滤简介 敏感词过滤功能可以对包含敏感词的字符串进行处理,如色情、政治、暴力、人名等特殊字符,防止发表一些不和谐的词条给业务运营带来风险。 ## 敏感词过滤核心能力及场景 - 发现敏感词:判断文本中是否包含敏感词。当用户输入带敏感词的请求时,拒绝提供服务,并警告。 - 屏蔽敏感词:将敏感词替换为其他字符,比如*号。当系统对外展示相关内容是,屏蔽掉敏感词。 - 提取敏感词:提取文本中的敏感词,一般可以用于内容审核或者用户警告。 - 标记敏感词:对文本中的敏感词进行标记,比如高亮显示,一般可以用于内容审核或者用户警告。 ## 敏感词过滤算法对比 对于敏感词过滤有不同的算法,如下为各种算法或方法的简单对比。**在本实现中,采用DFA算法**。 | 算法名称 | 算法简介 | 优缺点 | | :------------| :------------|:-----------------------------| | match算法 | 暴力、正则、KMP等匹配算法 | 原理简单、实现简单,但运算量大,效率差 | | TrieTree算法 | 通过公共前缀匹配 | 效率相对较高、内存开销较少,但大文本过滤效率稍低 | | AC算法 | 基于Trie树的多模式匹配算法 | 词汇量少时性能较高,大的时候性能一般 | | DFA算法 | 基于确定有穷自动机的多模式匹配算法 | 匹配性能高、适合大批量敏感词,占用内存和敏感词字段成正比 | | BoomFilter | 基于布隆过滤器实现 | 内存消耗少、性能搞,概率性遗漏 | ## 当前版本说明 ### 功能说明 当前版本为一个简易版本,目前实现了两个功能: - exist接口:发现敏感词。如果输入中包含敏感词,返回true,如果不包含返回false. - replace接口: 屏蔽敏感词。如果输入中包含敏感词,将敏感词替换为*号。 ### 敏感词库 当前版本只是为了验证基础功能,敏感词库使用开源词库,如下所示,可以自行添加更多敏感词,放入工程的resource/wordfiles文件夹下面。 - https://github.com/cjh0613/tencent-sensitive-words - https://github.com/jkiss/sensitive-words ### 使用说明 当前版本没有做打包等工作,如需体验,可以通过git下载源码,并用IDE打开后,编译运行,然后在浏览器上输入如下地址,通过网页进行功能体验。 ```shell http://localhost:8080/swagger-ui.html# ``` > 该工程使用springboot搭建,并集成了swagger工具,可以通过网页端调用RESTApi ## 后续功能规划 1. 敏感词管理功能:可以增删改查敏感词,敏感词分类管理(需要评估是否需要) 2. 敏感词动态更新:通过定时任务动态更新敏感词,如从数据库中实时同步等 3. 敏感词其他功能:如发现、提取、标记和判断 4. 敏感词特殊处理:增加对繁体字、拼音、大小写、字符填充等特殊情况处理 5. 敏感词过滤策略:不同处理策略,比如替换、删除等 ## 云服务商方案 - [阿里云文本安全文档](https://help.aliyun.com/document_detail/464388.html?spm=a2c4g.433565.0.0.74803c7coDQgU6) - [腾讯云文本安全文档](https://cloud.tencent.com/document/product/1124/59257)