返回顶部
首页 > 资讯 > 后端开发 > Python >Python利用FlashText算法实现替换字符串
  • 757
分享到

Python利用FlashText算法实现替换字符串

2024-04-02 19:04:59 757人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录前言1.准备2.基本使用提取关键词替换关键词关键词大小写敏感标记关键词位置获取目前所有的关键词批量添加关键词单一或批量删除关键词3.高级使用支持额外信息支持特殊单词边界4.结尾前

前言

FlashText 算法是由 Vikash Singh 于2017年发表的大规模关键词替换算法,这个算法的时间复杂度仅由文本长度(N)决定,算法时间复杂度为O(N)。

而对于正则表达式的替换,算法时间复杂度还需要考虑被替换的关键词数量(M),因此时间复杂度为O(MxN)。

简而言之,基于FlashText算法的字符串替换比正则表达式替换快M倍以上,这个M是需要替换的关键词数量,关键词越多,FlashText算法的优势就越明显。

下面就给大家介绍如何在 python 中基于 flashtext 模块使用 FlashText 算法进行字符串查找和替换,如果觉得对你的项目团队很有帮助,请记得帮作者转发一下哦。

1.准备

请选择以下任一种方式输入命令安装依赖

1. windows 环境 打开 Cmd (开始-运行-CMD)。

2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。

3. 如果你用的是 vscode编辑器 或 PyCharm,可以直接使用界面下方的Terminal.

pip install flashtext

2.基本使用

提取关键词

一个最基本的提取关键词的例子如下:

from flashtext import KeyWordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor()
# 2. 添加关键词
keyword_processor.add_keyword('Big Apple', 'New York')
keyword_processor.add_keyword('Bay Area')
# 3. 处理目标句子并提取相应关键词
keywords_found = keyword_processor.extract_keywords('I love Big Apple and Bay Area.')
# 4. 结果
print(keywords_found)
# ['New York', 'Bay Area']

其中 add_keyword 的第一个参数代表需要被查找的关键词,第二个参数是给这个关键词一个别名,如果找到了则以别名显示。

替换关键词

如果你想要替换关键词,只需要调用处理器的 replace_keywords 函数:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor()
# 2. 添加关键词
keyword_processor.add_keyword('New Delhi', 'NCR region')
# 3. 替换关键词
new_sentence = keyword_processor.replace_keywords('I love Big Apple and new delhi.')
# 4. 结果
print(new_sentence)
# 'I love New York and NCR region.'

关键词大小写敏感

如果你需要精确提取,识别大小写字母,那么你可以在处理器初始化的时候设定 sensitive 参数:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器, 注意设置大小写敏感(case_sensitive)为TRUE
keyword_processor = KeywordProcessor(case_sensitive=True)
# 2. 添加关键词
keyword_processor.add_keyword('Big Apple', 'New York')
keyword_processor.add_keyword('Bay Area')
# 3. 处理目标句子并提取相应关键词
keywords_found = keyword_processor.extract_keywords('I love big Apple and Bay Area.')
# 4. 结果
print(keywords_found)
# ['Bay Area']

标记关键词位置

如果你需要获取关键词在句子中的位置,在 extract_keywords 的时候添加 span_info=True 参数即可:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor()
# 2. 添加关键词
keyword_processor.add_keyword('Big Apple', 'New York')
keyword_processor.add_keyword('Bay Area')
# 3. 处理目标句子并提取相应关键词, 并标记关键词的起始、终止位置
keywords_found = keyword_processor.extract_keywords('I love big Apple and Bay Area.', span_info=True)
# 4. 结果
print(keywords_found)
# [('New York', 7, 16), ('Bay Area', 21, 29)]

获取目前所有的关键词

如果你需要获取当前已经添加的所有关键词,只需要调用处理器的 get_all_keywords 函数:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor()
# 2. 添加关键词
keyword_processor.add_keyword('j2ee', 'Java')
keyword_processor.add_keyword('colour', 'color')
# 3. 获取所有关键词
keyword_processor.get_all_keywords()
# output: {'colour': 'color', 'j2ee': 'Java'}

批量添加关键词

批量添加关键词有两种方法,一种是通过词典,一种是通过数组

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor()
# 2. (第一种)通过字典批量添加关键词
keyword_dict = {
    "java": ["java_2e", "java programing"],
    "product management": ["PM", "product manager"]
}
keyword_processor.add_keywords_from_dict(keyword_dict)
# 2. (第二种)通过数组批量添加关键词
keyword_processor.add_keywords_from_list(["java", "Python"])
# 3. 第一种的提取效果如下
keyword_processor.extract_keywords('I am a product manager for a java_2e platfORM')
# output ['product management', 'java']

单一或批量删除关键词

删除关键词也非常简单,和添加类似:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor()
# 2. 通过字典批量添加关键词
keyword_dict = {
    "java": ["java_2e", "java programing"],
    "product management": ["PM", "product manager"]
}
keyword_processor.add_keywords_from_dict(keyword_dict)
# 3. 提取效果如下
print(keyword_processor.extract_keywords('I am a product manager for a java_2e platform'))
# ['product management', 'java']
# 4. 单个删除关键词
keyword_processor.remove_keyword('java_2e')
# 5. 批量删除关键词,也是可以通过词典或者数组的形式
keyword_processor.remove_keywords_from_dict({"product management": ["PM"]})
keyword_processor.remove_keywords_from_list(["java programing"])
# 6. 删除了java programing关键词后的效果如下
keyword_processor.extract_keywords('I am a product manager for a java_2e platform')
# ['product management']

3.高级使用

支持额外信息

前面提到在添加关键词的时候第二个参数为其别名,其实你不仅可以指示别名,还可以将额外信息放到第二个参数中:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
kp = KeywordProcessor()
# 2. 添加关键词并附带额外信息
kp.add_keyword('Taj Mahal', ('Monument', 'Taj Mahal'))
kp.add_keyword('Delhi', ('Location', 'Delhi'))
# 3. 效果如下
kp.extract_keywords('Taj Mahal is in Delhi.')
# [('Monument', 'Taj Mahal'), ('Location', 'Delhi')]

这样,在提取关键词的时候,你还能拿到其他一些你想要在得到此关键词时输出的信息。

支持特殊单词边界

Flashtext 检测的单词边界一般局限于 \w [A-Za-z0-9_] 外的任意字符,但是如果你想添加某些特殊字符作为单词的一部分也是可以实现的:

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor()
# 2. 添加关键词
keyword_processor.add_keyword('Big Apple')
# 3. 正常效果
print(keyword_processor.extract_keywords('I love Big Apple/Bay Area.'))
# ['Big Apple']
# 4. 将 '/' 作为单词一部分
keyword_processor.add_non_word_boundary('/')
# 5. 优化后的效果
print(keyword_processor.extract_keywords('I love Big Apple/Bay Area.'))
# []

4.结尾

个人认为这个模块已经满足我们的基本使用了,如果你有一些该模块提供的功能之外的使用需求,可以给 flashtext 贡献代码

附 FlashText 与正则相比 查询关键词 所花费的时间之比:

到此这篇关于Python利用FlashText算法实现替换字符串的文章就介绍到这了,更多相关Python替换字符串内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python利用FlashText算法实现替换字符串

本文链接: https://lsjlt.com/news/144593.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python利用FlashText算法实现替换字符串
    目录前言1.准备2.基本使用提取关键词替换关键词关键词大小写敏感标记关键词位置获取目前所有的关键词批量添加关键词单一或批量删除关键词3.高级使用支持额外信息支持特殊单词边界4.结尾前...
    99+
    2024-04-02
  • python字符串占位符替换怎么实现
    在Python中,可以使用两种方法来实现字符串占位符的替换。方法一:使用百分号占位符name = "John"age = 25pri...
    99+
    2023-10-18
    python
  • golang reg实现替换字符串的方法
    在golang中,我们经常会遇到需要在一个字符串中查找某个字符或子串并对其进行替换的情况。golang中提供了许多内置函数来完成这个任务,其中使用正则表达式的方法在一些特定情况下能够更加方便和高效。首先,我们需要导入正则表达式的包。在gol...
    99+
    2023-05-14
  • shell如何实现字符串替换
    小编给大家分享一下shell如何实现字符串替换,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!字符串替换${string//pat...
    99+
    2024-04-02
  • JAVA字符串替换怎么实现
    这篇文章主要讲解了“JAVA字符串替换怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JAVA字符串替换怎么实现”吧!最近在java开发的过程中用到了字符串的替换,本来觉得挺简单的问题...
    99+
    2023-06-17
  • go字符串替换怎么实现
    在Go语言中,可以使用strings.Replace函数来实现字符串替换。该函数的定义如下: func Replace(s, old...
    99+
    2023-10-23
    go
  • swift字符串替换怎么实现
    在Swift中,可以使用replacingOccurrences(of:with:)方法来实现字符串的替换。该方法接受两个参数,第一...
    99+
    2023-10-19
    swift
  • php怎么利用正则替换字符串
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php利用正则来替换字符串的两种方法:preg_replace() preg_filter()preg_replace() 和preg_filter()函数都可以执行正...
    99+
    2019-03-29
    php 正则 替换字符串
  • javascript字符串替换字符的方法
    这篇文章主要介绍“javascript字符串替换字符的方法”,在日常操作中,相信很多人在javascript字符串替换字符的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • Python字符串替换的3种方法
    Python字符串替换笔记主要展示了如何在Python中替换字符串。Python中有以下几种替换字符串的方法,本文主要介绍前三种。 replace方法(常用)translate方法re.sub方法字符...
    99+
    2023-09-09
    python 开发语言 字符串
  • c++字符串替换指定字符怎么实现
    在C++中,可以使用std::string类来表示字符串,可以使用std::replace函数来替换字符串中的指定字符。下面是一个示...
    99+
    2023-10-19
    c++
  • Java利用StringBuffer替换特殊字符的方法实现
    在本实例中为保证学生输入的 Java 文件名合格,将利用 StringBuffer 类实现对 Java 文件名中的特殊符号进行替换,包括将中文状态下的“。”和全角状态下的“.”替换为...
    99+
    2024-04-02
  • php如何利用正则来替换字符串
    这篇文章将为大家详细讲解有关php如何利用正则来替换字符串,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php利用正则替换字符串的方法:1、使用preg_replace()函数,语法“preg_repla...
    99+
    2023-06-21
  • javascript替换字符串的方法
    这篇文章将为大家详细讲解有关javascript替换字符串的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。js中字符串替换的方法:1、直接使用“str.replace("需要替换的字符串&q...
    99+
    2023-06-14
  • Java字符串替换的方法
    java中字符串替换方法主要有三种,分别是replace()、replaceAll()和replaceFirst(),这三种方法可以在三种不同情况应用,下面就由我来具体说明这三种方法的应用情况吧。 r...
    99+
    2023-10-25
    java 开发语言
  • Python中怎么利用正则表达式替换字符串
    Python中怎么利用正则表达式替换字符串,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。替换所有匹配的子串用newstring替换subject中所有与正则表达...
    99+
    2023-06-17
  • jQuery如何实现字符串全部替换
    这篇文章主要为大家展示了“jQuery如何实现字符串全部替换”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jQuery如何实现字符串全部替换”这篇文章吧。大家都...
    99+
    2024-04-02
  • C语言如何实现字符串替换
    在C语言中可以通过循环遍历字符串的每个字符,然后判断是否需要替换,如果需要替换则使用新的字符替换原字符。下面是一个示例代码,实现了字...
    99+
    2023-08-24
    C语言
  • python字符串怎么批量替换
    在Python中,可以使用`replace()`方法来替换字符串中的内容。以下是一种批量替换的方法,您可以使用一个字典来存储要替换的内容,然后在字符串中使用`replace()`方法进行替换:```pythondef batch_rep...
    99+
    2023-08-11
    python
  • python怎么替换指定字符串
    在Python中,可以使用字符串的 replace() 方法来替换指定的字符串。该方法接受两个参数,第一个参数是要被替换的字符串,第...
    99+
    2024-02-29
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作