Python 多模式字符串搜索 Aho-Corasick詳解
ahocorasick.Automaton
是 Python 中 pyahocorasick
庫提供的一個類,用于實現(xiàn) Aho-Corasick 自動機。Aho-Corasick 算法是一種用于精確或近似多模式字符串搜索的高效算法。
通過
pip install pyahocorasick
安裝pyahocorasick
庫。
并且,該模塊是用 C 編寫的,安裝時需要有 C 編譯器來編譯本機 Cpython 擴展。
使用 ahocorasick.Automaton
類的一般步驟如下:
- 導(dǎo)入
ahocorasick
庫:import ahocorasick
。 - 創(chuàng)建
Automaton
對象:a = ahocorasick.Automaton()
。 - (可選)將字符串鍵及其關(guān)聯(lián)值添加到自動機,可作為 trie 樹使用。例如:
for idx, key in enumerate('heherhersshe'.split()): a.add_word(key, (idx, key))
調(diào)用 make_automaton()
方法完成并創(chuàng)建 Aho-Corasick 自動機:a.make_automaton()
。
創(chuàng)建好自動機后,可以使用以下主要方法進行搜索操作:
iter(string, (start, (end)))
:使用提供的輸入字符串執(zhí)行 Aho-Corasick 搜索過程。它返回一個迭代器,為在字符串中找到的鍵返回元組(end_index, value)
,其中end_index
是匹配結(jié)束的索引位置,value
是與匹配的鍵相關(guān)聯(lián)的值。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()) # 加載關(guān)鍵詞 # 利用 add_word 方法將關(guān)鍵詞加入自動機! for x in range(len(keywords)): a.add_word(keywords[x], (x, keywords[x])) # 第二個參數(shù)為自定義的返回值 # 創(chuàng)建 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)
在上述示例中,首先創(chuàng)建了一個自動機對象 a
,然后從文件中讀取關(guān)鍵詞,并使用 add_word
方法將關(guān)鍵詞添加到自動機中。接著調(diào)用 make_automaton
方法創(chuàng)建 Aho-Corasick 自動機。最后,通過打開另一個文件讀取要搜索的正文,并使用 iter_long
和 iter
方法進行匹配查找,并打印出匹配的結(jié)果。
Aho-Corasick 自動機的優(yōu)點包括能夠在一次運行中找到給定集合所有字符串,適用于多模式字符串匹配的場景,例如網(wǎng)絡(luò)內(nèi)容過濾、版權(quán)檢測、病毒掃描等,在自然語言處理中查找特定詞匯或模式,以及生物信息學(xué)中在 DNA 或蛋白質(zhì)序列分析中尋找特定的序列模式等方面都有應(yīng)用。
到此這篇關(guān)于Python 多模式字符串搜索 Aho-Corasick詳解的文章就介紹到這了,更多相關(guān)Python 多模式字符串搜索內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 協(xié)程中的迭代器,生成器原理及應(yīng)用實例詳解
這篇文章主要介紹了python 協(xié)程中的迭代器,生成器原理及應(yīng)用,結(jié)合具體實例形式詳細分析了Python協(xié)程中的迭代器,生成器概念、原理及應(yīng)用操作技巧,需要的朋友可以參考下2019-10-10Python實現(xiàn)執(zhí)行Shell命令并獲取輸出
這篇文章主要介紹了如何借助?os.system()?從?Python?腳本執(zhí)行?cmd?命令,以及如何借助?Python?中的?subprocess?模塊以更簡單的方式從腳本執(zhí)行?cmd?命令,感興趣的小伙伴可以了解下2023-10-10python將天數(shù)轉(zhuǎn)換為日期字符串的方法實例
這篇文章主要給大家介紹了關(guān)于python將天數(shù)轉(zhuǎn)換為日期字符串的相關(guān)資料,以及將將字符串的時間轉(zhuǎn)換為時間戳的實例代碼,需要的朋友可以參考下2022-01-01python itchat給指定聯(lián)系人發(fā)消息的方法
這篇文章主要介紹了python itchat給指定聯(lián)系人發(fā)消息的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Python:二維列表下標互換方式(矩陣轉(zhuǎn)置)
今天小編就為大家分享一篇Python:二維列表下標互換方式(矩陣轉(zhuǎn)置),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12python中的try except與R語言中的tryCatch異常解決
這篇文章主要為大家介紹了python中的try except與R語言中的tryCatch異常解決的方式及分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11TFRecord格式存儲數(shù)據(jù)與隊列讀取實例
今天小編就為大家分享一篇TFRecord格式存儲數(shù)據(jù)與隊列讀取實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01