使用 Python 进行 Aho-Corasick 算法模式搜索2024 年 8 月 29 日 | 4 分钟阅读 Aho-Corasick 算法是一种字典匹配算法。该算法用于搜索关键词集中存在的单词。该算法在查找单词及其位置方面快速而高效。Aho-Corasick 算法构建现有系统并采用TRIE 的概念。 使用树形数据结构来执行该技术。当我们创建树时,它会将其转换或尝试将其转换为自动机,从而使我们能够在线性时间内完成或执行搜索。 Aho-Corasick 算法的时间复杂度Aho-Corasik 算法以O(X+ Y+ Z) 的时间搜索单词,其中X是文本长度,Y是关键词的总长度,而Z是关键词在文本中出现的次数。 Aho-Corasick 算法的问题陈述假设我们有输入文本和一个包含 m 个单词的数组 a[ ]。我们需要搜索输入文本中存在的单词的数量。 设 x 为文本长度,y 为所有单词中字符的总数。这意味着 y = len(a [0]) + len(a [1]) + len(a [2]) + …. + len(a [z - 1])。这里,z 是输入单词的数量。 我们将通过一个示例来理解该算法,在该示例中,我们将采用一个输入字符串和一组要在文本字符串中搜索的单词。 示例 输入 输出 The Word "he" is found at index 0 to 1. The Word "he" is found at index 6 to 7 The Word "he" is found at index 11 to 12 The Word "hello" is found at index 0 to 4. The Word "the" is found at index 5 to 7 The Word "their" is found at index 7 to 11. The Word "she" is found at index 10 to 12. The Word "here" is found at index 11 to 14 算法预处理Aho-Corasick 算法分为三个不同的阶段:
转移函数 (Go To):此阶段使用输入到算法中的关键字(按模式排列)来构建树。它从主函数开始,然后是状态集,最后是主根。它跟踪数组 a[ ] 中所有单词的边界。二维数组 gt[ ][ ] 表示转移函数,我们可以在其中存储字符和状态以供后续状态使用。 输出函数 (Output):此阶段搜索在特定状态结束的单词。它是条件和可用性匹配时的结果。此函数存储以当前状态结尾的单词的索引。一维数组 op[ ] 表示输出函数,我们可以在其中为当前状态存储单词的位图。 失配函数 (Failure):它向后搜索转换以从集合中查找合适的关键字。如果关键字不匹配,则不会计数。当当前字符在 Trie 中缺少边时,此函数记录所有经过的边。一维数组 fl[ ] 表示失配函数,我们在其中记录当前状态的下一个状态。 Python 中 Aho-Corasick 算法的实现以进行模式搜索这是 Python 中 Aho-Corasick 算法的实现 代码 输出 The Word "he" is found at index 0 to 1. The Word "he" is found at index 6 to 7 The Word "he" is found at index 11 to 12 The Word "hello" is found at index 0 to 4. The Word "the" is found at index 5 to 7 The Word "their" is found at index 7 to 11. The Word "she" is found at index 10 to 12. The Word "their" is found at index 11 to 14 说明 在此,我们使用了默认字典来存储输出。我们设置了字符和状态的最大限制。使用算法的三个阶段,我们对数据进行了预处理。然后,使用循环和队列,我们构建了机器/自动机,然后从文本字符串中搜索了单词集。 |
在 Python 中,列表包含多种数据,包括字符串和整数。所有项目都用逗号分隔;列表通过将值括在方括号中来表示。我们可以使用 Python 内置的 len() 方法来确定列表的长度。要计算列表的长度...
阅读 3 分钟
简介:本文将教我们如何使用 Python 清理回收站。回收站是 Windows 系统上已删除文件和文件夹的临时存储位置。已删除的文档或文件夹被移动到回收站,如果...
阅读 4 分钟
Selenium 模块 Selenium 是 Python 提供的一个用于自动化测试的模块。它为使用 Selenium 驱动程序进行不同的功能测试提供了易于使用的 API。Selenium 是一个开源的 Python 框架,它提供用于使用 Selenium 编写功能测试的 API。它用于...
阅读 2 分钟
在Python中,复合语句是执行特定任务的一组语句。它由一个或多个子句组成,每个子句都由一个头部和一个套件组成。头部是指定条件的一行...
阅读 4 分钟
在本教程中,我们将了解如何使用列表并将其转换为 Python 中的数据框。但在开始之前,让我们回顾一下什么是列表和什么是数据框?列表是 Python 中的一种数据结构,其中所有...
阅读 6 分钟
os.path.basename() 是 Python os.path 模块中的一个方法,它返回文件路径的基本名称。基本名称是路径的最后一个组件,在剥离所有父目录和扩展信息之后。例如,如果路径是 /home/user/Documents/myfile.txt,则基本名称是...
阅读 3 分钟
Python 的 signal 模块是标准库的一部分,它提供了处理信号的机制,信号是发送到正在运行的程序的中断。信号可用于多种目的,例如进程间通信、错误处理和超时实现。signal 模块...
阅读 17 分钟
Python是一种可以服务于不同目的的编程语言,用它几乎可以做任何事情。Python也可以用于开发游戏。开发游戏是学习如何编写程序的好方法。在下面的教程中,我们将学习如何...
阅读 13 分钟
形态学操作可用于提取图像组件,这些组件有助于描述和表示区域的形状。形态学操作是依赖于图像形状的基本任务。它通常在二值图像上进行。它需要两个...
阅读 3 分钟
在本教程中,我们将学习如何使用 print() 函数的 flush 参数显式刷新输出数据缓冲区。我们还将确定何时需要刷新数据缓冲区,以及何时不需要。我们还将讨论更改数据……
阅读 10 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India