高效的关键词替换和敏感词过滤工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
kevinwan
V2EX    Go 编程语言

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

  •  4
     
  •   kevinwan 2020-08-31 21:08:00 +08:00 4290 次点击
    这是一个创建于 1934 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 条回复    2020-09-04 15:24:34 +08:00
    sarvatathagata
        1
    sarvatathagata  
       2020-08-31 22:26:23 +08:00
    AC 自动机了解一下?
    dingyaguang117
        2
    dingyaguang117  
       2020-09-01 09:15:10 +08:00
    嗯嗯 再加上 fail 指针就是 AC 自动机了!

    https://github.com/dingyaguang117/ACAutomation
    a7217107
        3
    a7217107  
       2020-09-01 09:23:16 +08:00
    DFA?
    kevinwan
        4
    kevinwan  
    OP
       2020-09-02 22:56:09 +08:00
    @sarvatathagata she/sheng/her 这三个关键词都要找出来,你用 AC 自动机怎么走?不是匹配最长的,是要把所有的关键字都找出来
    sarvatathagata
        5
    sarvatathagata  
       2020-09-03 20:59:52 +08:00
    @kevinwan Fail 树了解一下
    zhoushuguangking
        6
    zhoushuguangking  
       2020-09-04 09:37:09 +08:00
    不错的算法
    KesonAn
        7
    KesonAn  
       2020-09-04 09:41:43 +08:00
    有了 go-zero 这个库,微服务、关键字过滤不在话下
    zhoushuguangking
        8
    zhoushuguangking  
       2020-09-04 09:45:19 +08:00
    自研敏感词过滤成本还是比较高的
    KesonAn
        9
    KesonAn  
       2020-09-04 09:48:15 +08:00
    @zhoushuguangking 有 @kevinwan 大佬在,不要怕,就是干
    KesonAn
        10
    KesonAn  
       2020-09-04 09:50:31 +08:00
    kingxt
        11
    kingxt  
       2020-09-04 10:29:05 +08:00
    zhoushuguangking
        12
    zhoushuguangking  
       2020-09-04 10:29:31 +08:00
    go-zreo 是个很不错的微服务框架
    zhoushuguangking
        13
    zhoushuguangking  
       2020-09-04 10:29:53 +08:00
    看了下 go-zero 源码挺不错的,追求极简
    zhoushuguangking
        14
    zhoushuguangking  
       2020-09-04 10:30:17 +08:00
    工具大于文档和约定
    KesonAn
        15
    KesonAn  
       2020-09-04 10:30:24 +08:00
    更多干货尽在 core 包中
    zhoushuguangking
        16
    zhoushuguangking  
       2020-09-04 13:14:03 +08:00
    每天都学习下新的知识
    KesonAn
        17
    KesonAn  
       2020-09-04 13:19:21 +08:00
    dylanre
        18
    dylanre  
       2020-09-04 13:19:56 +08:00
    @dingyaguang117 这个看起来也不错哦。
    zhoushuguangking
        19
    zhoushuguangking  
       2020-09-04 13:20:35 +08:00
    bittoy
        20
    bittoy  
       2020-09-04 15:24:34 +08:00
    解决了关键字过滤的痛点
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     896 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 21:02 PVG 05:02 LAX 13:02 JFK 16:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86