The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
kevinwan

高效的关键词替换和敏感词过滤工具

  •  4
     
  •   kevinwan · Aug 31, 2020 · 5162 views
    This topic created in 2254 days ago, the information mentioned may be changed or developed.

    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. 微信交流群

    微信交流群

    20 replies  •  2020-09-04 15:24:34 +08:00
    sarvatathagata
    sarvatathagata
    Aug 31, 2020
    1
    AC 自动机了解一下?
    dingyaguang117
    dingyaguang117
    Sep 1, 2020
    2
    嗯嗯 再加上 fail 指针就是 AC 自动机了!

    https://github.com/dingyaguang117/ACAutomation
    a7217107
    a7217107
    Sep 1, 2020
    3
    DFA?
    kevinwan
    kevinwan
    OP
    Sep 2, 2020
    4
    @sarvatathagata she/sheng/her 这三个关键词都要找出来,你用 AC 自动机怎么走?不是匹配最长的,是要把所有的关键字都找出来
    sarvatathagata
    sarvatathagata
    Sep 3, 2020
    5
    @kevinwan Fail 树了解一下
    zhoushuguangking
    zhoushuguangking
    Sep 4, 2020
    6
    不错的算法
    KesonAn
    KesonAn
    Sep 4, 2020
    7
    有了 go-zero 这个库,微服务、关键字过滤不在话下
    zhoushuguangking
    zhoushuguangking
    Sep 4, 2020
    8
    自研敏感词过滤成本还是比较高的
    KesonAn
    KesonAn
    Sep 4, 2020
    9
    @zhoushuguangking 有 @kevinwan 大佬在,不要怕,就是干
    KesonAn
    KesonAn
    Sep 4, 2020
    10
    👍👍👍👍
    kingxt
    kingxt
    Sep 4, 2020
    11
    👍👍👍👍
    zhoushuguangking
    zhoushuguangking
    Sep 4, 2020
    12
    go-zreo 是个很不错的微服务框架
    zhoushuguangking
    zhoushuguangking
    Sep 4, 2020
    13
    看了下 go-zero 源码挺不错的,追求极简
    zhoushuguangking
    zhoushuguangking
    Sep 4, 2020
    14
    工具大于文档和约定
    KesonAn
    KesonAn
    Sep 4, 2020
    15
    更多干货尽在 core 包中
    zhoushuguangking
    zhoushuguangking
    Sep 4, 2020
    16
    每天都学习下新的知识
    KesonAn
    KesonAn
    Sep 4, 2020
    17
    👍👍👍👍
    dylanre
    dylanre
    Sep 4, 2020
    18
    @dingyaguang117 这个看起来也不错哦。
    zhoushuguangking
    zhoushuguangking
    Sep 4, 2020
    19
    👍👍👍👍
    bittoy
    bittoy
    Sep 4, 2020
    20
    解决了关键字过滤的痛点
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1533 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 23:02 · PVG 07:02 · LAX 15:02 · JFK 18:02
    ♥ Do have faith in what you're doing.