当前位置: 首页 > news >正文

AC自动机-2(AhoCorasickDoubleArrayTrie)

        Aho-Corasick Double Array Trie (AC DAT) 是一种结合了Aho-Corasick算法和Double Array Trie的数据结构,DAT保证了较高的存储效率,AC保证了多模式字符串匹配效率。

        一个经典的实现是hanlp的Java实现:AhoCorasickDoubleArrayTrie。

        主要构造过程如下:

        public void build(Map<String, V> map){// 把值保存下来v = (V[]) map.values().toArray();l = new int[v.length];Set<String> keySet = map.keySet();// 构建二分trie树addAllKeyword(keySet);// 在二分trie树的基础上构建双数组trie树buildDoubleArrayTrie(keySet.size());used = null;// 构建failure表并且合并output表constructFailureStates();rootState = null;loseWeight();}

可以看到,其构建过程首先构造了一个普通的Trie树,然后基于这个普通Trie树构建了DAT,在构建DAT的过程中,也给先前构建好的普通Trie树添加了DAT的索引 

sibling.getValue().setIndex(begin + sibling.getKey());

构造完DAT之后,又基于普通Trie树构造fail表(普通Trie树中上一步构建DAT时添加了DAT索引),构造完成后,将所有辅助数据结构删除,包括普通Trie树,例如上述代码中的 \text{used = null;} 和 \text{rootState = null;} , 最后又压缩了DAT了,loseWeight();,实际是一个为尾压缩的方法。

AhoCorasickDoubleArrayTrie的构建可能会消耗大量内存,在实际使用中,可以先在一个大内存的机器上构建好AC DAT,序列化成文件,然后在使用的节点上直接反序列进行使用,正如 hanlp实现中的save和load方法。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CMakeLists.txt模板
  • C#:Bitmap类使用方法—第3讲
  • 探索ACPL-302J光耦合器的多功能性
  • 区块链浪潮:Web3时代的数字经济新格局
  • 【开端】 如何判断手机号码属于哪个国家(手机号判断正则)汇总
  • Java二十三种设计模式-访问者模式(21/23)
  • 高性能计算应用优化之运行参数优化
  • 探索地理空间分析的新世界:Geopandas的魔力
  • 前端Array.reduce()函数延申用法
  • OpenGL-ES 学习(8) ---- FBO
  • 一款好看的WordPress REST API 主题
  • 又双叒叕JavaScript 新增了 7 个方法!
  • 无人机技术的最新进展及未来趋势
  • 智能指针,然并卵
  • 精致潮人们,抠搜在电商平台
  • [NodeJS] 关于Buffer
  • 4. 路由到控制器 - Laravel从零开始教程
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • java概述
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 编写高质量JavaScript代码之并发
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 多线程 start 和 run 方法到底有什么区别?
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 计算机在识别图像时“看到”了什么?
  • 技术胖1-4季视频复习— (看视频笔记)
  • 开发基于以太坊智能合约的DApp
  • 模型微调
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 王永庆:技术创新改变教育未来
  • 主流的CSS水平和垂直居中技术大全
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • #WEB前端(HTML属性)
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (javascript)再说document.body.scrollTop的使用问题
  • (ZT)薛涌:谈贫说富
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (七)理解angular中的module和injector,即依赖注入
  • (十三)Flink SQL
  • (四)stm32之通信协议
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • ******IT公司面试题汇总+优秀技术博客汇总
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Core中的去虚
  • .NET建议使用的大小写命名原则
  • .NET中的十进制浮点类型,徐汇区网站设计
  • /proc/stat文件详解(翻译)
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [ 手记 ] 关于tomcat开机启动设置问题
  • []我的函数库
  • [4.9福建四校联考]
  • [BJDCTF2020]The mystery of ip