大量的数据做字符串匹配_Python Flashtext 实现大数据集下高效的关键词查找和替换...

bcc81533a0e7e706072ce5f95d095ad2.png

通常,我们使用Python 在文本中进行关键词查找或替换时,会使用 re 模块以正则的形式实现。在文本数量、文本内容、关键词数量较小时,该方法能够满足我们程序的功能、性能需要。但当在大规模的文本或者对大量关键词语料查找或者替换,re 实现方案的性能将成为瓶颈,本文我们将介绍一种新的关键词搜索和替换的算法:Flashtext 算法,它是一个高效的字符搜索和替换算法。

有多高效呢?如下,是通过随机生方式生成10000个单词组成的文本,我们分别在该文本中查找由 0, 500, 1000, 5000, 10000, 50000, 100000, 200000, 400000 个关键词组成的关键词库,我们来感受一下两者的性能差异:

d81217c442c1e02e3e6cd68f282f1f2f.png

我们发现随着关键词查询数量的增加,Flashtext 与 re 的时间消耗存在百倍乃至千倍以上的差异 。

为何存在这么大的差异呢?Flashtext 算法的时间复杂度不依赖于查找或替换的字符的数量。如,对于一个文档有 N 个字符,和一个有 M 个词的关键词库,那么时间复杂度就是 O(N) 。而正则匹配的时间复杂度是 O(M * N) 。这也是两者在性能上的差异随着关键词数量增多而拉大的原因。

因此,在一些大数据下的内容检索和替换,我们更倾向于选择 Flashtext 算法 ,比如,自然语言处理领域中数据清洗是一项必须的操作。经常涉及使用标准的关键词替换一些非标准的词,如,将Javascript替换成JavaScript。或者我们需要判断文本中是否存在JavaScript 关键词等等。

接下来,就让我们了解一下,如何使用Flashtext 实现关键词的查找和替换。


FlashText

Flashtext 算法主要分为三部分,我们接下来将对每一部分进行单独分析:

  1. 构建 Trie 字典
  2. 关键词搜索
  3. 关键词替换

构建 Trie 字典 (这部分不理解不影响我们使用Flashtext )

Flashtext 是一种基于 Trie

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值