mint-filter 基于 Aho–Corasick 算法更轻巧的 JavaScript 敏感词过滤库

发布于 2020-12-03 12:33:36 字数 3698 浏览 1758 评论 0

基于 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]替换敏感词
11000< 1.35ms< 1.55ms
25000< 3.60ms< 3.60ms
310000< 8.10ms< 9.81ms
420000< 15.03ms< 16.03ms
550000< 20.83ms< 21.18ms
6100000< 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

已经忘了多久

文章 0 评论 0

15867725375

文章 0 评论 0

LonelySnow

文章 0 评论 0

走过海棠暮

文章 0 评论 0

轻许诺言

文章 0 评论 0

信馬由缰

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文