屏蔽词库升级一波,玩家用繁体、拆字、谐音马上绕过,过滤与对抗是持久战。变体对抗方案:归一化预处理把繁体转简体、全角转半角,谐音映射表把变形音还原,再进DFA匹配,变体的生存空间被压缩。
文本先做繁简转换、全半角统一、大小写折叠,再进入敏感词匹配,变体在入口被还原。
local NORM = { ["飛"] = "飞", ["賭"] = "赌", ["A"] = "A", ["b"] = "b" }
local function normalize(text)
local out = {}
local i = 1
while i <= #text do
local b = string.byte(text, i)
local len = (b >= 228) and 3 or 1
local ch = string.sub(text, i, i + len - 1)
out[#out + 1] = NORM[ch] or ch
i = i + len
end
return table.concat(out)
end
return table.concat(out)
end
谐音映射把“赌”的同音变体还原后再匹配,变体词库与主词库同步热更新,对抗升级不落库。
local HOMO = { ["堵"] = "赌", ["都"] = "赌" }
local function homoFold(text)
for k, v in pairs(HOMO) do
text = string.gsub(text, k, v)
end
return text
end
变体样本库覆盖繁简、全半角、谐音三类,对抗升级后全样本回归。监控拦截率的周变化,拦截率骤降说明出现新变体族,样本采集从玩家举报与拦截日志双向补充。
逐字符子串拼接的归一化在长文本上效率低,高频聊天场景用字符串替换批量映射,映射表按需裁剪。NORM映射表只登记高频变体,全量繁简表体积巨大,按聊天实际出现的变体逐步补齐。谐音还原会产生误伤,正常词被还原成敏感词的误拦截要进人工复核队列。归一化与DFA匹配的执行顺序固定:先归一化再匹配,顺序颠倒等于没做归一化。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
设计初衷 付费玩家不是一个人群,是四层结构各异的群体:白嫖党、月卡党、中产党、大R党。大R(月消费 3000 元宝以上)贡献…
设计初衷 传送是全服使用频次最高的功能(人均每日 6.2 次),也是最没有存在感的收费点——玩家对它的态度是"顺手付了"。定…
底层原理 弱值表(__mode = "v",值被弱引用)之外还有弱键表(__mode = "k",键被弱引用):键不被表挽留…
设计初衷 战法道互相克制是传奇的魂:战士近身爆发(烈火剑法)、法师远程群攻、道士续航消耗,三角循环转起来才有博弈。胜率失衡的…
业务场景 基础仓库 40 格,裁决之杖收藏家们叫苦不迭。扩容方案:每页 10 格、最多扩 4 页到 80 格,第 1 页 1…
底层原理 math.random 不承诺完美均匀,而爆率、抽奖、抽签全部建立在"均匀"假设上。均匀性是可检验的:n 个桶各掷…