Skip to content

871041532/ZMatchForLua

Repository files navigation

1.1 说明

纯lua实现的敏感词检测过滤功能库, 基于Trie与AC自动机,可以实现敏感词检测,以及像王者荣耀那样的敏感词过滤。
10000条非&敏感词, 平均1000次查找或过滤, 耗时20ms.
带&的敏感词查找过滤性能没有上条的简单词高,但高于遍历方法


1.2 配置表格式

g_SensitiveWordsCfg = {

['o1'] = { ['id'] = 'o1', ['word'] = '苍井空', },

['o2'] = { ['id'] = 'o2', ['word'] = '苍井兰', },

['o3'] = { ['id'] = 'o3', ['word'] = '苍井空明', },

['o4'] = { ['id'] = 'o4', ['word'] = '钓鱼岛', },

['o5'] = { ['id'] = 'o5', ['word'] = '钓鱼岛主', },

['o6'] = { ['id'] = 'o6', ['word'] = '钓鱼人', },

['o7'] = { ['id'] = 'o7', ['word'] = '咳咳&井空苍', },

['o8'] = { ['id'] = 'o8', ['word'] = '二二&三三', }

['o9'] = { ['id'] = 'o9', ['word'] = '四四&五五', }

}

1.3 匹配规则与接口

简单词:非&的word是text的子串, 则视为text含有该敏感词。
带&规则词:带&的word, 会先分割“&”为子串Array。如果Array中所有string都是text子串, 则视为text含有该敏感词。
初始化:
              local ZMatch = require("ZMatch")

              local zmatch = ZMatch.New()

               zmatch:BuildTrie()

               zmatch:BuildAC()

敏感词检测接口:
              local resultBool = zmatch:CheckText(text)

敏感词过滤接口:
              local newText = zmatch:FilterText(text)

当待检测字符串很长时推荐使用AC检测敏感词(先buildAC):
             local resultBool = zmatch:CheckTextByAC(text)

1.4 自己渣渣笔记本上用自己本地词库,某次测试结果

构建Trie耗时:    0.134
构建AC耗时:    0.048
敏感词总量    8859
常规词数量    8337
带&词数量    522


开始对【正常说一句话的内容,大概这么长】进行敏感词检测...
----
原始遍历接口10次全词检测,时间:0.218000,结果:false
库接口1000次全词检测,时间:0.098000,结果:false
----
    1000次常规词Trie检测,时间:0.005000,结果:false
    1000次常规词AC检测,时间:0.005000,结果:false
----
    1000次带&词Trie检测,时间0.079000,结果false
    1000次带&词遍历检测,时间0.234000,结果false


开始对【敏感词:苍井空-】进行敏感词检测...
----
原始遍历接口10次全词检测,时间:0.166000,结果:true
库接口1000次全词检测,时间:0.006000,结果:true
----
    1000次常规词Trie检测,时间:0.002000,结果:true
    1000次常规词AC检测,时间:0.001000,结果:true
----
    1000次带&词Trie检测,时间0.082000,结果false
    1000次带&词遍历检测,时间0.219000,结果false


开始对【带&敏感词:-咳咳井空苍-】进行敏感词检测...
----
原始遍历接口10次全词检测,时间:0.075000,结果:true
库接口1000次全词检测,时间:0.100000,结果:true
----
    1000次常规词Trie检测,时间:0.003000,结果:false
    1000次常规词AC检测,时间:0.004000,结果:false
----
    1000次带&词Trie检测,时间0.080000,结果true
    1000次带&词遍历检测,时间0.075000,结果true


开始对【长字符串: 苍天有井独自空, 星落天川遥映瞳。
小溪流泉映花彩, 松江孤岛一叶枫。
南海涟波潭边杏, 星空野尽明日辉
西塞山野雁自翔, 小桥水泽浸芳园。
武园枯藤空留兰, 李氏眉宇尽是春。】进行敏感词检测...
----
原始遍历接口10次全词检测,时间:0.244000,结果:false
库接口1000次全词检测,时间:0.208000,结果:false
----
    1000次常规词Trie检测,时间:0.037000,结果:false
    1000次常规词AC检测,时间:0.026000,结果:false
----
    1000次带&词Trie检测,时间0.101000,结果false
    1000次带&词遍历检测,时间0.294000,结果false


1000次敏感词过滤,时间:0.271000,
--源:【心如苍井空似水,意比松岛枫叶飞。窗外武藤兰花香, 情似饭岛爱相随。咳咳dasdad井空苍苍, 台台ott】
--结果:【心如***似水,意比***叶飞。窗外***花香, 情似饭岛爱相随。**dasdad***苍, **o**】
    1000次常规词过滤,时间0.019000
    1000次带&词过滤,时间0.188000
[Finished in 3.3s]

About

纯lua实现的敏感词检测和过滤库,基于Trie

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages