乐趣区

关于python:数据清洗工具flashtext效率直接提升了几十倍数

在平时的一些的小规模的数据的过滤、荡涤过程中应用最多的就是正则表达式,然而随着数据规模的增大,正则表达式就显得有些心有余力有余了。

【浏览全文】

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

从下面的示例图的性能比照中,能够发现随着咱们须要解决的字符越来越多,正则表达式的处理速度简直都是线性减少的。然而,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')

这样别离应用两种形式曾经将须要的关键词增加到词库处理器中了。

3、提取关键词

通过上一步增加关键词,当初词库处理器中曾经存在有关键词的信息了,再应用 extract_keywords 将关键词提取进去即可。

# 在一个字符串中提取出关键词信息

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 函数。

# 初始化一个字典通过用来做批量增加

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

# 通过字典的形式来批量增加关键词

processor.add_keywords_from_dict(dict_)

# 从批量增加的关键词中匹配关键词

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

# 后果

print(result)

# ['java', 'python']

# 通过列表的形式批量增加关键词

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'}

发现所有的关键词曾经增加到词库处理器中,并且反复的不会再次增加。

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'}

发现须要移除的关键词曾经被全副移除了。

8、执行效率比照

为了更可观的展现成果,找了两个 flashtext 在搜寻和替换关键词过程中的效率比照图能够高深莫测。

flashtext、正则表达式搜寻效率比照

flashtext、正则表达式搜寻替换比照

【往期精彩】

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

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

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

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

来自程序猿的生日蛋糕你见过吗?

退出移动版