分享好友 最新动态首页 最新动态分类 切换频道
[926]flashtext:大规模数据清洗的利器
2024-12-18 22:40

在这篇文章中,我们将介绍一种新的关键字搜索和替换的算法:Flashtext 算法。Flashtext 算法是一个高效的字符搜索和替换算法。该算法的时间复杂度不依赖于搜索或替换的字符的数量。比如,对于一个文档有 N 个字符,和一个有 M 个词的关键词库,那么时间复杂度就是 O(N) 。这个算法比我们一般的正则匹配法快很多,因为正则匹配的时间复杂度是 O(M * N)。这个算法和 Aho Corasick 算法也有一点不同,因为它不匹配子字符串。

Flashtext 算法被设计为只匹配完整的单词。比如,我们输入一个单词 {Apple},那么这个算法就不会去匹配 “I like Pineapple” 中的 apple。这个算法也被设计为首先匹配最长字符串。在举个例子,比如我们有这样一个数据集 {Machine, Learning,Machine Learning},一个文档 “I like Machine Learning”,那么我们的算法只会去匹配 “Machine Learning” ,因为这是最长匹配。

正则表达式是一种非常灵活和有用的模式匹配方式。比如我们在文本中搜索一个匹配 “d{4}”,它表示任何 4 位数字匹配,如 2017。我们利用 Python 代码可以实现这样一个功能,如下:

这里 ‘b’ 用来表示单词边界,它会去匹配特殊字符,如 ‘space’,’period’,’new line’ 等。

我们也可以使用正则表达式来制作一个标准化术语的替换脚本,比如我们可以编写一个 Python 脚本来用 “javascript” 替换 “java script”。如下:

正则表达式在一个 10k 的词库中查找 15k 个关键词的时间差不多是 0.165 秒。但是对于 Flashtext 而言只需要 0.002 秒。因此,在这个问题上 Flashtext 的速度大约比正则表达式快 82 倍。

随着我们需要处理的字符越来越多,正则表达式的处理速度几乎都是线性增加的。然而,Flashtext 几乎是一个常量。在本文中,我们将着重讨论正则表达式与 Flashtext 之间的性能区别。我们还将详细的描述 Flashtext 算法及其工作原理,和一些基准测试。

Flashtext 是一种基于 Trie 字典数据结构和 Aho Corasick 的算法。它的工作方式是,首先它将所有相关的关键字作为输入。使用这些关键字建立一个 trie 字典,如下图3所示:

start 和 eot 是两个特殊的字符,用来定义词的边界,这和我们上面提到的正则表达式是一样的。这个 trie 字典就是我们后面要用来搜索和替换的数据结构。

利用 Flashtext 进行搜索

对于输入字符串(文档),我们对字符进行逐个遍历。当我们在文档中的字符序列 <b>word<b> 匹配到字典中的 word 时(start 和 eot 分别是字符序列的开始标签和结束标签),我们认为这是一个完整匹配了。我们将匹配到的字符序列所对应的标准关键字进行输出,具体如下:

对于输入字符串,匹配到的字符序列显示为绿色,没有匹配到的字符序列显示为红色

利用 Flashtext 进行替换

对于输入字符串(文档),我们对字符进行逐个遍历它。我们先创建一个空的字符串,当我们字符序列中的 <b>word<b> 无法在 Trie 字典中找到匹配时,那么我们就简单的原始字符复制到返回字符串中。但是,当我们可以从 Trie 字典中找到匹配时,那么我们将将匹配到的字符的标准字符复制到返回字符串中。因此,返回字符串是输入字符串的一个副本,唯一的不同是替换了匹配到的字符序列,具体如下:

将输入字符串中的匹配字符进行标准替换

新增与关键词查询

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

其中:

当然,新增关键词还有很多招数:

匹配词归类

word就会被归类到key,就像 ,所以匹配到word,会直接显示key

与字典一样的新增方式

可以与字典一样的新增,而与 一样的效果

批量新增 —— 字典和列表

与 一样,如果匹配到values,则会返回key

查询与检索

一般用的是:还可以使用

extract_keywords返回的是匹配到的关键词,而replace_keywords是直接返回一整个句子,相当于关键词定位 + 替换:

删除关键词

KeywordProcessor的一些属性

KeywordProcessor是trie树,可以:

设置或添加字符作为单词字符的一部分,即:改变原有的关键词

关键字提取

区分大小写字母

关键字不清晰

同时添加多个关键词

删除关键字

与flashtext进行对比:

感觉,速度好像还是pyahocorasick 更快

flashtext github:https://github.com/vi3k6i5/flashtext pypi:https://pypi.org/project/flashtext/ 官方文档:https://flashtext.readthedocs.io/en/latest/ pyahocorasick github:https://github.com/WojciechMula/pyahocorasick/

最新文章
分析大型门户网站截取热门流量的SEO策略
一说到热门流量这个词,我想大家都会很快的想到利用热门话题或者热门事件来获取短期的高流量,在SEO里这种方式一般被称为截取流量,也就是利用SEO的方式来在短期内获得热门关键词的较好排名,从而获取短期的热门流量。比如网络上经常会出现
115网盘提取码怎么用 115网盘提取码下载的方式应用攻略
通过115提取码下载的方式有很多,首先115网盘自身就提供了专门的下载器优蛋。安装优蛋以后,点击文件页面的优蛋下载选框,就会直接弹出优蛋下载器,直接进行下载。或者在优蛋新建下载,直接输入提取码或文件页面网址,也可进行下载。步骤 1
佛山SEO排名应该怎么做?(SEO排名的10个有效方法)
佛山SEO排名应该怎么做?(SEO排名的10个有效方法)排名佛山SEO排名应该怎么做?(SEO排名的10个有效方法) 一、SEO排名应该怎么做?SEO排名的10个有效方法1、在进行SEO排名优化时,关键词研究是至关重要的第一步。通过使用关键词研究工具
PHP在线客服系统平台源码(完全开源的网页在线客服系统)
大家好,又见面了,我是你们的朋友全栈君。  在线客服系统是一个使用PHP、JavaScript和CSS开发的即时网页聊天咨询系统。该项目包含管理员和用户端。管理员端管理所有的管理,如编辑站点内容、管理提供者和预订,管理员在这个系统的管理中
刷360网站快速排名,策略与实践,360seo刷网站关键字排名优化官网
在当今的互联网时代,网站的可见度直接影响着其流量和商业价值,而在众多的搜索引擎中,360搜索作为国内主流的搜索引擎之一,其排名机制自然成为了许多网站管理员关注的焦点,本文将深入探讨如何通过刷360网站快速排名来提升网站的曝光度和
友点 CMS V9.1 后台登录绕过 GetShell
友点CMS9.1是一款国内常用的开源CMS系统,近日被指出存在一个getshell漏洞,该漏洞可允许攻击者通过构造特殊的请求参数向网站注入任意代码,并获取服务器的控制权。经分析,该漏洞影响范围较广,可影响友点CMS9.1及其以下版本。攻击者通过
关键词优化攻略,全方位策略助力企业业绩飙升
本指南深入解析了选择和优化推广关键词的策略,通过精准定位目标受众,提升广告效果。涵盖关键词研究、分析、筛选与持续优化,助力企业实现业绩显著增长。随着互联网的飞速发展,线上推广已经成为企业拓展市场、提升品牌知名度的重要手段,
如何让你的品牌在搜索引擎上闪耀?
如何让你的品牌在搜索引擎上闪耀?在数字化时代,品牌的在线存在感越来越重要,而搜索引擎优化(SEO)是提升品牌在搜索引擎上曝光度的关键。无论是增加网站流量、提高转化率,还是提升品牌声誉,SEO的作用都不可忽视。本文将从关键词优化、
CentOS 7 使用 docker 安装 typecho 博客系统
我的博客 https://savokiss.com 用的是 typecho,一直使用的是 阿里云ECS 直接安装的 MySQL 和 PHP,由于买的时间比较早,当时用的是 CentOS 6.5。后来想玩 docker,发现 docker 只支持 CentOS 7+,加
【魅影T800百度网盘下载】MOPS 魅影T800百度网盘12.18.3免费下载
百度网盘是一款省心、好用的超级云存储产品,已为超过7亿用户提供云服务,空间超大,支持多类型文件的备份、分享、查看和处理,自建多个数据存储中心,更有两项国际安全认证ISO27001&ISO27018为用户数据安全提供护航,如果您想备份文件数
相关文章
推荐文章
发表评论
0评