FastScan

编程之家收集整理的这个编程导航主要介绍了FastScan编程之家,现在分享给大家,也给大家做个参考。

FastScan 介绍

苦于没有找到一个比较合适的敏感词过滤库,所以我自己花了点时间撸了一个。 它基于广为人知的 ahocorasick 字符串匹配算法,使用原生的 js 实现,浏览器和服务端都可以使用。  

安装方法

# 安装到当前项目

npm install --save fastscan

使用方法

import FastScanner from fastscanvar words = ["今日头条","微信","支付宝"]var scanner = new FastScanner(words)var content = "今日头条小程序终于来了,这是继微信、支付宝、百度后,第四个推出小程序功能的App。猫眼电影率先试水,出现在今日头条。"var offWords = scanner.search(content)console.log(offWords)var hits = scanner.hits(content)console.log(hits)-------------[ [ 0,'今日头条' ],[ 15,'微信' ],[ 18,'支付宝' ],[ 53,'今日头条' ] ]{ '今日头条': 2,'微信': 1,'支付宝': 1 }

API

查询匹配的词汇以及所在字符串的位置 search(content,option={})

查询匹配词汇的命中数量 hits(content,options={})

临时动态增加词汇,不修正其它词汇的回溯指针 add(word)

options = {quick: false,longest: false}

quick 选项表示快速模式,匹配到一个就立即返回

longest 表示最长模式,同一个位置出现多个词汇(中国、中国人),选择最长的一个(中国人)

默认匹配出所有的词汇,同一个位置可能会出现多个词汇

性能

项目代码使用原生的 js 实现,我开始非常担心词汇树的构建速度会不会太慢。经测试后发现虽然性能不算太快,不过也不是太差,对于绝大多数项目来说已经绰绰有余了。我分别测试了构造 20000~100000 个词汇的树结构,每个词汇随机在 10~20之间,耗时情况如下

单词数

耗时

20000 words

385ms

40000 words

654ms

60000 words

1108ms

80000 words

1273ms

100000 words

1659ms

如果你的词汇比较短小,构建树的速度还会更快。

查询性能我并不担心,因为 ahocorasick 算法在词汇长度较短的情况下复杂度是 O(n),性能和被过滤内容的长度呈线性变化。下面我使用 100000 词汇量构建的树分别对 20000 ~ 100000字的内容进行了过滤,耗时情况如下

字数

耗时

20000 words

14ms

40000 words

32ms

60000 words

67ms

80000 words

71ms

100000 words

84ms

fastscan 可以做到以迅雷不及掩耳的速度扫遍一幅 10w 字的长文,10w 大概就是一部中篇小说的长度了。如果你要扫百万字的长篇小说,那还是建议你分章分节来扫吧。

内存占用也是需要考虑的点,内存对于 Node 程序来说本来就非常有限,如果因为敏感词树占据了太大的内存那是非常要不得的大问题。所以我也对内存占用进行了测试,下面是测试的结果

词汇数

内存占用

0 words

14M

20000 words

81M

40000 words

135M

60000 words

184M

80000 words

234M

100000 words

277M

词汇量不是太大的话,这样的内存占用还是可以接受的。如果你对内存占用不满意,那就只能使用 Node 的 C 语言扩展来打造更高性能的库了,考虑到成本问题,恕我目前无能为力。 

网站地址:https://pyloque.github.com/fastscan

GitHub:https://github.com/pyloque/fastscan

网站描述:用于敏感词过滤的 ahocorasick 算法快速文本搜索JS实现

FastScan

官方网站:https://pyloque.github.com/fastscan

小编说

以上是编程之家为你收集整理的FastScan全部内容。

如果觉得编程之家网站内容还不错,欢迎将编程之家推荐给好友。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


scalable.js,一款可以使任何HTML元素动态缩放适合父元素的js插件
Pica,使用JS进行快速高品质图像缩放
react-dates,React 日期组件
date-fns,轻量级的JavaScript 日期工具库
WOW.js,一款效果炫酷的元素在页面滚动时展示CSS3动画的JS插件
Pikaday,一个 轻量级、无依耐Js日期选择器
ngDialog,一个基于AngularJS的扩展对话框模块
react-swipeable-views,一个 React 轮播组件
lazysizes.js,响应式图像延迟加载JS插件【懒加载】
Flickity,一款自适应手机触屏滑动插件
screenfull.js,浏览器全屏插件
ueditor,由百度web前端研发部开发所见即所得富文本web编辑器
Darkmode.js,一键为网站添加黑暗模式
PhotoClip.js,一款手势驱动的裁图插件
react-native-masonry,用于渲染一个图像masonry~ish布局react-native组件
PixelMatch,一个最小、最简单、最快的js像素级图像比较库
number-flip,一款 js 数字翻转切换插件
vue-core-image-upload,图片剪切和上传的 vue 插件
vue-awesome-swiper,基于swiper、Vue.js 的 Swiper 组件
hashids.js,数字生成类似YouTube的ID的js库