【Sensitive】基于 DFA 算法的 Ruby 敏感词过滤 Gem

分享一个最近写的 基于 DFA 算法的Ruby敏感词过滤 Gem

项目地址

Sensitive 代码

背景

项目开发中,会涉及到敏感词的过滤,大家多是自己在实现自己的算法,读了 sanvi 的 敏感词过滤实现 文章,了解到了DFA算法,看了 huobazi 在 4楼的回复,收获颇大,但最终让我写这个 Gem的原因是 Rei 在3楼的一句留言 完善成 Gem 有前途(词库自己加)

经过几天的努力,基于DFA算法的Ruby敏感词过滤 Gem 它来了

使用方法

选择是否加载 Gem 自带敏感词库

本着主厨思想,Gem 内置了 1万多条敏感词库。 我花了一整天时间,将词库的内容和格式进行了整理,整理完之后,视力下降了不少,自己慢慢也变成了合格的鉴黄师。

Gem 自带敏感词,涉及

  • 广告
  • 政治
  • 色情
  • 其它

你可以根据自己选择是否加载,加载方法:

Sensitive.load_default

加载自己的敏感词文件

你也可以加载自己的一个或多个敏感词文件,文件格式支持 txt, 不同的敏感词条独立一行

Sensitive.load_file(file_path)

动态添加单个敏感词

Sensitive.add_word('赌博')

清空敏感词

Sensitive.empty!

敏感词过滤

# filter 方法传入需要检测的敏感字符串,如果字符串中有敏感词,则返回,如果没有,则返回空
Sensitive.filter('不要赌博') #=> '赌博'
irb(main):001:0> require 'sensitive'
=> true
irb(main):018:0> puts Sensitive.words
{}
irb(main):019:0> Sensitive.add_word('敏感词')
=> ["敏", "感", "词"]
irb(main):020:0> puts Sensitive.words
{"敏"=>{:is_end=>false, :value=>{"感"=>{:is_end=>false, :value=>{"词"=>{:is_end=>true, :value=>{}}}}}}}
irb(main):021:0> puts Sensitive.filter('检测敏感词的算法')
敏感词
irb(main):022:0> puts Sensitive.filter('色情信息')
irb(main):023:0> Sensitive.load_default
irb(main):024:0> puts Sensitive.filter('色情信息')
色情信息
irb(main):025:0> Sensitive.empty!
=> {}
irb(main):026:0> puts Sensitive.words
{}

使用建议

Gem自带敏感词库里面的内容,如不能满足业务需要的,请自己添加和丰富词库,词库的内容一定要精减和准确。

4
1
@luolinae86
ae86
加入
更多来自 luolinae86