Golang Go语言中的高效关键词替换和敏感词过滤工具

发布于 1周前 作者 ionicwang 来自 Go语言

Golang Go语言中的高效关键词替换和敏感词过滤工具

1. 算法介绍

利用高效的 Trie 树建立关键词树,如下图所示,然后依次查找字符串中的相连字符是否形成树的一条路径

发现掘金上这篇文章写的比较详细,可以一读,具体原理在此不详述。

2. 关键词替换

支持关键词重叠,自动选用最长的关键词,代码示例如下:

package main

import ( “fmt”

"github.com/tal-tech/go-zero/core/stringx"

)

func main() { replacer := stringx.NewReplacer(map[string]string{ “日本”: “法国”, “日本的首都”: “东京”, “东京”: “日本的首都”, }) fmt.Println(replacer.Replace(“日本的首都是东京”)) }

可以得到:

东京是日本的首都

示例代码见这里

3. 查找敏感词

代码示例如下:

package main

import ( “fmt”

"github.com/tal-tech/go-zero/core/stringx"

)

func main() { filter := stringx.NewTrie([]string{ “AV 演员”, “苍井空”, “AV”, “日本 AV 女优”, “AV 演员色情”, }) keywords := filter.FindKeywords(“日本 AV 演员兼电视、电影演员。苍井空 AV 女优是 xx 出道, 日本 AV 女优们最精彩的表演是 AV 演员色情表演”) fmt.Println(keywords) }

可以得到:

[苍井空 日本 AV 女优 AV 演员色情 AV AV 演员]

4. 敏感词过滤

代码示例如下:

package main

import ( “fmt”

"github.com/tal-tech/go-zero/core/stringx"

)

func main() { filter := stringx.NewTrie([]string{ “AV 演员”, “苍井空”, “AV”, “日本 AV 女优”, “AV 演员色情”, }, stringx.WithMask(’?’)) safe, keywords, found := filter.Filter(“日本 AV 演员兼电视、电影演员。苍井空 AV 女优是 xx 出道, 日本 AV 女优们最精彩的表演是 AV 演员色情表演”) fmt.Println(safe) fmt.Println(keywords) fmt.Println(found) }

可以得到:

日本????兼电视、电影演员。?????女优是 xx 出道, ??????们最精彩的表演是??????表演
[苍井空 日本 AV 女优 AV 演员色情 AV AV 演员]
true

示例代码见这里

5. Benchmark

benchmark

6. 项目地址

https://github.com/tal-tech/go-zero

7. 微信交流群

微信交流群


更多关于Golang Go语言中的高效关键词替换和敏感词过滤工具的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

21 回复

AC 自动机了解一下?

更多关于Golang Go语言中的高效关键词替换和敏感词过滤工具的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


嗯嗯 再加上 fail 指针就是 AC 自动机了!

https://github.com/dingyaguang117/ACAutomation

she/sheng/her 这三个关键词都要找出来,你用 AC 自动机怎么走?不是匹配最长的,是要把所有的关键字都找出来

Fail 树了解一下

不错的算法

有了 go-zero 这个库,微服务、关键字过滤不在话下

自研敏感词过滤成本还是比较高的

有 大佬在,不要怕,就是干

👍👍👍👍

👍👍👍👍

go-zreo 是个很不错的微服务框架

看了下 go-zero 源码挺不错的,追求极简

工具大于文档和约定

更多干货尽在 core 包中

每天都学习下新的知识

👍👍👍👍

这个看起来也不错哦。

👍👍👍👍

解决了关键字过滤的痛点

针对Golang(Go语言)中的高效关键词替换和敏感词过滤工具,以下是一些专业解答:

关键词替换

在Golang中,关键词替换主要依赖于内置的字符串处理函数和库。例如,可以使用strings.Replace()函数进行简单的字符串替换。对于更复杂的替换需求,正则表达式提供了更强大的解决方案,通过regexp.ReplaceAllString()函数可以实现基于模式的替换。

敏感词过滤

对于敏感词过滤,Golang社区已经开发出了多个高效工具。其中,go-wordsfilter是一款非常受欢迎的敏感词过滤工具。它采用预加载敏感词库并构建高效树状数据结构的方式,实现了对大量敏感词汇的快速检索与匹配。此外,go-wordsfilter支持自定义规则配置,允许使用者根据自身业务特点灵活调整过滤策略。

在实际应用中,敏感词过滤工具通常与数据库或文件存储的敏感词库结合使用。开发者可以根据需要更新敏感词库,并通过工具提供的接口进行实时过滤。为了确保过滤效率,一些工具还支持定期自动更新敏感词库的功能。

综上所述,Golang提供了多种高效的关键词替换和敏感词过滤工具,开发者可以根据实际需求选择合适的工具和方法来实现相关功能。

回到顶部