【模式匹配】Aho-Corasick自动机】的更多相关文章

背景 在做实际工作中,最简单也最常用的一种自然语言处理方法就是关键词匹配,例如我们要对n条文本进行过滤,那本身是一个过滤词表的,通常进行过滤的代码如下 for (String document : documents) { for (String filterWord : filterWords) { if (document.contains(filterWord)) { //process ... } } } 如果文本的数量是n,过滤词的数量是k,那么复杂度为O(nk):如果关键词的数量较多…
Aho - Corasick string matching algorithm 俗称:多模式匹配算法,它是对 Knuth - Morris - pratt algorithm (单模式匹配算法) 形成多模式匹配算法的一种改进,如果我们用单模式匹配算法实现多模式匹配算法,假如模式串有 M 个 , 则需要重复调用 M 次单模式匹配算法 : 举个很简单的例子,假如我现在有一本特殊的字典,字典中的词汇就是所有的模式串,然后给你一篇文章(全英文),让你查一下这篇文章中有多少个词汇在字典中可以查得到:(为…
1. 多模匹配 AC自动机(Aho-Corasick Automaton)是多模匹配算法的一种.所谓多模匹配,是指在字符串匹配中,模式串有多个.前面所介绍的KMP.BM为单模匹配,即模式串只有一个.假设主串\(T[1 \cdots m]\),模式串有k个\(\mathbb{P} = \{ P_1, \cdots, P_k\}\),且模式串集合的总长度为\(n\).如果采用KMP来匹配多模式串,则算法复杂度为: \[ O(|P_1|+m+\cdots + |P_k|+m)=O(n+km) \] 而…
秉着能偷懒就偷懒的精神,关于AC自动机本来不想看的,但是HanLp的源码中用户自定义词典的识别是用的AC自动机实现的.唉-没办法,还是看看吧 AC自动机理论 Aho Corasick自动机,简称AC自动机,要学会AC自动机,我们必须知道什么是Trie,也就是字典树.Trie树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高.之…
支持中文分词(N-最短路分词.CRF分词.索引分词.用户自定义词典.词性标注),命名实体识别(中国人名.音译人名.日本人名.地名.实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换,文本推荐,依存句法分析(MaxEnt依存句法分析.CRF依存句法分析).提供Lucene插件,兼容Lucene4.x. HanLP: Han Language Processing 汉语言处理包 HanLP是由一系列模型与算法组成的Java工具包,目标是促进自然语言处理在生产环境中的应用.HanLP…
参考文档 http://www.hankcs.com/program/algorithm/implementation-and-analysis-of-aho-corasick-algorithm-in-java.html 简介 Aho-Corasick算法简称AC算法,通过将模式串预处理为确定有限状态自动机,扫描文本一遍就能结束.其复杂度为O(n),即与模式串的数量和长度无关. 思想 自动机按照文本字符顺序,接受字符,并发生状态转移.这些状态缓存了“按照字符转移成功(但不是模式串的结尾)”.“…
支持中文分词(N-最短路分词.CRF分词.索引分词.用户自定义词典.词性标注),命名实体识别(中国人名.音译人名.日本人名.地名.实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换,文本推荐,依存句法分析(MaxEnt依存句法分析.CRF依存句法分析).提供Lucene插件,兼容Lucene4.x. HanLP: Han Language Processing 汉语言处理包 HanLP是由一系列模型与算法组成的Java工具包,目标是促进自然语言处理在生产环境中的应用.HanLP…
本文为本人学习pyhanlp的笔记,大多知识点来源于GitHubhttps://github.com/hankcs/HanLP/blob/master/README.md,文中的demo代码来源于该GitHub主 what's the pyhanlp pyhanlp是HanLP的Python接口,支持自动下载与升级HanLP,兼容py2.py3. 安装 pip install pyhanlp 安装时可能遇到的问题: 报错:error: Microsoft Visual C++ 14.0 is r…
AC自动机(Aho-Corasick Automata)是经典的多模式匹配算法.从前我学过这个算法,但理解的不深刻,现在已经十分不明了了.现在发觉自己对大部分算法的掌握都有问题,决定重写一系列博客把学过的算法review一下,目标是: 充分理解算法的原理与实现细节 形成一个简洁明了,能很好反映原理的写法,作为模板 Codeforces上讲解AC自动机的一篇博客. Wikipedia  词条Aho–Corasick algorithm Overview Concepts finite state…
AC自动机,全称Aho-Corasick自动机.如果没记错的话好像就是前缀自动机. 其实AC自动机就是KMP上树的产物.理解了KMP,那AC自动机应该也是很好理解的. 与KMP类似,AC自动机也是扔一个字符走一步.当前状态始终只有一个,每次如何走都是确定的,换句话说AC自动机是一种确定型有限状态自动机(DFA). 进行模式匹配是AC自动机的基本应用.如果稍加拓展一下,就可以知道在AC自动机上走k步就相当于产生了一个长为k.只包含给定字符集的字符串.借助这个性质,可以在AC自动机上DP来解决一些字…