-
Notifications
You must be signed in to change notification settings - Fork 15
871041532/ZMatchForLua
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
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 0
No packages published