-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathREADME.txt
120 lines (86 loc) · 4.18 KB
/
README.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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]