多模匹配及其实现相关资料

百度博客分享的多模匹配算法资料

1. 方法:

基于双数组实现Tried树

优点:

  1. 能节省大量空间占用
  2. 查询基于数组索引,速度非常快
  3. 不用像AC自动机一样还需构建fail指针,构建速度相对AC自动机要快,且可以快速删除或添加单词,保留一定的灵活性

缺点:

  1. 因为没有像AC自动机等算法进行穿线改进,故而全匹配算法需要回溯,性能有所下降
  2. 建树比非双数组结构的Tried树要慢

相关资料:

  1. dictmatch及多模算法串讲 (一)
  2. dictmatch及多模算法串讲 (二)

代码实现

https://github.com/Bond-H/dictmatch

1. 实现方法

纯Python实现,基于一个dict维护前缀树,性能不比AC自动机的实现差,同时节省大量空间占用

2. 性能评测

数据集单词数查询文本
PKU5.5W1826448字
AS14.1W8368050字
Jieba58.4W4050566字

对比实现:
ahocorapy:纯Python实现的AC自动机
dmsearch:C++双数组实现的Tried树模型【上文百度博文中介绍的模型】
dictmatch:纯Python实现的基于单个dict的Tried树模型

词典装载性能(装载时间 秒)

数据集PKUASjieba
单词数5.5W14.1W58.4W
ahocorapy320354
dmsearch0.130.562.67
dictmatch0.050.140.60

词典查询性能(查询时间 秒)

数据集PKUASjieba
ahocorapy1.05.49.27
dmsearch4.212.86.7
dictmatch1.46.73.5

内存占用

数据集PKUASjieba
单词数5.5W14.1W58.4W
ahocorapy300M800M5G
dmsearch1G1G2.5G
dictmatch25M100M400M
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值