Python 多模式字符串搜索 Aho-Corasick详解

 更新时间:2025年01月19日 11:22:32   作者:言之。  
Aho-Corasick 算法是一种用于精确或近似多模式字符串搜索的高效算法,本文给大家介绍Python 多模式字符串搜索 Aho-Corasick的相关知识,感兴趣的朋友跟随小编一起看看吧

ahocorasick.Automaton 是 Python 中 pyahocorasick 库提供的一个类,用于实现 Aho-Corasick 自动机。Aho-Corasick 算法是一种用于精确或近似多模式字符串搜索的高效算法。

通过 pip install pyahocorasick 安装 pyahocorasick 库。
并且,该模块是用 C 编写的,安装时需要有 C 编译器来编译本机 Cpython 扩展。

使用 ahocorasick.Automaton 类的一般步骤如下:

  • 导入 ahocorasick 库:import ahocorasick
  • 创建 Automaton 对象:a = ahocorasick.Automaton()
  • (可选)将字符串键及其关联值添加到自动机,可作为 trie 树使用。例如:
for idx, key in enumerate('heherhersshe'.split()):
    a.add_word(key, (idx, key))

调用 make_automaton() 方法完成并创建 Aho-Corasick 自动机:a.make_automaton()

创建好自动机后,可以使用以下主要方法进行搜索操作:

  • iter(string, (start, (end))):使用提供的输入字符串执行 Aho-Corasick 搜索过程。它返回一个迭代器,为在字符串中找到的键返回元组 (end_index, value),其中 end_index 是匹配结束的索引位置,value 是与匹配的键相关联的值。
  • iter_long(string, (start, (end))):返回一个搜索最长、非重叠匹配的迭代器(automaton_search_iter_long 类的对象)。

以下是一个使用 ahocorasick.Automaton 进行多模式字符串搜索的示例代码:

import ahocorasick as ah
a = ah.automaton()
with open('userdict.txt', 'r', encoding='utf-8') as f2:  # 加载文件
    keywords = (a.strip() for a in f2.readlines())  # 加载关键词
    # 利用 add_word 方法将关键词加入自动机!
    for x in range(len(keywords)):
        a.add_word(keywords[x], (x, keywords[x]))  # 第二个参数为自定义的返回值
# 创建 aho-corasick 自动机
a.make_automaton()
with open('jianjie.txt', 'r', encoding='utf-8') as f:  # 打开要检索文档
    jianjie = f.read()  # 读取正文(如果太多,可以分断加载,分段检索)
# 开始查找,该方法匹配最长的字符串
for item in a.iter_long(jianjie):
    print(item)
print('-' * 20)
# 开始查找,该方法匹配所有字符串
for item in a.iter(jianjie):
    print(item)

在上述示例中,首先创建了一个自动机对象 a,然后从文件中读取关键词,并使用 add_word 方法将关键词添加到自动机中。接着调用 make_automaton 方法创建 Aho-Corasick 自动机。最后,通过打开另一个文件读取要搜索的正文,并使用 iter_longiter 方法进行匹配查找,并打印出匹配的结果。

Aho-Corasick 自动机的优点包括能够在一次运行中找到给定集合所有字符串,适用于多模式字符串匹配的场景,例如网络内容过滤、版权检测、病毒扫描等,在自然语言处理中查找特定词汇或模式,以及生物信息学中在 DNA 或蛋白质序列分析中寻找特定的序列模式等方面都有应用。

到此这篇关于Python 多模式字符串搜索 Aho-Corasick详解的文章就介绍到这了,更多相关Python 多模式字符串搜索内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 协程中的迭代器,生成器原理及应用实例详解

    python 协程中的迭代器,生成器原理及应用实例详解

    这篇文章主要介绍了python 协程中的迭代器,生成器原理及应用,结合具体实例形式详细分析了Python协程中的迭代器,生成器概念、原理及应用操作技巧,需要的朋友可以参考下
    2019-10-10
  • Python实现执行Shell命令并获取输出

    Python实现执行Shell命令并获取输出

    这篇文章主要介绍了如何借助 os.system() 从 Python 脚本执行 cmd 命令,以及如何借助 Python 中的 subprocess 模块以更简单的方式从脚本执行 cmd 命令,感兴趣的小伙伴可以了解下
    2023-10-10
  • python将天数转换为日期字符串的方法实例

    python将天数转换为日期字符串的方法实例

    这篇文章主要给大家介绍了关于python将天数转换为日期字符串的相关资料,以及将将字符串的时间转换为时间戳的实例代码,需要的朋友可以参考下
    2022-01-01
  • python itchat给指定联系人发消息的方法

    python itchat给指定联系人发消息的方法

    这篇文章主要介绍了python itchat给指定联系人发消息的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • Python:二维列表下标互换方式(矩阵转置)

    Python:二维列表下标互换方式(矩阵转置)

    今天小编就为大家分享一篇Python:二维列表下标互换方式(矩阵转置),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python中的try except与R语言中的tryCatch异常解决

    python中的try except与R语言中的tryCatch异常解决

    这篇文章主要为大家介绍了python中的try except与R语言中的tryCatch异常解决的方式及分析,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • TFRecord格式存储数据与队列读取实例

    TFRecord格式存储数据与队列读取实例

    今天小编就为大家分享一篇TFRecord格式存储数据与队列读取实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python实现边缘提取的示例代码

    Python实现边缘提取的示例代码

    这篇文章主要为大家详细介绍了Python计算机视觉中如何实现边缘提取,文中的示例代码讲解详细,对我们学习有一定帮助,需要的可以参考一下
    2022-05-05
  • 对Python3使运行暂停的方法详解

    对Python3使运行暂停的方法详解

    今天小编就为大家分享一篇对Python3使运行暂停的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • python密码学简单替代密码解密及测试教程

    python密码学简单替代密码解密及测试教程

    这篇文章主要介绍了python密码学简单替代密码解密及测试教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论