python库(19):flashtext库实现高效文本查找与替换

news2024/11/25 15:11:54

1 FlashText简介

FlashText 是一个用于高效查找和替换关键词的 Python 库。它的优势在于能够在 O(n) 时间复杂度内完成任务,而不是像正则表达式那样需要 O(m*n) 的时间复杂度。FlashText 使用 Aho-Corasick 自动机算法,在大量关键词匹配时表现尤为出色。

flashtext的主要特点

  • 高性能:flashtext被设计为高性能工具,可快速处理大规模文本数据,适用于大数据分析和处理任务。
  • 简单易用:flashtext提供了简单而直观的API,使用户能够轻松地执行文本搜索和替换操作,无需复杂的正则表达式。
  • 多关键词匹配:flashtext支持同时匹配多个关键词,可以一次性查找多个关键词的出现。
  • 支持全词匹配和部分匹配:可以选择是否要求关键词的全词匹配或部分匹配。
  • 高度可定制:flashtext可以自定义搜索和替换操作的规则,以满足不同的需求。

2 FlashText安装

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

3 代码示例

FlashText 提供了两个主要的类:KeywordProcessor 和 KeywordReplaceProcessor。KeywordProcessor 用于查找关键词,而 KeywordReplaceProcessor 用于替换关键词。

3.1 关键词查找

首先使用 KeywordProcessor 来查找关键词。假设我们有一段文本,我们需要在其中查找特定的关键词。

from flashtext import KeywordProcessor

# 初始化 KeywordProcessor
keyword_prcessor = KeywordProcessor()

# 添加关键字
keyword_prcessor.add_keyword('python')
keyword_prcessor.add_keyword('数据科学')

# 待查找的文本
text = "Python 是一门很受欢迎的编程语言,数据科学也是一个热门领域。"

# 查找关键字
keyword_found = keyword_prcessor.extract_keywords(text)

print("找到的关键字:", keyword_found)

在这个例子中,我们初始化了一个 KeywordProcessor 对象,并添加了两个关键词“Python”和“数据科学”。然后,在文本中查找这些关键词,并输出找到的关键词列表。

3.2 关键词替换

接下来,我们使用 KeywordReplaceProcessor 来替换文本中的关键词。假设我们需要将文本中的“Python”替换为“Python 编程语言”,将“数据科学”替换为“大数据分析”。

创建一个KeywordProcessor对象,并使用add_keyword方法添加关键词和相应的替换词,然后,可以使用replace_keywords方法在文本中搜索并替换关键词,代码如下:

from flashtext import KeywordProcessor

# 初始化 KeywordProcessor
keyword_processor = KeywordProcessor()

# 添加关键词及其替换值
keyword_processor.add_keyword('Python', 'Python 编程语言')
keyword_processor.add_keyword('数据科学', '大数据分析')

# 待替换的文本
text = "Python 是一门很受欢迎的编程语言,数据科学也是一个热门领域。"

# 替换关键词
new_text = keyword_processor.replace_keywords(text)

print("替换后的文本:", new_text)

在这个例子中,我们不仅添加了关键词,还为每个关键词指定了替换值。最后,我们用 replace_keywords 方法将文本中的关键词替换为指定的值。

3.3 批量添加关键词

有时候我们需要添加大量的关键词,一个一个添加会非常麻烦。FlashText 提供了批量添加关键词的方法,可以通过字典的形式一次性添加多个关键词。

from flashtext import KeywordProcessor

# 初始化 KeywordProcessor
keyword_processor = KeywordProcessor()

# 批量添加关键词及其替换值
keywords = {
    'Python': 'Python 编程语言',
    '数据科学': '大数据分析',
    '机器学习': 'Machine Learning',
    '人工智能': 'Artificial Intelligence'
}
# 添加关键词和替换值
for key, value in keywords.items():
    keyword_processor.add_keyword(key, value)
# keyword_processor.add_keywords_from_dict(keywords)

# 待替换的文本
text = "Python 是一门很受欢迎的编程语言,数据科学、机器学习和人工智能也是热门领域。"

# 替换关键词
new_text = keyword_processor.replace_keywords(text)
print("替换后的文本:", new_text)

在这个例子中,我们创建了一个包含多个关键词及其替换值的字典。

注意:可以通过 add_keywords_from_dict 方法一次性将这些关键词添加到 KeywordProcessor 中,但是新版的add_keywords_from_dict貌似有点问题,我这边亲测了几次都是都不行,但是还是附上代码:

from flashtext import KeywordProcessor

# 初始化 KeywordProcessor
keyword_processor = KeywordProcessor()

# 批量添加关键词及其替换值
keywords = {
    'Python': ['Python 编程语言'],
    '数据科学': ['大数据分析'],
    '机器学习': ['Machine Learning'],
    '人工智能': ['Artificial Intelligence']
}

keyword_processor.add_keywords_from_dict(keywords)

# 待替换的文本
text = "Python 是一门很受欢迎的编程语言,数据科学、机器学习和人工智能也是热门领域。"

# 替换关键词
new_text = keyword_processor.replace_keywords(text)
print("替换后的文本:", new_text)

3.4 处理包含子字符串的关键词

在一些情况下,关键词之间可能存在子字符串关系,比如“数据”和“数据科学”。FlashText 允许我们设置关键词的优先级,确保查找和替换操作不会产生歧义。

from flashtext import KeywordProcessor

# 初始化 KeywordProcessor
keyword_processor = KeywordProcessor(case_sensitive=False)

# 添加关键词及其替换值
keyword_processor.add_keyword('数据科学', '大数据分析')
keyword_processor.add_keyword('数据', 'Data')

# 待替换的文本
text = "数据科学是一个热门领域,数据处理是其核心部分。"

# 替换关键词
new_text = keyword_processor.replace_keywords(text)

print("替换后的文本:", new_text)

结果如下:

在这个例子中,我们通过将 case_sensitive 参数设置为 False 来忽略大小写,并确保“数据科学”优先于“数据”被替换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1986936.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python机器学习】非均衡分类问题

在大多数情况下不同类比的分类代价并不相等。 分类性能度量指标:正确率、召回率及ROC曲线 通常情况下,我们可以基于错误率来衡量分类器任务的成功程度。错误率指的是在所有测试样例中错分的样例比例。实际上,这样的度量错误掩盖了样例如何被…

image.convert()函数转换格式及显示图像的RGB三通道图像

引 言 视觉任务处理的图片按照图像通道深度分为单通道图像和多通道图像。单通道图像有grayscale灰度图、binary二值图、PNG图,多通道图像有三通道24位真彩色RGB图,8位伪彩色图像,YCbCr图像等。本文先介绍各种格式图像的特点,随后讲…

c++初阶-----STL---list

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

playwrite今日头条自动发帖

目的 大家好,我是watchpoints ,一个只为自己打工程序员, watchpoints是我github用户名 ,也是我的wechat 用户名, 每天看新闻浪费大量时间,写一个程序 自动提醒你21点远离手机 python实现 步骤1:自动登录 # …

在 Linux 9 上安装 Oracle 19c:克服兼容性问题 (INS-08101)

Oracle 数据库 19c 的基础版本 (19.3) 发布的时候还没有 Linux 9 ,因此在Linux 9上面安装Oracle 19c会遇到很多兼容性问题。本文将探讨如何解决这些问题。 安装步骤 设置环境变量以绕过操作系统检查: Oracle 19.3 安装程序无法识别 Linux 9。 [WARNIN…

sql二次注入实战--2018年网顶杯

网址:BUUCTF在线评测 (buuoj.cn) 当我们进入后显示这个页面: 当我们第一次点击发帖的时候就会跳转到登陆页面,上面有提示,告诉我们账号为zhangwei,密码为zhangwei***: 这里我们可以使用bp抓包工具来进行暴力破解密码&…

《剑来》语句摘录(十二)

◆ 第二百零三章 休要略过不提 >> 怨怼与仇恨是快刀斩乱麻,一往无前。金铁相错,激起的火星,就是大丈夫的恩怨分明。无非敢作敢当。 愧疚和遗憾却是一把钝刀,刀刃上边的缺口,皆是曾经犯过的错误。关门磨刀即是后悔…

LVS四层架构部署

LVS四层架构部署 LVS集群的类型 lvs-nat: 修改请求报文的目标IP,多目标IP的DNATlvs-dr: 操纵封装新的MAC地址lvs-tun: 在原请求IP报文之外新加一个IP首部lvs-fullnat: 修改请求报文的源和目标IP LVS-NAT 工作流程 可以理解na…

主从备份(复制)

一、备份的三种类型 备份的三种主要类型包括热备份、逻辑备份和物理备份,每种备份类型都有其特定的应用场景和优缺点。 1. 热备份 定义: 热备份是在数据库或系统处于正常运行状态下进行的备份。这种备份方式允许在不停机的情况下对数据库或系统数据进…

用Python构建一个简单的神经网络

准备工作 首先我们需要使用到vscode 在终端 窗口下输入安装:pip3 install tensorflow pandas numpy keras 代码编写 导入库 import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense import panda…

PyTorch深度学习实战(3)—— 小试牛刀:CIFAR-10分类

下面尝试从零搭建一个PyTorch模型来完成CIFAR-10数据集上的图像分类任务,步骤如下。 (1)使用torchvision加载并预处理CIFAR-10数据集。 (2)定义网络。 (3)定义损失函数和优化器。 (4…

面向服务架构(SOA)介绍

在汽车电子电气架构还处于分布式时代时,汽车软件的开发方式主要是采用嵌入式软件进行开发,而随着汽车智能化程度的加深,更加复杂且多样的功能需求让汽车软件在复杂度上再上一层。在整车的自动驾驶方面,由于未来高阶自动驾驶能力的…

JavaScript constructor原型原型继承

constructor 在 JavaScript 中,构造函数是一种特殊的函数,使用 new 关键字来调用,用于创建对象实例。JavaScript 中的构造函数通常通过 function 关键字定义。 例如: function Person(name, age) {this.name name;this.age a…

C语言预处理:开启编程新境界

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 1. 预处理符号 在C语言中,我们可以通过一些预定义符号查看文件的…

vue中post请求返回二进制流文件下载

1 .调用接口返回的如下图所示,此时看到是一个流文件 2.不管是get请求还是post请求都需要加上 下面这行代码 responseType: "blob", 3.我们自行二次封装的axios可能会导致乱码现象,建议直接用axios调用接口请求 4.关于Excel导出 POI 响应头设置 Content-Type: applica…

Tomcat高可用集群(实例详解)

一.环境准备 虚拟机的版本:VMware-workstation-full-15.5.6-16341506.exe系统镜像版本:CentOS-6.10-x86_64-bin-DVD1.iso,全新安装,桌面版,可上网系统内存大小:1GB系统硬盘大小:20GB连接工具版…

《决胜B端 产品经理升级之路》 知识点总结

什么是b端产品? b端产品是指面向企业或组织的经营管理问题,旨在解决企业规模、成本、效率、品质和风控等方面的产品。这些产品主要帮助企业提高运营效率、降低成本、改善品质和控制风险等。b端产品适用于各种行业和企业类型,可以为企业带来深…

WordPress原创插件:disable-gutenberg禁用古腾堡编辑器和小工具

WordPress原创插件:disable-gutenberg禁用古腾堡编辑器和小工具 disable-gutenberg插件下载:https://download.csdn.net/download/huayula/89616495

【zlm】针对单个设备的音频的编码的设置

目录 结论 原理 测试 结论 为了防止zlm音频配置里设置成opus优先,在国标推流时,调用push时,默认加上codecpcma 如下 https://10.60.100.196:10443/index/api/webrtc?applive&streamtest&typepush&codecpcma 原理 测试 …

ASP.Net Core设置接口根路径的方法

使用asp.net core开发微服务项目,需要给每个服务设置不同的根路径,这样既能使用网关转发请求,又方便对单个服务进行测试,保证请求路径的统一。 设置方法需要使用中间件,在Program.cs添加如下代码 app.UsePathBase(&qu…