数据库端的过滤词过滤

之前博客中编写了一篇后端过滤的文章https://blog.csdn.net/huangbaokang/article/details/82869661

考虑了下性能,完全可以让数据库接替这项工作。

编写一共自定义函数isbadcomment,接收一个输入字符串,输出结果为一个判别标识符。1:含有敏感过滤词,0:正常评论词,该函数中写死了比例0.5,也可以稍微封装下变成输入参数,说明下。

create or replace 
FUNCTION ISBADCOMMENT 
(
  str in varchar2  --传递过来的评论短语
) return number as  

---==================党员生活评论列表过滤词过滤 writed by hbk 2018-11-07===============================

-- 定义变量
cursor words_lists is select * from t_bad_words;
counts number;--统计出现次数


begin
--变量初始化
  for word in words_lists loop
    begin
       -- 过滤的逻辑    过滤词长度*出现次数/评论的长度>0.5
       -- 计算过滤词出现的次数
       select nvl(length(regexp_replace(replace(str, word.name, '@'), '[^@]+', '')),0) into counts  from dual;
       sys.dbms_output.put_line('过滤词='||word.name||',自身长度='||length(word.name)||' 出现次数='||counts||'评论短语长度='||length(str));
       if ((length(word.name))*counts/(length(str)))>0.5 then
          begin
             sys.dbms_output.put_line('不符合要求的评论');
             return 1;
          end;
      end if;
    end;
  end loop;

  sys.dbms_output.put_line('符合要求的评论');
  return 0;--默认返回0,如果t_bad_words表没有数据的情况下
END ISBADCOMMENT;

sql上就可以拼接需要的逻辑。

and (case com.member_id when '"+jo.getString("member_id")+"' then 0  else isbadcomment(com.comment_content) end)=0 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄宝康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值