首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于DFA的敏感词过滤

在计算理论中,确定有限状态自动机或确定有限自动机(英语:deterministic finite automaton, DFA)是一个能实现状态转移的自动机。...对于一个给定的属于该自动机的状态和一个属于该自动机字母表{\displaystyle \Sigma }Σ的字符,它都能根据事先给定的转移函数转移到下一个状态 DFA算法 DFA((Deterministic...如图: dfa_1.png 如上图当AB状态输入a得到状态aB,状态aB输入b得到状态ab; 状态AB输入b得到状态Ab,状态Ab输入a得到状态ab。...利用DFA匹配关键词 上面开始的几个关键词匹配可以用下图来表示: dfa_2.png 0是开始状态,输入日、本、人会最终到达结束状态5,输入日、本、鬼、子最终到达结束状态8,输入中、国、人到达结束状态...的敏感词过滤》 * 本文链接:https://h4ck.org.cn/2019/11/%e5%9f%ba%e4%ba%8edfa%e7%9a%84%e6%95%8f%e6%84%9f%e8%af%8d

1.2K20

利用 DFA 算法实现文字过滤

一、DEA 算法简介 在实现文字过滤的算法中,DFA是唯一比较好的实现算法。 DFA 全称为:Deterministic Finite Automaton,即确定有穷自动机。...但不同于不确定的有限自动机,DFA 中不会有从同一状态出发的两条边标志有相同的符号。 ?...二、DEA 算法实践敏感词过滤 1. 敏感词库构造 以王八蛋和王八羔子两个敏感词来进行描述,首先构建敏感词库,该词库名称为SensitiveMap,这两个词的二叉树构造为: ?.../** * 读取敏感词库,将敏感词放入HashSet中,构建一个DFA算法模型 * * @param keyWordSet 敏感词库 */ public...敏感词过滤 以上面例子构造出来的 SensitiveMap 为敏感词库进行示意,假设这里输入的关键字为:王八不好,流程图如下: ? 怎么用代码实现这个流程图逻辑呢?

1.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

PHP DFA算法实现敏感词过滤包 php-dfa-sensitive

好不容易做个网站上线了,结果被一些别有用心的人灌水,发垃圾广告,垃圾评论,导致一些不该出现的词出现,往往出现这个,我们需要在后台不断的审核,删除,若是全部用人来做的话,想想这个 工作量都让人头疼,我们通常的做法是用程序过滤一部分...,在加人工审核,当然程序若是能过滤掉100%是最好的,但是程序过滤的永远是第一次发生后的,预知就有点无能为力了。...DFA算法(确定有穷自动机) 安装包地址:https://packagist.org/packages/lustre/php-dfa-sensitive github地址:https://github.com.../FireLustre/php-dfa-sensitive 安装扩展 composer require lustre/php-dfa-sensitive 引人 use DfaFilter\SensitiveHelper...,不一定是最好的,我们往往还需要结合正则表达式,字符串过滤,火星文过滤等等技术手段,减少这方面词的出现。

1.4K10

【C++】算法集锦(11):敏感词过滤算法(DFA

文章目录 什么是 确定的、有穷状态、机 跟我一起看个栗子 DFA图解 DFA示例实现代码 DFA:确定的 有穷 状态机 如果 设计模式 中的状态模式比较熟的话,这个就很清楚了。...DFA常用于敏感词过滤。 ---- 什么是 确定的、有穷状态、机 啊,看这个名字,就通俗易懂了嘛。首先它是个机,干嘛用的机我说一下:模式串筛选用的机。...我觉得,DFA的机制很适合用于动态流程图的实现,特别是复杂的,动态流程图。当然,动态流程图是可以暴力硬写的,就是代码肥了点而已。...---- DFA图解 我们的程序在每个时刻有一个状态 s,每次从序列中输入一个字符 c,并根据字符 c 转移到下一个状态 s’。...---- DFA示例实现代码 #include #include using namespace std; int DFA(vector& cvec

73220

DFA算法-简易Java敏感词过滤(含源文件和上万敏感词列表)

敏感词过滤说白了就是简单的字符串替换,Java本身已经提供了相关函数,但是一旦遇到长文本,或者敏感词数量庞大,效率下降就会非常明显。本文将介绍利用多叉树进行敏感词存储和过滤的方法。...Word word = new Word(c); super.add(word); return word; } } 以下是核心代码 import java.io....*; import java.util.ArrayList; import java.util.Collections; public final class SensitiveWordFilter..."毫秒"); } } 测试使用的敏感词库总共包含14596个敏感词(可能有个别重复),在测试代码里生成了一个长度为1000的字符串,总共包含100个相同敏感词,敏感词中间有逗号隔开 重复执行过滤...10000次,并打印结果和时间,结果如下 可以看到程序成功地过滤了敏感词,并保留了逗号,总耗时335毫秒,平均每次过滤仅需要0.03毫秒,并且是在上万个敏感词和超长字符串的情况下。

6.6K32

sensitive-words 基于DFA算法实现的敏感词过滤算法

在实现文字过滤的算法中,DFA是唯一比较好的实现算法。 DFA 全称为:Deterministic Finite Automaton,即确定有穷自动机。...但不同于不确定的有限自动机,DFA 中不会有从同一状态出发的两条边标志有相同的符号。...二、 DFA 算法实践敏感词过滤 敏感词库构造 以王八蛋和王八羔子两个敏感词来进行描述,首先构建敏感词库,该词库名称为SensitiveMap,这两个词的二叉树构造为: [20211116231237..."isEnd":"0", "蛋":{ "isEnd":"1" } } } } 敏感词过滤...假设这里输入的关键字为:王八不好,流程图如下: [20211116231302.png] 三、 优化思路 对于“王*八&&蛋”这样的词,中间填充了无意义的字符来混淆,在我们做敏感词搜索时,同样应该做一个无意义词的过滤

1.3K20

DFA算法简单理解实现

背景:因为最近项目要使用到敏感词过滤服务,在网上了解到dfa实现这个功能性能还不错,特此学习了一下 1....什么是DFA算法 引用 简书作者:浪人与酒丶的解释 原文链接:https://www.jianshu.com/p/c67f917c9363 DFA全称为:Deterministic Finite...但不同于不确定的有限自动机,DFA中不会有从同一状态出发的两条边标志有相同的符号。 确定:状态以及引起状态转换的事件都是可确定的,不存在“意外”。 有穷:状态以及事件的数量都是可穷举的。...DFA算法模型 state_event_dict = { "匹": { "配": { "算": {...通过java程序加载敏感词库,构建一个DFA算法模型 private static void addSensitiveWordToHashMap(Set keyWordSet) {

1.2K10

Java 过滤器实现敏感词汇过滤

在这篇博客中,我们将深入研究如何使用 Java 过滤器来过滤敏感词汇,确保用户输入的内容不包含不良信息。我们将采用简单而实用的方法,让即使是初学者也能轻松理解。为什么过滤敏感词汇很重要?...为了实现这一点,我们将创建一个 Java 过滤器,该过滤器在请求到达 Servlet 之前拦截并检查用户输入的文本。如果发现任何敏感词汇,它将进行替换或拒绝请求。...编写过滤器代码首先,我们需要创建一个 Java 类,实现 javax.servlet.Filter 接口。以下是一个简化的例子:import javax.servlet....*;import javax.servlet.annotation.WebFilter;import java.io.IOException;@WebFilter("/*")public class WordFilter...如果一切正常,你应该看到提交成功的页面,而敏感词汇已经被过滤掉了。总结通过使用 Java 过滤器,我们可以轻松地实现敏感词汇过滤的功能,以保护用户免受不良内容的侵害。

39100

Java ---Filter过滤

二、Filter的使用流程      在Java中如果想要自定义一个filter过滤器的话,需要继承Javax.servlet.Filter接口,这个接口中只有三个方法: default void init...doFilter方法是filter接口中的核心方法,一旦创建完该过滤器的实例之后,会执行dofilter方法,所有的过滤逻辑都是在此方法中进行的。...然后我们可以通过filter-mapping映射过滤器和URL,此处使用了两个映射,对该过滤器指定了对路径名为/a和/b的请求进行拦截。...index.jsp <%@ page contentType="text/html;charset=UTF-8" language="<em>java</em>...我们采用手动设置session //在实际的项目中,当用户登录之后自动设置session <%@ page contentType="text/html;charset=UTF-8" language="<em>java</em>

1.2K50

Java实现过滤中文乱码

Java的字符编码 JDK完整实现Unicode的block与script: Char c = '☎' Character.UnicodeBlock ub = Character.UnicodeBlock.of...(c) Character.UnicodeScript uc = Character.UnicodeScript.of(c); Java中的字符char内置的编码方式是UTF-16,当char...org.apache.commons.codec.binary.Hex; Hex.encodeHex(s.getBytes()) // --> c2a0 ‍ UTF-8是Unicode字符的变长前缀编码的一种实现,二者之间的对应关系在这里.现在我们回到开篇过滤中文乱码的问题...,有一个基本解决思路: UTF-8是Unicode字符的变长前缀编码的一种实现,二者之间的对应关系在这里.现在我们回到开篇过滤中文乱码的问题,有一个基本解决思路: 去掉各种标点字符、控制字符, 计算剩下字符中非中文字符所占的比例

1.5K10

java中什么是过滤器_JAVAweb过滤

【扩展】 过滤器:Filter 概念:对目标资源的请求和响应进行过滤截取。...场景: (用户授权的过滤器:判断用户是否有权限请求界面) (日志信息的过滤器:过滤用户在网站的所有请求,记录轨迹 ) (负责解码的过滤器:规定请求的解码方式) 备注:过滤器依赖于servlet...) package java.filter; import javax.servlet.*; import java.io.IOException; /** * @explain:定义过滤器...依赖于web框架,在springmvc中依赖于SpringMVC框架,在实现上基于Java的反射机制,属于AOP的一种应用,作用类似于过滤器,但是拦截器只能对Controller请求进行拦截,对其他的直接访问静态资源的请求无法拦截处理...过滤器和拦截器的区别? ①:拦截器是基于java的反射机制,而过滤器基于函数回调。 ②:过滤器依赖于servlet容器,拦截器不依赖于servlet容器。

90330

Java Web Servlet过滤

什么叫过滤器呢?   过滤器就是可以对浏览器向jsp,servlet,html等这些web资源发出请求和 服务器回应给浏览器的内容,他可以进行过滤。...让他通过 过滤器来实现;用户来访问一个资源,我们通过过滤器来过滤这个请求,在程序中判断是否有权限来访问这个资源; 有,则让他去访问,没有,就让他转到另外一个页面。...;       过滤器需要通过web.xml进行配置       定义过滤器的名称,并且声明实现类       将过滤器与Servlet或URL模式关联。...新建一个web项目 CharacterEnccodingFilter.java 代码: /**  *  */ package com.b510.hongten.filter; import java.io.IOException.../XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml

63910
领券