和谐宝典 和谐宝典用于检查输入是否包含中文或英文敏感词,并可替换为特殊字符。生活在天朝,和谐宝典必须人手必备。
特点
速度快,比常规的正则匹配要快 10 倍以上,具体性能可运行 benchmark 查看 可以输出检测到的敏感词,请看初始 简单,可根据需要方便的调整敏感词字库
Github Download 就要被砍了,楼主找个别的地方放?官方公告: https://github.com/blog/1302-goodbye-uploads
另外感谢楼主
gem 'fast_trie', :require => "trie"
# encoding: utf-8
class SegTrie
attr_accessor :trie
def initialize
self.trie = ::Trie.new
end
def all_words(str, offset = 0, words= [])
words_a ||= []
str ||= ''
str.length.times do |i|
self.word(str, i, words_a)
end
words_a
end
def word(str, offset = 0, words_a = [])
len = 0
while offset + len < str.length
status = self.trie.get(str[offset, (len + 1)])
if status == 2
len = len + 1
words_a.push(str[offset, len])
elsif status == 1
len = len + 1
elsif status == 3
words_a.push(str[offset, len + 1])
break
else
break
end
end
words_a
end
def add_words(words)
words.each_index do |i|
self.add_word(words[i])
end
end
def add_word(word)
return false if word.blank?
word.length.times do |i|
next if i == 0
self.trie.add(word[0, i], 1) if self.trie.get(word[0, i]).to_i < 1
end
status =self.trie.get(word).to_i
if status == 1
self.trie.add(word, 2)
elsif !([2, 3].include?(status))
self.trie.add(word, 3)
end
end
def clear_words
self.trie = ::Trie.new
end
end
HarmoniousDictionary.clean(your_input),这个我觉得放在输出的地方比较好,在用户数据入库的时候尽量不要去做处理,希望能保留用户输入的原始数据,只要在显示的地方做一下就可以了
已用上,感谢楼主,感谢和谐社会!! 发现了一个不和谐因子:https://github.com/wear/harmonious_dictionary/issues/1
发个多正则引擎 ( http://nfabo.cn ):单趟扫描就可以识别出匹配到的正则 ID 集合,在 ( http://bbs.csdn.net/topics/390949259 ) 中,匹配性能达到 118M Byte 每秒