pyahocorasick是一个快速且内存效率高的库,用于精确或近似多模式字符串搜索,这意味着您可以在某些输入文本中一次找到多个关键字符串出现。
字符串“索引”可以提前构建并保存到磁盘以便稍后重新发送。
pyahocorasick是用 C 语言实现的,并在 Python 3.6 及更高版本上进行了测试。它适用于 Linux、maOS 和 Windows。
该模块是用 C 编写的。您需要安装 C 编译器来编译本机 CPython 扩展。
pip install pyahocorasick
然后创建一个自动机:
>>> import ahocorasick >>> A = ahocorasick.Automaton()
该项模块可以用作trie,或ac自动机。
您可以将 Automaton 类用作 trie。
将一些字符串键及其关联值添加到此 trie。在这里,我们将(插入索引,原始字符串)的元组作为值关联到我们添加到 trie 的每个键字符串:
>>> for idx, key in enumerate('he her hers she'.split()): ... A.add_word(key, (idx, key))
检查 trie 中是否存在某些字符串:
>>> 'he' in A True >>> 'HER' in A False
A.make_automaton()
make_automaton()
完成并创建 Aho-Corasick 自动机。
iter(string, [start, [end]])
使用提供的输入执行 Aho-Corasick 搜索过程string。为在字符串中找到的键返回元组 (end_index, value) 的迭代器。
iter_long(string, [start, [end]])
返回搜索最长、非重叠匹配的迭代器(AutomatonSearchIterLong 类的对象)。
#ac自动机 import ahocorasick as ah aca= ah.Automaton() with open('userdict.txt','r',encoding='utf-8')as f2: #加载文件 keywords = [a.strip() for a in f2.readlines()] #加载关键词 #利用 add_word方法 将关键词加入自动机! # 该方法必须包含2个参数,第一个参数是检索词,第二个参数可以任意。 # 此处第二个参数为tuple,作为检索后的返回值,类似(39, '工程总承包') 。第40个词,词为工程总承包。可以自定义。 for x in range(len(keywords)): aca.add_word(keywords[x],(x,keywords[x])) # 创建 Aho-Corasick 自动机 aca.make_automaton() with open('jianjie.txt','r',encoding='utf-8')as f: #打开要检索文档 jianjie=f.read() #读取正文(如果太多,可以分断加载,分段检索) # 开始查找 # 该方法 匹配最长的字符串 for item in aca.iter_long(jianjie): print(item) print('-'*20) # 开始查找 # 该方法 匹配所有字符串 for item in aca.iter(jianjie): print(item)
运行结果
(110, (39, '工程总承包')) (285, (313, '印刷用CTP板基')) -------------------- (110, (39, '工程总承包')) (283, (315, 'CTP')) (285, (313, '印刷用CTP板基'))
https://pyahocorasick.readthedocs.io/en/latest/#aho-corasick-methods