V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
kevinwan

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

  •  4
     
  •   kevinwan · Aug 31, 2020 · 4514 views
    This topic created in 2070 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
        1
    sarvatathagata  
       Aug 31, 2020
    AC 自动机了解一下?
    dingyaguang117
        2
    dingyaguang117  
       Sep 1, 2020
    嗯嗯 再加上 fail 指针就是 AC 自动机了!

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