数据清洗工具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)

大家都在看

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