Lua语言的屏蔽词过滤

参考了DFA算法的简单说明与案例实现

构造过滤器
local FilterData = {
   }

local FilterTree = {
   }
 --构建时候的临时变量

local IsEnd = "IsEnd"

function FilterData.Load()
    --构建过滤器
    for _, v in ipairs(exd["GT_".."FilterText"]) do --这个循环是已经读取的屏蔽字表
        local FilterStr = v.MaskWord
        local CurMap = FilterTree
        --这个函数是循环遍历字符串
        ForEachString(FilterStr,
        function(Str)
            if CurMap[Str] == nil then
                CurMap[Str] = {
   }
                CurMap[Str][IsEnd] = false
                CurMap =  CurMap[Str]
            else
                CurMap =  CurMap[Str]
            end
        end,
        true)
        CurMap[IsEnd] = true
    end
end
查找
--基础的屏蔽词表匹配过滤
function FilterData.MaskWordFilter(Str)
    local BeginIndex = 1
    local MatchingTable = {
   }

    while BeginIndex < #Str do
        local NowMap = FilterTree
        --local MatchingNum = 0
        local CurStr = string.sub(Str, BeginIndex, #Str)
        local CurIndex = BeginIndex
        local LeftMatchIndex = 0
        local RightMatchIndex = 0

        local i = 1
        local AllowSpecialSymbols = false

        while true do
            local char = string.sub(CurStr,i,i)
            local Ascll = string.byte(char)
            if Ascll > 128 then
                char = string.sub(CurStr,i,i+2)
                i = i + 3

                if NowMap[char] ~=nil then
                    if LeftMatchIndex == 0 then
                        LeftMatchIndex = CurIndex
                    end
                    if NowMap[char][
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值