python第三方庫AC自動機pyahocorasick的使用
pyahocorasick是一個快速且內(nèi)存效率高的庫,用于精確或近似多模式字符串搜索,這意味著您可以在某些輸入文本中一次找到多個關(guān)鍵字符串出現(xiàn)。
字符串“索引”可以提前構(gòu)建并保存到磁盤以便稍后重新發(fā)送。
pyahocorasick是用 C 語言實現(xiàn)的,并在 Python 3.6 及更高版本上進行了測試。它適用于 Linux、maOS 和 Windows。
該模塊是用 C 編寫的。您需要安裝 C 編譯器來編譯本機 CPython 擴展。
安裝:
pip install pyahocorasick
然后創(chuàng)建一個自動機:
>>> import ahocorasick
>>> A = ahocorasick.Automaton()
該項模塊可以用作trie,或ac自動機。
1、做為trie樹的用法:
您可以將 Automaton 類用作 trie。
將一些字符串鍵及其關(guān)聯(lián)值添加到此 trie。在這里,我們將(插入索引,原始字符串)的元組作為值關(guān)聯(lián)到我們添加到 trie 的每個鍵字符串:
1.1 構(gòu)建trie樹
>>> for idx, key in enumerate('he her hers she'.split()):
... A.add_word(key, (idx, key))
1.2 trie樹查詢
檢查 trie 中是否存在某些字符串:
>>> 'he' in A
True
>>> 'HER' in A
False
2、下面主要介紹ac自動機的用法
創(chuàng)建自動機
A.make_automaton()
2.1 Automaton 類具有以下主要的 Aho-Corasick 方法:
-
make_automaton()
完成并創(chuàng)建 Aho-Corasick 自動機。 -
iter(string, [start, [end]])
使用提供的輸入執(zhí)行 Aho-Corasick 搜索過程string。為在字符串中找到的鍵返回元組 (end_index, value) 的迭代器。 -
iter_long(string, [start, [end]])
返回搜索最長、非重疊匹配的迭代器(AutomatonSearchIterLong 類的對象)。
2.2 直接看代碼
#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()] #加載關(guān)鍵詞
#利用 add_word方法 將關(guān)鍵詞加入自動機!
# 該方法必須包含2個參數(shù),第一個參數(shù)是檢索詞,第二個參數(shù)可以任意。
# 此處第二個參數(shù)為tuple,作為檢索后的返回值,類似(39, '工程總承包') 。第40個詞,詞為工程總承包。可以自定義。
for x in range(len(keywords)):
aca.add_word(keywords[x],(x,keywords[x]))
# 創(chuàng)建 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)
運行結(jié)果
(110, (39, '工程總承包'))
(285, (313, '印刷用CTP板基'))
--------------------
(110, (39, '工程總承包'))
(283, (315, 'CTP'))
(285, (313, '印刷用CTP板基'))
3、官網(wǎng)地址
https://pyahocorasick.readthedocs.io/en/latest/#aho-corasick-methods
浙公網(wǎng)安備 33010602011771號