介绍
大家好,我是本站际云服务器推荐网的小编小本本。今天我将为大家介绍GitHub上的另一个开源系统Python库FlashText。与正则匹配相比,FlashText在获得和更换关键字方面具有更高的性能。

FlashText的应用
在进行较小规模的信息筛选和清理时,通常会使用正则匹配。但随着数据量的增加,正则匹配的效率将大大降低。例如,在检索一个包含15k个关键字的10k词库文件时,正则匹配大约需要0.165秒。但是,FlashText只需要0.002秒。显然,FlashText的效率比正则匹配快了82倍。
从以下性能测试结果可以看出,随着需要处理的标识符数量增加,正则匹配的响应速度大部分是线性增加的,而FlashText的响应速度基本保持不变。

使用FlashText
为了使用FlashText,我们需要先安装FlashText库。可以使用pip命令,也可以使用其他方式,例如在此我们使用清华大学的镜像站。
pip install flashtext -i https://pypi.tuna.tsinghua.edu.cn/simple
接下来,我们可以使用add_keyword()函数向关键字库中添加新的关键字。需要注意的是,第一个参数指定核心关键字,第二个参数(可选)可用作别名,如果关键字被找到,则使用别名显示。
from flashtext import KeywordProcessor
# 创建关键字库
processor = KeywordProcessor()
# 简单添加关键字
processor.add_keyword('Python')
# 添加关键字和别名
processor.add_keyword('Scala', 'Java')
一旦有了关键字库,我们可以使用extract_keywords()函数从指定字符串中提取关键字。
# 从字符串中提取关键字
found = processor.extract_keywords('I like Python and Scala.')
# 结果
print(found)
# ['Python', 'Java']
可以看到,在上面的示例中,我们可以从字符串“I like Python and Scala.”中提取出Python和Java两个关键字。
如果我们想要替换关键字,我们可以使用replace_keywords()函数。这只会替换别名在关键字库中的单词。
# 将“Scala”替换为“Java”
replaced = processor.replace_keywords('I like Scala.')
# 结果
print(replaced)
# I like Java.
我们可以看到,在上面的示例中,“Scala”已被成功替换为“Java”。
有时,我们可能忘记了关键字库中添加了哪些关键字。这时,我们可以使用get_all_keywords()函数获取所有当前关键字库中的关键字。
# 获取所有关键字
all_keywords = processor.get_all_keywords()
# 结果
print(all_keywords)
# {'Python': 'Python', 'Java': 'Java'}
如果我们需要在关键字库中添加更多关键字时,可以使用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'])
# 获取所有关键字
all_keywords = processor.get_all_keywords()
# 结果
print(all_keywords)
# {'Python': 'python', 'pandas': 'python', 'Scala': 'scala', 'java': 'java',
# 'java_ee': 'java', 'java_se': 'java', 'java_me': 'java', 'all': 'python', 'go': 'go'}
如果我们需要删除关键字,可以使用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']})
# 获取所有关键字
all_keywords = processor.get_all_keywords()
# 结果
print(all_keywords)
# {'Scala': 'scala', 'java_se': 'java', 'go': 'go'}
开发效率对比
下面是两次使用FlashText和正则匹配进行关键字检索和替换的性能测试结果。可以看到,在处理大量关键字时,FlashText比正则匹配具有显著的优势。

总结
使用FlashText库可以极大地提高文本处理的效率,特别是在处理大量数据时。相比传统的正则表达式,FlashText具有更快的响应速度。并且,FlashText还具有可扩展的功能,可以方便快捷地实现关键字的添加、删除和替换,大大提高了开发效率。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6613.html
