首页 > 其他分享 >sensitive-word v0.13 特性版本发布 支持英文单词全词匹配

sensitive-word v0.13 特性版本发布 支持英文单词全词匹配

时间:2024-02-19 20:44:21浏览次数:32  
标签:github word houbb text sensitive 英文单词 com

拓展阅读

sensitive-word-admin v1.3.0 发布 如何支持分布式部署?

sensitive-word-admin 敏感词控台 v1.2.0 版本开源

sensitive-word 基于 DFA 算法实现的高性能敏感词工具介绍

更多技术交流

view

业务背景

对于英文单词 Disburse 之类的,其中的 sb 字母会被替换,要怎么处理,能不能只有整个单词匹配的时候才替换。

针对匹配词进一步判断

说明

支持版本:v0.13.0

有时候我们可能希望对匹配的敏感词进一步限制,比如虽然我们定义了【av】作为敏感词,但是不希望【have】被匹配。

就可以自定义实现 wordResultCondition 接口,实现自己的策略。

系统内置的策略在 WordResultConditions#alwaysTrue() 恒为真,WordResultConditions#englishWordMatch() 则要求英文必须全词匹配。

入门例子

原始的默认情况:

final String text = "I have a nice day。";

List<String> wordList = SensitiveWordBs.newInstance()
        .wordDeny(new IWordDeny() {
            @Override
            public List<String> deny() {
                return Collections.singletonList("av");
            }
        })
        .wordResultCondition(WordResultConditions.alwaysTrue())
        .init()
        .findAll(text);
Assert.assertEquals("[av]", wordList.toString());

我们可以指定为英文必须全词匹配。

final String text = "I have a nice day。";

List<String> wordList = SensitiveWordBs.newInstance()
        .wordDeny(new IWordDeny() {
            @Override
            public List<String> deny() {
                return Collections.singletonList("av");
            }
        })
        .wordResultCondition(WordResultConditions.englishWordMatch())
        .init()
        .findAll(text);
Assert.assertEquals("[]", wordList.toString());

当然可以根据需要实现更加复杂的策略。

如何自定义自己的策略

可以参考 WordResultConditions#englishWordMatch() 实现类,只需要继承 AbstractWordResultCondition 实现对应的方法即可。

策略的定义

以 englishWordMatch 实现类为例:

package com.github.houbb.sensitive.word.support.resultcondition;

import com.github.houbb.heaven.util.lang.CharUtil;
import com.github.houbb.heaven.util.util.CharsetUtil;
import com.github.houbb.sensitive.word.api.IWordContext;
import com.github.houbb.sensitive.word.api.IWordResult;
import com.github.houbb.sensitive.word.constant.enums.WordValidModeEnum;

/**
 * 英文单词必须要全词匹配
 *
 * https://github.com/houbb/sensitive-word/issues/45
 *
 * @since 0.13.0
 */
public class WordResultConditionEnglishWordMatch extends AbstractWordResultCondition {

    @Override
    protected boolean doMatch(IWordResult wordResult, String text, WordValidModeEnum modeEnum, IWordContext context) {
        final int startIndex = wordResult.startIndex();
        final int endIndex = wordResult.endIndex();
        // 判断当前是否为英文单词
        for(int i = startIndex; i < endIndex; i++) {
            char c = text.charAt(i);
            if(!CharUtil.isEnglish(c)) {
                return true;
            }
        }

        // 判断处理,判断前一个字符是否为英文。如果是,则不满足
        if(startIndex > 0) {
            char preC = text.charAt(startIndex-1);
            if(CharUtil.isEnglish(preC)) {
                return false;
            }
        }

        // 判断后一个字符是否为英文
        if(endIndex < text.length() - 1) {
            char afterC = text.charAt(endIndex+1);
            if(CharUtil.isEnglish(afterC)) {
                return false;
            }
        }

        return true;
    }

}

策略的指定

然后用引导类指定我们的策略即可:

List<String> wordList = SensitiveWordBs.newInstance()
        .wordResultCondition(new WordResultConditionEnglishWordMatch())
        .init()
        .findAll(text);

小结

实际应用的场景会被预想的复杂,所以此处设计为接口,内置一些常见的实现策略。

同时支持用户自定义拓展。

开源代码

https://github.com/houbb/sensitive-word

标签:github,word,houbb,text,sensitive,英文单词,com
From: https://www.cnblogs.com/houbbBlogs/p/18021929

相关文章

  • password_encryption_type 和 pg_hba.conf 不匹配导致用户连不上
    问题概述xxx客户新上一套opengauss数据库,在测试中用户输入正确的密码,提示用户密码错误,导致用户被锁问题原因password_encryption_type和pg_hba.conf不匹配导致用户连不上模拟问题因没有opengauss的环境,测试环境选择Mogdb1、准备测试环境,修改password_encryption_type。......
  • 利用COM组件实现对WORD书签各种操作大全
    有个需求是,程序导出一份word报告,报告中有各种各样的表格,导出时还需要插入图片。脑海中迅速闪过好几种组件,openxml组件,com组件,npoi。为了减少程序画复杂表格,我们选用了com组件+word模板的方式,程序只需要对word中的书签进行赋值即可。不知道这几种组件的(或者还有其他......
  • sensitive-word-admin v1.3.0 发布 如何支持敏感词控台分布式部署?
    拓展阅读sensitive-word-adminv1.3.0发布如何支持分布式部署?sensitive-word-admin敏感词控台v1.2.0版本开源sensitive-word基于DFA算法实现的高性能敏感词工具介绍更多技术交流业务背景如果我们的敏感词部署之后,不会变化,那么其实不用考虑这个问题。但是......
  • CF1365G Secure Password 题解
    Description本题是交互题。有一个固定的数组\(A\),同时通过数组\(A\)构造出数组\(P\),具体来讲,\(P_i\)是\(A\)中除\(A_i\)外的所有元素的按位或。你需要在最多\(13\)次询问中得到最后的\(P\)数组。\(2\leqn\leq1000\)。Solution首先有一个\(2\logn\)的是注......
  • UVA12467 Secret Word 题解
    题目传送门前置知识前缀函数与KMP算法解法考虑将\(S\)翻转后得到\(S'\),然后就转化为求\(S'\)的一个最长子串使得其是\(S\)的前缀。使用KMP求解即可。代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineullunsignedlonglong#d......
  • 点亮.NET的文字云艺术之光——Sdcb.WordCloud 2.0
    点亮.NET的文字云艺术之光——Sdcb.WordCloud2.0作为一名.NET开发者,你是否渴望拥有一个强大且易用的库,用以在你的应用程序中创造美轮美奂的文字云?我在经过一轮农历新年前的码力全开后,非常自豪地向大家宣布,我的个人项目—Sdcb.WordCloud2.0,现已推出!相比于上一个版本(1.2),这个全新......
  • word内公式编号右对齐
    方法一(针对任何形式编辑的公式)设置1*3表格,中间放入公式将单元格对齐方式设置为“居中”,右侧放入编号将单元格对齐方式设为“中部右对齐”,并将表格底纹和边框设为“无”。方法二(没实操)设置一个“样式”,根据页面的中间和右侧的位置设置“制表符”(分别设置对齐方式为“居中”、......
  • [word] Word快速插入时间日期
    Word快速插入时间日期。在Word中,有两个快捷键能够直接生成当前日期和时间。方法一:运用快捷键Alt+Shift+D,可以在Word上添加当前的日期。????????????快捷键Alt+Shift+T,可以添加当前时间。方法二:在中文输入法中输入“时间”,就能弹出当前的时间日期了。......
  • [word] 怎样把一个word中的内容自动复制到另一个word中去?
    这个问题,可以通过粘贴链接功能来实现。步骤如下。打开原word文档。 全选所有内容,Ctrl+C快捷键复制。打开需要复制到的word文档,把光标定位在需要复制的地方。依次选择「开始」→「粘贴」→「选择性粘贴」,弹出选择性粘贴窗口后,选择「粘贴链接」→「HTML格式」,点击确定,即可把......
  • 【Flink入门修炼】1-3 Flink WordCount 入门实现
    本篇文章将带大家运行Flink最简单的程序WordCount。先实践后理论,对其基本输入输出、编程代码有初步了解,后续篇章再对Flink的各种概念和架构进行介绍。下面将从创建项目开始,介绍如何创建出一个Flink项目;然后从DataStream流处理和FlinkSQL执行两种方式来带大家学习Word......