python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python 多模式字符串搜索

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

作者:言之。

Aho-Corasick 算法是一种用于精确或近似多模式字符串搜索的高效算法,本文给大家介绍Python 多模式字符串搜索 Aho-Corasick的相关知识,感兴趣的朋友跟随小编一起看看吧

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

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

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

for idx, key in enumerate('heherhersshe'.split()):
    a.add_word(key, (idx, key))

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

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

以下是一个使用 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 多模式字符串搜索内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文