pyahocorasick是一个快速且内存高效的库,用于精确或近似的多模式字符串搜索。使用`ahocorasick.Automaton`类,您可以在某些输入文本中一次性找到多个关键字字符串。您可以使用它作为普通的字典类似Trie,或将Trie转换为自动机以进行高效的Aho-Corasick搜索。并且可以将自动机序列化到磁盘以方便重复使用大型自动机。用C语言实现,在Python 3.6+上测试。支持Linux、macOS和Windows。BSD-3-Clause许可。
项目描述
pyahocorasick 是一个快速且内存高效的库,用于精确或近似的多模式字符串搜索,这意味着您可以在一些输入文本中一次性找到多个关键字字符串的实例。字符串“索引”可以提前构建并保存到磁盘上(作为pickle),以供以后重新加载和重用。该库提供了一个 ahocorasick Python模块,您可以使用它作为普通的字典样式的Trie,或者将Trie转换为自动机,以实现高效的Aho-Corasick搜索。
pyahocorasick是用C实现的,并在Python 3.8及以上版本进行了测试。它适用于64位Linux、macOS和Windows。
许可证是BSD-3-Clause。一些工具,如测试和纯Python自动机,是奉献给公共领域的。
用户评价
非常感谢这个包。不确定在哪里留下感谢信,但这个包在我们的应用中绝对出色,我们在应用中有一个包含100k+ CRISPR向导的库,我们不得不在数百万个DNA测序读数流中计数。这个包比我们之前用于此目的的C程序做得更快,并帮助我们仅使用Python代码构建我们的流水线。
Miika(阿斯利康功能基因组学中心) https://github.com/WojciechMula/pyahocorasick/issues/145
下载和源代码
您可以从以下位置获取 pyahocorasick:
快速入门
此模块是用C编写的。您需要安装C编译器以编译本机CPython扩展。要安装
pip install pyahocorasick
然后创建一个自动机
>>> import ahocorasick >>> automaton = ahocorasick.Automaton()
您可以使用自动机类作为Trie。向此Trie添加一些字符串键及其关联的值。这里我们将(插入索引,原始字符串)元组作为值关联到我们添加到Trie的每个键字符串
>>> for idx, key in enumerate('he her hers she'.split()): ... automaton.add_word(key, (idx, key))
然后检查某个字符串是否存在于Trie中
>>> 'he' in automaton True >>> 'HER' in automaton False
然后玩一下 get() 字典样式的方法
>>> automaton.get('he') (0, 'he') >>> automaton.get('she') (3, 'she') >>> automaton.get('cat', 'not exists') 'not exists' >>> automaton.get('dog') Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError
现在将Trie转换为Aho-Corasick自动机,以启用Aho-Corasick搜索
>>> automaton.make_automaton()
然后在输入字符串(我们的草堆)中搜索键(针)的所有实例。
这里我们打印结果,并检查它们是否正确。Automaton.iter()方法返回结果,作为在输入字符串中找到Trie键的结束索引和与此键关联的值的两个元组。这里我们存储了包含原始字符串及其Trie插入顺序的元组作为值
>>> for end_index, (insert_order, original_value) in automaton.iter(haystack): ... start_index = end_index - len(original_value) + 1 ... print((start_index, end_index, (insert_order, original_value))) ... assert haystack[start_index:start_index + len(original_value)] == original_value ... (1, 2, (0, 'he')) (1, 3, (1, 'her')) (1, 4, (2, 'hers')) (4, 6, (3, 'she')) (5, 6, (0, 'he'))
您还可以提前创建一个可能很大的自动机并将其pickle,以在以后重新加载。这里我们只是将其pickle到一个字符串。您通常会将其pickle到一个文件中
>>> import pickle >>> pickled = pickle.dumps(automaton) >>> B = pickle.loads(pickled) >>> B.get('he') (0, 'he')
另请参阅
常见问题解答和谁在使用pyahocorasick? https://github.com/WojciechMula/pyahocorasick/wiki/FAQ#who-is-using-pyahocorasick
文档
包括API概述和参考的完整文档发布在 readthedocs。
概述
使用 Aho-Corasick自动机,您可以在单个遍历输入字符串的过程中高效地搜索多个字符串(针)在输入字符串(草堆)中的所有实例。使用pyahocorasick,您最终可以构建大型自动机并将其pickle,以作为索引结构重复使用,以实现快速多模式字符串匹配。
aho-corasick自动机的优点之一是,典型情况下的最坏情况和最好情况的运行时间大致相同,主要取决于输入字符串的大小,其次取决于返回的匹配数。虽然这可能在所有情况下都不是最快的字符串搜索算法,但它可以同时搜索多个字符串,并且其运行时保证使其相当独特。因为pyahocorasick基于Trie,它只使用内存一次存储冗余键前缀。
缺点是需要在搜索字符串之前先构建和“最终确定”它。在搜索多个预定义“针”的变量“草堆”的几个应用中,这实际上是一个优点。
aho-corasick自动机通常用于入侵检测系统(如snort)、杀毒软件和其他许多需要与预定义字符串键集快速匹配的应用中的快速多模式匹配。
在内部,aho-corasick自动机通常基于Trie,具有额外的失败链接数据和一个Aho-Corasick搜索过程实现。
在幕后,Python库pyahocorasick实现了这两种数据结构:一个Trie和一个Aho-Corasick字符串匹配自动机。两者都通过Automaton类公开。
除了类似Trie的Aho-Corasick方法和数据结构之外,pyahocorasick还实现了类似字典的方法:pyahocorasick的Automaton是一个Trie,是一个类似于字典的结构,以字符串键为索引,每个键都与一个值对象相关联。您可以使用它以与字符串键长度成比例的时间检索关联的值。
pyahocorasick有两种版本
一个基于C的Python扩展,仅与Python 3兼容。使用旧版本1.4.x支持Python 2.7.x和32位。
一个更简单的纯Python模块,兼容Python 2和3。它仅可在源代码库(不在Pypi上)的etc/py目录下使用,并且API略有不同。
Unicode和bytes
Automaton方法接受和返回的字符串类型为unicode或bytes,具体取决于编译时间设置(在setup.py中设置的AHOCORASICK_UNICODE预处理定义)。
Automaton.unicode属性可以告诉你库是如何构建的。在Python 3中,unicode是默认值。
从PyPi构建和安装
要为常见的操作系统安装,请使用pip。预构建的轮子在Pypi上可能最终会可用。
pip install pyahocorasick
要从源代码构建,您需要安装并配置C编译器,这在Linux上是标准的,在MacOSX上也很容易获得。
要从源代码构建,请克隆git存储库或下载并提取源代码归档。
安装pip(及其setuptools伴侣),然后运行(当然是在virtualenv中!)
pip install .
如果编译成功,该模块就准备就绪,可以使用了。
支持
支持通过GitHub问题跟踪器报告错误或提出问题。
贡献
您可以通过GitHub拉取请求提交贡献。
有一个Makefile,具有默认目标,用于构建和运行测试。
测试可以通过pip installe -e .[testing] && pytest -vvs运行。
另请参阅 .github 目录中的 CI 测试和工作流程
许可
此库根据非常自由的 BSD-3-Clause 许可证授权。代码的一些部分是奉献给公共领域的,例如纯 Python 自动机和测试代码。
许可证的全文可在 LICENSE 文件中找到。
您可以考虑的其他 Python Aho-Corasick 实现
虽然 pyahocorasick 努力成为 Python 最优秀和最快的 Aho Corasick 库,但您可以考虑以下其他库
py_aho_corasick by Jan
纯 Python 编写。
性能较差。
ahocorapy by abusix
纯 Python 编写。
比 py-aho-corasick 有更好的性能。
使用 pypy,ahocorapy 的搜索性能仅略低于 pyahocorasick。
执行额外的后缀快捷方式(更多的设置开销,较少的搜索开销用于后缀查找)。
包括用于结果的自动机的可视化工具(使用 pygraphviz)。
MIT 许可证,100% 测试覆盖率,在所有主要 Python 版本(+ pypy)上测试
noaho by Jeff Donner
用 C 编写。不返回重叠匹配。
在 Windows 上无法编译(截至 2016 年 7 月)。
不支持 pickle 协议。
acora by Stefan Behnel
用 Cython 编写。
大型自动机可能需要很长时间才能构建(截至 2016 年 7 月)
不支持将值与字符串键相关联的字典式协议。
ahocorasick by Danny Yoo
用 C 编写。
似乎未维护(最后更新于 2005 年)。
GPL 许可证。
项目详情
pyahocorasick-2.1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4df4845c1149e9fa4aa33f0f0aa35f5a42957a43a3d6e447c9b44e679e2672ea |
|
MD5 | 4c4e820880e359b3cf86bb63a67f00f5 |
|
BLAKE2b-256 | 062e075c667c27ecf2c3ed6bf3c62649625cf1e7de7fd349f63b49b794460b71 |
pyahocorasick-2.1.0-cp312-cp312-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5ebe0d1e15afb782477e3d0aa1dce28ab9dad1200211fb785b9c1cc1208e6f04 |
|
MD5 | 61a4ee99862a327ab577125089a9509e |
|
BLAKE2b-256 | 8f028dceb0a63dbbc7c102eb0bd27504336ecb27164155c35d27a9943f2ce0dd |
pyahocorasick-2.1.0-cp312-cp312-musllinux_1_1_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8337af64c649223cff548c7204dda823e83622d63e5449bc51ae069efb2f240f |
|
MD5 | 3f4cb9495b80217a5d6c15ed20594997 |
|
BLAKE2b-256 | a6b3b486f5aa43a0e00e1bd6387fd3754b175a00f3a8cb5b4009e5433bb564ca |
pyahocorasick-2.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f209796e7d354734781dd883c333596e482c70136fa76a4cb169f383e6c40bca |
|
MD5 | c906085955ee7b5f6b52fe6abbb3a93f |
|
BLAKE2b-256 | 007f1b0e2760d89926f2a4c51f74f21d7681b3543c689818e2de9325f763b8ba |
pyahocorasick-2.1.0-cp312-cp312-macosx_10_9_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6dedb9fed92705b742d6aa3d87abb1ec999f57310ef32b962f65f4e42182fe0a |
|
MD5 | bc5e7fba8515e6e4d24492a5f1afe162 |
|
BLAKE2b-256 | bb8e2d398e29e5db80c7187b0fcd955289381c4cc16cba5115809d655333af16 |
哈希值 用于 pyahocorasick-2.1.0-cp312-cp312-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 82b0d20e82cc282fd29324e8df93809cebbffb345055214ce4b7873698df02c8 |
|
MD5 | c0672ad37a450cdcaabec902789d4dbd |
|
BLAKE2b-256 | b3c1380f6fa3ad55eb66104e9eab608e3bedb84df9f951fb31373238446cd711 |
哈希值 用于 pyahocorasick-2.1.0-cp311-cp311-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d8254d6333df5eb400ed3ec8b24da9e3f5da8e28b94a71392391703a7aac568d |
|
MD5 | 206dc76e169d43ebbf44630befb48eff |
|
BLAKE2b-256 | 3676d83c60ec7a202cbfeffaa9649d0fee6ddcb974622e411b86211ff3572549 |
哈希值 用于 pyahocorasick-2.1.0-cp311-cp311-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a58c44c407a45155dc7a3253274b5fd78ab00b579bd5685059610867cdb37142 |
|
MD5 | a0e05b033b43c59158d7c9813b2c4369 |
|
BLAKE2b-256 | c1dee33f32ceceafdd440c62a454f2d506b1119226d37135aa31940683d422c4 |
哈希值 用于 pyahocorasick-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a9f2728ac77bab807ba65c6ef41be30358ef0c9bb6960c9fe070d43f7024cb91 |
|
MD5 | 864165509244257afb2944873f3ae15c |
|
BLAKE2b-256 | 313217ab57fe5abcf09d2f1ceb502143447be00658761d167118441e19a2b2c6 |
哈希值 用于 pyahocorasick-2.1.0-cp311-cp311-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 658d55e51c7588a5dba57de674241a16a3c94bf57f3bfd70022c4d7defe2b0f4 |
|
MD5 | 7cf708d8ad55df791cabf9b2cc3a1fa5 |
|
BLAKE2b-256 | 96014e4c5e3ff80eeafee2d3f510a71558e1317a13893360dd2c68276bb7514a |
哈希值 用于 pyahocorasick-2.1.0-cp311-cp311-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d6e0da0a8fc78c694778dced537c1bfb8b2f178ec92a82d81539d2e35a15cba0 |
|
MD5 | 755df378e7151c8ead38b8f52671660b |
|
BLAKE2b-256 | f28be6baa0246d3126d509d56f55f8f8be7b9cd914d8f87d1277f25d9af55351 |
哈希值 用于 pyahocorasick-2.1.0-cp310-cp310-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4f8eba88fce34a1d8020638a4a8732c6241a5d85fe12be8669b7495d99d36b6a |
|
MD5 | 1f26be59b8f486750326e1655115ada1 |
|
BLAKE2b-256 | 44667abc274d852af6750bd7165d5fcf88997ffe0178c6c35f9a46f3e3761868 |
哈希值 用于 pyahocorasick-2.1.0-cp310-cp310-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c860ad9cb59e56c31aed8a5d1ee9d83a0151277b09198d027ffce213697716ed |
|
MD5 | 8eebcb632056c67b4c9ff5a9c70f4dfb |
|
BLAKE2b-256 | bf276e74ed6731d14b2b6fce146155997bd14bc6d803f43a7ae5397ac931fc3c |
哈希值 用于 pyahocorasick-2.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 581e3d85043f1797543796f021e8d7d48c18e594529b72d86f70ea78abc88fff |
|
MD5 | 257a69c32441e5806619185f0f5ddc19 |
|
BLAKE2b-256 | 4d2261283c423676443dd2f96cf6b886b26f21db3c869ae73432bf00d128bec0 |
哈希值 用于 pyahocorasick-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1f15529c83b8c6e0548d7d3c5631fefa23fba5190e67be49d6c9e24a6358ff9c |
|
MD5 | f7571371ba597473c6314bc4f45f4bf3 |
|
BLAKE2b-256 | a7d088de0e86c552889740f618133e129044ab42a53b6c6301f2fc18db679fbd |
哈希值 用于 pyahocorasick-2.1.0-cp310-cp310-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8c46288044c4f71392efb4f5da0cb8abd160787a8b027afc85079e9c3d7551eb |
|
MD5 | 13253057ad873fae23de119f20db7063 |
|
BLAKE2b-256 | 9daf2fb0293772fa3d216d50d5ed022918fd875b35beb17b1f0646b5054a04aa |
哈希值 用于 pyahocorasick-2.1.0-cp39-cp39-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f44f96496aa773fc5bf302ddf968dd6b920fab34522f944392af8bde13cbe805 |
|
MD5 | a7db29c8c92c4dc4aaa35f441b1acf91 |
|
BLAKE2b-256 | 5d51905fb878cf5064391da4cfaadda72afebb3cff0b56a2b008513083b60e17 |
哈希值 for pyahocorasick-2.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bf4a4b19ac37e9a7087646b8bcc306acd7a91649355d59b866b756068e35d018 |
|
MD5 | 7184ea37c744f418c0a933c736196cd7 |
|
BLAKE2b-256 | 9c79c99c553a75e5c15becb5301d68cead6a927b20b191ee26b8e45447d75d87 |
哈希值 for pyahocorasick-2.1.0-cp39-cp39-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 895ab1ff5384ee5325c74cbacafc419e534f1f110b9fb3c544cc56832ecce082 |
|
MD5 | 2ce97dcffd78d0502ac4513d5a538884 |
|
BLAKE2b-256 | 3efb5968cdd9b256d10147013cfd06678abf4c0d4fea0bcfade787c7d48216c5 |
哈希值 for pyahocorasick-2.1.0-cp39-cp39-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 36491675a13fe4181a6b3bccfc9032a1a5d03bd3b0a151c06f8865c16ba44b42 |
|
MD5 | c5b81dc4263c8f5367cfff92ab5aaa16 |
|
BLAKE2b-256 | 1b71b91cdf790051c1d2f029216b3b03939a59612feeb0cbef885631c841e047 |
哈希值 for pyahocorasick-2.1.0-cp38-cp38-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 23b183600e2087f16f6c5e6185d61525ad74335f2a5b693dd6d66bba2f6a4b05 |
|
MD5 | 3012e0dfe6fe8d9a056e6c87381b7c11 |
|
BLAKE2b-256 | 699aa5f60ec1a412cad010c66a849f111fb236eb4084160d4234e11f76956441 |
哈希值 for pyahocorasick-2.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8e92150849a3c13da37e37ca6374fa55960fd5c845029eca02d9b5846b26fe48 |
|
MD5 | b824c795f7f8e2a9c0689de32bdfc322 |
|
BLAKE2b-256 | 380e9feb94becb2dc62e081ad8c6850199c23329775043896cdbcf15b9d3787d |
哈希值 for pyahocorasick-2.1.0-cp38-cp38-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3795ac922d21fbfea40a6b3a330762e8b38ce8ba511b1eb15bf9eeb9303b2662 |
|
MD5 | ff79332da5548ffc329f1b3bfcad050a |
|
BLAKE2b-256 | c8512bd342ab7bdc9bf72171920968ab1da77b115bfa49bd33b6007ab7fbb458 |
哈希值 for pyahocorasick-2.1.0-cp38-cp38-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7454ba5fa528958ca9a1bc3143f8e980bd7817ea481f46495e6ffa89675ab93b |
|
MD5 | a65540d962a2639b553029b0a8a6fc0b |
|
BLAKE2b-256 | 3afa56f4d5121b2d8e491a7c1a063d235b76c933c690cf67ed00743e109fc106 |