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

发现掘金上这篇文章写的比较详细,可以一读,具体原理在此不详述。
支持关键词重叠,自动选用最长的关键词,代码示例如下:
package main
import (
"fmt"
"github.com/tal-tech/go-zero/core/stringx"
)
func main() {
replacer := stringx.NewReplacer(map[string]string{
"日本": "法国",
"日本的首都": "东京",
"东京": "日本的首都",
})
fmt.Println(replacer.Replace("日本的首都是东京"))
}
可以得到:
东京是日本的首都
示例代码见这里
代码示例如下:
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 演员]
代码示例如下:
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
示例代码见这里

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

1
sarvatathagata Aug 31, 2020
AC 自动机了解一下?
|
2
dingyaguang117 Sep 1, 2020
|
3
a7217107 Sep 1, 2020
DFA?
|
4
kevinwan OP @sarvatathagata she/sheng/her 这三个关键词都要找出来,你用 AC 自动机怎么走?不是匹配最长的,是要把所有的关键字都找出来
|
5
sarvatathagata Sep 3, 2020
@kevinwan Fail 树了解一下
|
6
zhoushuguangking Sep 4, 2020
不错的算法
|
7
KesonAn Sep 4, 2020
有了 go-zero 这个库,微服务、关键字过滤不在话下
|
8
zhoushuguangking Sep 4, 2020
自研敏感词过滤成本还是比较高的
|
9
KesonAn Sep 4, 2020
@zhoushuguangking 有 @kevinwan 大佬在,不要怕,就是干
|
10
KesonAn Sep 4, 2020
👍👍👍👍
|
11
kingxt Sep 4, 2020
👍👍👍👍
|
12
zhoushuguangking Sep 4, 2020
go-zreo 是个很不错的微服务框架
|
13
zhoushuguangking Sep 4, 2020
看了下 go-zero 源码挺不错的,追求极简
|
14
zhoushuguangking Sep 4, 2020
工具大于文档和约定
|
15
KesonAn Sep 4, 2020
更多干货尽在 core 包中
|
16
zhoushuguangking Sep 4, 2020
每天都学习下新的知识
|
17
KesonAn Sep 4, 2020
👍👍👍👍
|
18
dylanre Sep 4, 2020
@dingyaguang117 这个看起来也不错哦。
|
19
zhoushuguangking Sep 4, 2020
👍👍👍👍
|
20
bittoy Sep 4, 2020
解决了关键字过滤的痛点
|