Golang基于前缀树的敏感词过滤算法
一个简单的基于Golang的敏感词过滤算法
package mainimport ("fmt" "unicode/utf8")// 敏感词过滤type Trie struct {child map[rune]*Trie wordstring}// 插入func (trie *Trie) insert(word string) *Trie {cur := triefor _, v := range []rune(word) {if _, ok := cur.child[v]; !ok {newTrie := NewTrie()cur.child[v] = newTrie}cur = cur.child[v]}cur.word = wordreturn trie}// 过滤func (trie *Trie) filerKeyWords(word string) string {cur := triefor i, v := range []rune(word) {if _, ok := cur.child[v]; ok {cur = cur.child[v]if cur.word != "" {word = replaceStr(word, "*", i-utf8.RuneCountInString(cur.word)+1, i)cur = trie}} else {cur = trie}}return word}func replaceStr(word string, replace string, left, right int) string {str := "" for i, v := range []rune(word) {if i >= left && i <= right {str += replace} else {str += string(v)}}return str}func NewTrie() *Trie {return &Trie{word:"", child: make(map[rune]*Trie, 0), }}func main() {trie := NewTrie()}
转自:
【Golang基于前缀树的敏感词过滤算法】参考:go语言中文文档:www.topoer.com
推荐阅读
- 华硕基于WRX80的主板现身 为AMD Ryzen Threadripper Pro打造
- 微软新版电子邮件客户端截图曝光:基于网页端Outlook
- 曝光 | 小鹏或春节前推送NGP更新,基于高精地图可自动变道
- 基于Spring+Angular9+MySQL开发平台
- 14款华为手机/平板公测EMUI 11:全部基于麒麟980
- AI赋能,让消防、用电更“智慧”
- 基于安卓11打造!魅族17系列将升级全新Flyme 8
- 谷歌为用户提供了基于AR的虚拟化妆体验
- Golang 切片综合指南
- 智能化社区是智慧城市重要的组成部分