mint-filter 基于 Aho–Corasick 算法更轻巧的 JavaScript 敏感词过滤库
基于 Aho–Corasick 算法,更轻巧的 JavaScript 敏感词过滤库。支持 Node.js、浏览器等环境(JavaScript/TypeScript),支持敏感词替换成 * 号。
支持平台
本插件支持Node及浏览器平台,因为使用了Set等新特性,在浏览器上需要Babel的支持!
说明
基于 Aho–Corasick 算法实现的敏感词过滤方案,Aho–Corasick 算法是由 Alfred V. Aho 和 Margaret J.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
使用
CommonJS 引用
// Mint导出是 export default Mint
// 所以在使用require引用的时,Mint可能挂载在default下面
const Mint = require('mint-filter').default
const mint = new Mint(['敏感词数组'])
// 异步方法,该方法返回的是一个Promise对象
mint.filter('word').then((res) => {})
// 同步方法
mint.filterSync('word')
TypeScript / ES Module引用
import Mint from 'mint-filter'
const mint = new Mint(['敏感词数组'])
// 异步方法,该方法返回的是一个Promise对象
mint.filter('word').then((res) => {})
// 同步方法
mint.filterSync('word')
方法
所有方法都提供同步/异步两种。英文字母会全部转换成大写比较。
filter(word, options)
word
<[string]>:需要过滤的字符串。options
<[FilterOptions]>:是一个对象,支持的参数replace
是否将敏感词替换成*、words
是否提取敏感词,全部为布尔值。- returns: <[Promise]<[FilterValue]>>
该方法将返回过滤文本和被过滤的敏感词。
import Mint from 'mint-filter'
const mint = new Mint(['敏感词'])
mint.filter('这是一个敏感词字符串')
.then(data => {
console.log(data) // { text: '这是一个***字符串', words: [ '敏感词' ], pass: false }
})
mint.filter('这是一个敏感词字符串', { replace: false })
.then(data => {
console.log(data) // { text: '这是一个敏感词字符串', words: [ '敏感词' ], pass: false }
})
filterSync(word, replace)
word
<[string]>:filter的同步方法。options
<[FilterOptions]>:是一个对象,支持的参数replace
是否将敏感词替换成*、words
是否提取敏感词,全部为布尔值。- returns: <[FilterValue]>
validator(word) 快速校验文本
word
<[string]>:需要验证的字符串文本。- returns: <[boolean]>
判断文本是否通过敏感词验证,发现敏感词会立即返回 false
。
相关地址
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论