基于Aho–Corasick算法,更轻巧的JavaScript敏感词过滤库🚀。支持Node.js、浏览器等环境(JavaScript/TypeScript),支持敏感词替换成*号。
4.0 版本当前只是通过了我写的单测,并未实际上线使用,有兴趣的小伙伴可以帮忙写test,覆盖更多更复杂的情况。
本插件支持Node及浏览器平台;
基于Aho–Corasick算法实现的敏感词过滤方案,Aho–Corasick算法是由Alfred V. Aho和Margaret J.Corasick 发明的字符串搜索算法,用于在输入的一串字符串中匹配有限组“字典”中的子串。它与普通字符串匹配的不同点在于同时与所有字典串进行匹配。算法均摊情况下具有近似于线性的时间复杂度,约为字符串的长度加所有匹配的数量。
实现详细说明(搜索算法未更新,请查看代码):
个人博客:《TypeScript:Aho–Corasick算法实现敏感词过滤》
掘金社区:《TypeScript:Aho–Corasick算法实现敏感词过滤》
使用20000个随机敏感词实例化的平均时间:< 96ms
测试字符串包含随机生成的汉字、字母、数字。 以下测试均在20000个随机敏感词构建的树下进行测试,每组测试6次取平均值:
编号 | 字符串长度 | 不替换敏感词[replace:false] | 替换敏感词 |
---|---|---|---|
1 | 1000 | < 1.35ms | < 1.55ms |
2 | 5000 | < 3.60ms | < 3.60ms |
3 | 10000 | < 8.10ms | < 9.81ms |
4 | 20000 | < 15.03ms | < 16.03ms |
5 | 50000 | < 20.83ms | < 21.18ms |
6 | 100000 | < 29.02ms | < 34.45ms |
需要注意的是,实际生产环境运行速度会比上面测试数据更快。
npm i -S mint-filter
或
yarn add mint-filter
const { Mint } = require('mint-filter')
import Mint from 'mint-filter'
const mint = new Mint(['敏感词数组'])
// 基本使用
mint.filter('需要验证的文本')
• new Mint(keys
)
Name | Type |
---|---|
keys |
string [] |
▸ add(key
, build?
): boolean
新增敏感词
Example
const status = mint.add('敏感词')
Name | Type | Default value | Description |
---|---|---|---|
key |
string |
undefined |
关键词 |
build |
boolean |
true |
是否构建树,默认不用传递 |
boolean
状态
▸ delete(key
): "update"
| "delete"
删除关键字
Example
const status = mint.delete('敏感词')
Name | Type | Description |
---|---|---|
key |
string |
关键词 |
"update"
| "delete"
状态(update | delete),告知用户是删除了树上的节点还是单纯的更新了节点
▸ filter(text
, options?
): FilterData
过滤文本
Example
mint.add('无法通过')
let status = mint.filter('这是一句无法通过的文本')
console.log(status) // { words: ["无法通过"], text: "这是一句****的文本" }
status = mint.filter('这是一句无法通过的文本', { replace: false })
console.log(status) // { words: ["无法通过"], text: "这是一句无法通过的文本" }
Name | Type | Description |
---|---|---|
text |
string |
文本内容 |
options? |
Pick <FilterOptions , "replace" > |
- |
FilterData
FilterData
▸ verify(text
): boolean
检测文本是否通过验证
Example
mint.add('无法通过')
const status = mint.verify('这是一句无法通过的文本')
console.log(status) // false
Name | Type | Description |
---|---|---|
text |
string |
文本内容 |
boolean
Boolean
开发:
npm run dev
构建:
npm run build