数据清洗工具flashtext,效率直接提升了几十倍数

在通常的小规模数据过滤和清理过程中,使用最多的是正则表达式,但随着数据规模的增大,正则表达式显得有些不足。

[En]

In the usual small-scale data filtering and cleaning process, the regular expression is most used, but with the increase of the data scale, the regular expression appears to be somewhat inadequate.

【阅读全文】

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

数据清洗工具flashtext,效率直接提升了几十倍数

从上面的示例图的性能对比中,可以发现随着我们需要处理的字符越来越多,正则表达式的处理速度几乎都是线性增加的。然而,Flashtext 几乎是一个常量。

1、准备flashtext环境

通过pip的方式来安装flashtext,或是其他的方式也是可以的,这里默认使用的是清华大学的镜像站。

pip install flashtext -i https://pypi.tuna.tsinghua.edu.cn/simple

在准备好flashtext环境以后,来看一下flashtext重要的使用过程,帮助我们能更好的完成数据清洗操作。

2、添加关键词

这里添加关键词时是通过单个关键词的来添加到关键词词库中,使用add_keyword函数来添加。第一次参数表示需要添加的关键词,第二个参数则表示为第一个关键词的别名,如果关键词被找到了则显示为别名的形式,若是没有使用第二个参数作为别名则还是显示原有的名称。

from flashtext import KeywordProcessor

初始化关键词库处理器

processor = KeywordProcessor()

常规方式添加关键词

processor.add_keyword('Python')

别名方式添加关键词

processor.add_keyword('Scala', 'Java')

通过这种方式,所需的关键字以两种方式添加到词库处理器中。

[En]

In this way, the required keywords have been added to the thesaurus processor in two ways.

3、提取关键词

通过上一步添加关键词,现在词库处理器中已经存在有关键词的信息了,再使用extract_keywords将关键词提取出来即可。

从字符串中提取关键字信息<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Extract keyword information from a string</font>*</details>

found = processor.extract_keywords('I like Python and Scala.')

结果

print(found)

['Python', 'Java']

结果出来了,跟我们预想的是一样的,并Scala也显示为了Java。

4、替换关键词

替换关键词使用的是replace_keywords函数,前提是词库中拥有别名的词才能被替换,就像上面的Scala被显示成了的Java一样。

替换一个字符串中的Scala关键词,由于Scala对应的别名是Java,所以一个字符串中的Scala应该被替换为Java。

replaced = processor.replace_keywords('I like Scala.')

结果

print(replaced)

I like Java.

Scala 果真就被替换为了Java。

5、获取所有关键词

有些时候,在KeywordProcessor词库处理器中添加了哪些关键词可能自己都记不清楚了,这个时候可以使用get_all_keywords函数来获取当前的所有关键词。

all_keywords = processor.get_all_keywords()

结果

print(all_keywords)

{'python': 'Python', 'scala': 'Java'}

6、批量的添加关键词

当关键词库需要更多的关键词的时候,可以通过列表或是字典的方式来进行批量的添加。对应的函数分别是add_keywords_from_list、add_keywords_from_dict函数。

通过使用字典进行批量添加来初始化字典<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Initialize a dictionary by using it for batch addition</font>*</details>

dict_ = {
    'java': ['java_ee', 'java_se', 'java_me'],
    'python': ['pandas', 'all']
}

通过词典的方式批量添加关键词<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Add keywords in batches by the way of dictionary</font>*</details>

processor.add_keywords_from_dict(dict_)

从批量添加的关键字中匹配关键字<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Match keywords from keywords added in batches</font>*</details>

result = processor.extract_keywords('looking for java_ee and pandas.')

结果

print(result)

['java', 'python']

通过列表批量添加关键字<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>Add keywords in batches through the list</font>*</details>

processor.add_keywords_from_list(['scala', 'python', 'scala', 'go'])

通过get_all_keywords查看一下所有关键词

all_keywords = processor.get_all_keywords()

结果

print(all_keywords)

{'python': 'python', 'pandas': 'python', 'scala': 'scala', 'java_ee': 'java', 'java_se': 'java', 'java_me': 'java', 'all': 'python', 'go': 'go'}

发现所有关键词都已添加到词库处理器中,不会再重复添加。

[En]

Found that all keywords have been added to the thesaurus processor, and repeated will not be added again.

7、批量删除关键词

批量删除词库处理器中的关键词同样是有两种方式,一个是列表、另一个是字典。对应的函数分别是remove_keywords_from_list、remove_keywords_from_dict函数。

批量移除列表中的关键词

processor.remove_keywords_from_list(['python','java_ee','java_me'])

批量移除字典中的关键词

processor.remove_keywords_from_dict({'python': ['pandas','all']})

通过get_all_keywords查看一下所有关键词

all_keywords = processor.get_all_keywords()

结果

print(all_keywords)

{'scala': 'scala', 'java_se': 'java', 'go': 'go'}

发现所有需要删除的关键字都已删除。

[En]

It is found that all keywords that need to be removed have been removed.

8、执行效率对比

为了更可观的展示效果,找了两个flashtext在搜索和替换关键词过程中的效率对比图可以一目了然。

flashtext、正则表达式搜索效率对比

数据清洗工具flashtext,效率直接提升了几十倍数

flashtext、正则表达式搜索替换对比

数据清洗工具flashtext,效率直接提升了几十倍数

【往期精彩】

数据清洗工具flashtext,效率直接提升了几十倍数

一个help函数解决了python的所有文档信息查看…

python 自定义异常/raise关键字抛出异常

python 本地音乐播放器制作过程(附完整源码)

自动化工具:PyAutoGUI的鼠标与键盘控制,解放双手的利器!

你见过程序员送的生日蛋糕吗?

[En]

Have you ever seen a birthday cake from a programmer?

Original: https://www.cnblogs.com/lwsbc/p/16414467.html
Author: Python集中营
Title: 数据清洗工具flashtext,效率直接提升了几十倍数

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/499205/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python – python如何连接sql server数据库

    一、安装第三方模块 首先要下载名为”pymssql”的模块,然后import该模块安装方法 :1.第一种方法:按win+r—-> 输入cm…

    Python 2023年8月1日
    034
  • Scrapy爬取4-项目分布式和gerapy部署

    1.分布式部署: 得先安装scrapy_redis库分布式的安装及讲解:https://editor.csdn.net/md/?articleId=124085978 需要下载re…

    Python 2023年10月1日
    048
  • 前后端学习_Javascript_Flask_页面跳转的问题

    网页开发时常常使用到页面跳转最近在做项目时有以下两个地方需要用到跳转 退出登录时跳转回登陆界面,后端清除SESSION 主菜单点击按钮跳转到指定页面 计划都使用重定向的方法 普通渲…

    Python 2023年8月13日
    053
  • django入门操作体验1

    1.虚拟环境+django环境(若存在用之前的) 创建一个虚拟环境 (会新建一个文件,里面有 Scripts/python.exe文件) python -m venv myvenv…

    Python 2023年8月5日
    058
  • pandas已知数值怎么找位置_如何在pandas中找到模式

    使用pandas和python,我想找到一个模式,其中流的流入量比平常大得多,并且在5天内跟随流量不小于流中流入量的5%。见下面的数据框 我希望能够在第4列中标记此运动(让我们称为…

    Python 2023年8月21日
    052
  • 基于Verilog搭建一个卷积运算单元的简单实现

    目录 前言 1. 图片的缓存与读取 2. 滑窗的构建 3. 权值的读取 * 3.1 行列计数器的构建 3.2 权重数据的取存 4. 卷积运算 * 4.1 乘法运算 4.2 加法运算…

    Python 2023年10月10日
    046
  • 可靠的自托管「GitHub 热点速览 v.22.37」

    自托管(Self-Hosted) 是很多开源项目主打的亮点:数据在手,安全我有。本周 GitHub 热点榜单上有多款自托管的项目,当中自然不能少了之前 HG 小伙伴 @makes …

    Python 2023年10月22日
    056
  • 应届生自学Python两个月,为什么找不到工作?

    今天我们来看一个同龄小伙伴自学Python的困惑,他自学了2个月Python就想找一份好工作,但是四处碰壁。对于这样的难题,我们来看看前辈们是如何解决的。 如果你想要学好pytho…

    Python 2023年8月5日
    034
  • pandas学习汇总(关于怎样处理数据与分析)

    不知道有没有小伙伴跟我一样,之前也断断续续学习过python相关的知识,可是迟迟就是入不了门,开始是出现了问题,不知道怎么解决问题,动不动就是入门到放弃;后续是认认真真看视频,认认…

    Python 2023年8月7日
    040
  • Java开发才不到3年,来面试开口要25K,面完连10K都不想给

    前言 我的好朋友兼大学同学老左家庭经济情况不错,毕业之后没两年自己存了点钱加上家里的支持,自己在杭州开了一家网络公司。由于公司不是很大所以公司大部分的开发人员都是自己面试的,近期公…

    Python 2023年10月9日
    033
  • 浅谈Python flask框架浅析

    前言 Python 面向对象的高级编程语言,以其语法简单、免费开源、免编译扩展性高,同时也可以嵌入到C/C++程序和丰富的第三方库,Python运用到大数据分析、人工智能、web后…

    Python 2023年8月15日
    040
  • python测试框架之pytest (一)

    概述 pytest官方文档介绍: pytest: helps you write better programs pytest is a framework that makes …

    Python 2023年9月11日
    024
  • Pycharm常用的小技巧汇总,Python新手上路必备,快上车!

    Pycharm作为Python开发最常用的IDE之一,不仅兼容性好,而且功能也相当丰富,比如调试、语法高亮、智能提示等等功能,它还支持web开发框架比如Django等,当你熟悉了它…

    Python 2023年8月6日
    093
  • Python制作经典坦克大战小游戏

    FC红白机上的”经典90坦克大战”是不少80后童年的集体回忆(暴露年龄了)。今天我们就分享一个用Python制作的仿”坦克大战”小游…

    Python 2023年9月18日
    019
  • 事务的ACID特性

    技术是为了解决问题而生的,通过事务我们可以解决以下问题: 多个操作不是一个整体操作,出现了部分执行成功的情况,导致数据的状态不一致问题(原子性) 一组操作只有部分完成,没有全部完成…

    Python 2023年10月23日
    031
  • SpringBoot 06: springboot中使用redis

    配置SpringBoot 创建SpringBoot项目时勾选Redis起步依赖 org.springframework.boot spring-boot-starter-data-…

    Python 2023年10月15日
    026
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球