erlang使用AC算法过滤屏蔽字

本文介绍了如何使用Aho-Corasick(AC)算法在Erlang中构建确定有限状态自动机来过滤屏蔽字。AC算法通过预处理模式串,实现了在文本扫描中一次性匹配所有模式,其复杂度为O(n)。文章详细阐述了success、failure和output表的概念,并给出了构建和使用AC自动机的三个计划,包括使用ETS存储、gen_server和静态代码调用。
摘要由CSDN通过智能技术生成
 
简介:

  • Aho-Corasick算法简称AC算法,通过将模式串预处理为确定有限状态自动机,扫描文本一遍就能结束。其复杂度为O(n),即与模式串的数量和长度无关。
 
思路

  • 自动机按照文本字符顺序,接受字符,并发生状态转移。这些状态缓存了“按照字符转移成功(但不是模式串的结尾)”、“按照字符转移成功(是模式串的结尾)”、“按照字符转移失败”三种情况下的跳转与输出情况,因而降低了复杂度。
 
基本数据结构

AC算法中有三个核心函数,分别是:
  • success:  成功转移到另一个状态(也称goto表或success表)键: {当前状态, 输入} 值:下一状态
  • failure: 不可顺着字符串跳转的话,则跳转到一个特定的节点(也称failure表),我称为回溯状态, 从根节点到这个特定的节点的路径恰好是失败前的文本的一部分。
  • output: 命中的屏蔽词表
 
算法举例

以经典的ushers为例,假定4个词he/ she/ his /hers 为需要屏蔽的屏蔽词,输入文本为“ushers”。构建的自动机如图:
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值