Python 多模式字符串搜索 Aho-Corasick詳解
ahocorasick.Automaton 是 Python 中 pyahocorasick 庫(kù)提供的一個(gè)類,用于實(shí)現(xiàn) Aho-Corasick 自動(dòng)機(jī)。Aho-Corasick 算法是一種用于精確或近似多模式字符串搜索的高效算法。
通過(guò)
pip install pyahocorasick安裝pyahocorasick庫(kù)。
并且,該模塊是用 C 編寫(xiě)的,安裝時(shí)需要有 C 編譯器來(lái)編譯本機(jī) Cpython 擴(kuò)展。
使用 ahocorasick.Automaton 類的一般步驟如下:
- 導(dǎo)入
ahocorasick庫(kù):import ahocorasick。 - 創(chuàng)建
Automaton對(duì)象:a = ahocorasick.Automaton()。 - (可選)將字符串鍵及其關(guān)聯(lián)值添加到自動(dòng)機(jī),可作為 trie 樹(shù)使用。例如:
for idx, key in enumerate('heherhersshe'.split()):
a.add_word(key, (idx, key))調(diào)用 make_automaton() 方法完成并創(chuàng)建 Aho-Corasick 自動(dòng)機(jī):a.make_automaton() 。
創(chuàng)建好自動(dòng)機(jī)后,可以使用以下主要方法進(jìn)行搜索操作:
iter(string, (start, (end))):使用提供的輸入字符串執(zhí)行 Aho-Corasick 搜索過(guò)程。它返回一個(gè)迭代器,為在字符串中找到的鍵返回元組(end_index, value),其中end_index是匹配結(jié)束的索引位置,value是與匹配的鍵相關(guān)聯(lián)的值。iter_long(string, (start, (end))):返回一個(gè)搜索最長(zhǎng)、非重疊匹配的迭代器(automaton_search_iter_long類的對(duì)象)。
以下是一個(gè)使用 ahocorasick.Automaton 進(jìn)行多模式字符串搜索的示例代碼:
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)鍵詞加入自動(dòng)機(jī)!
for x in range(len(keywords)):
a.add_word(keywords[x], (x, keywords[x])) # 第二個(gè)參數(shù)為自定義的返回值
# 創(chuàng)建 aho-corasick 自動(dòng)機(jī)
a.make_automaton()
with open('jianjie.txt', 'r', encoding='utf-8') as f: # 打開(kāi)要檢索文檔
jianjie = f.read() # 讀取正文(如果太多,可以分?jǐn)嗉虞d,分段檢索)
# 開(kāi)始查找,該方法匹配最長(zhǎng)的字符串
for item in a.iter_long(jianjie):
print(item)
print('-' * 20)
# 開(kāi)始查找,該方法匹配所有字符串
for item in a.iter(jianjie):
print(item)在上述示例中,首先創(chuàng)建了一個(gè)自動(dòng)機(jī)對(duì)象 a,然后從文件中讀取關(guān)鍵詞,并使用 add_word 方法將關(guān)鍵詞添加到自動(dòng)機(jī)中。接著調(diào)用 make_automaton 方法創(chuàng)建 Aho-Corasick 自動(dòng)機(jī)。最后,通過(guò)打開(kāi)另一個(gè)文件讀取要搜索的正文,并使用 iter_long 和 iter 方法進(jìn)行匹配查找,并打印出匹配的結(jié)果。
Aho-Corasick 自動(dòng)機(jī)的優(yōu)點(diǎn)包括能夠在一次運(yùn)行中找到給定集合所有字符串,適用于多模式字符串匹配的場(chǎng)景,例如網(wǎng)絡(luò)內(nèi)容過(guò)濾、版權(quán)檢測(cè)、病毒掃描等,在自然語(yǔ)言處理中查找特定詞匯或模式,以及生物信息學(xué)中在 DNA 或蛋白質(zhì)序列分析中尋找特定的序列模式等方面都有應(yīng)用。
到此這篇關(guān)于Python 多模式字符串搜索 Aho-Corasick詳解的文章就介紹到這了,更多相關(guān)Python 多模式字符串搜索內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python安裝Numpy和matplotlib的方法(推薦)
下面小編就為大家?guī)?lái)一篇Python安裝Numpy和matplotlib的方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
pandas 對(duì)series和dataframe進(jìn)行排序的實(shí)例
今天小編就為大家分享一篇pandas 對(duì)series和dataframe進(jìn)行排序的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
基于OpenCv實(shí)現(xiàn)的人臉識(shí)別(附Python完整代碼)
人臉識(shí)別是基于人的臉部特征信息進(jìn)行身份識(shí)別的一種生物識(shí)別技術(shù),下面這篇文章主要給大家介紹了關(guān)于如何基于OpenCv實(shí)現(xiàn)的人臉識(shí)別,文中還附Python完整代碼,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
python中查找excel某一列的重復(fù)數(shù)據(jù) 剔除之后打印
python查找excel某一列的重復(fù)數(shù)據(jù),剔除之后打印,供大家學(xué)習(xí)參考2013-02-02
Python TensorFlow介紹與實(shí)戰(zhàn)
這篇文章介紹了Python TensorFlow介紹與實(shí)戰(zhàn),通過(guò)本文的介紹,我們不僅了解了TensorFlow的基本概念和安裝方法,還通過(guò)線性回歸和卷積神經(jīng)網(wǎng)絡(luò)的實(shí)例,深入探討了 TensorFlow 的使用技巧,TensorFlow 的強(qiáng)大功能和靈活性使其成為深度學(xué)習(xí)領(lǐng)域的重要工具,需要的朋友可以參考下2024-07-07
python讀取excel數(shù)據(jù)的詳細(xì)教學(xué)
在Python中讀取Excel數(shù)據(jù)是一個(gè)常見(jiàn)的數(shù)據(jù)處理任務(wù),本文主要為大家詳細(xì)介紹了如何使用Python讀取Excel數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2026-01-01
使用Django和Flask獲取訪問(wèn)來(lái)源referrer
這篇文章主要介紹了使用Django和Flask獲取訪問(wèn)來(lái)源referrer,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04

