字串搜尋演算法,用於在輸入的一串字串中匹配有限組"字典"中的子串。它與普通字串匹配的不同點在於同時與所有字典串進行匹配。演算法均攤情況下具有近似於線性的時間複雜度,約為字串的長度加所有匹配的數量
kmp演算法核心為部分匹配表,記錄字串中的字首集合與字尾集合的交集中最長元素的長度。根據部分匹配表,可避免重複檢查先前匹配的元素。
trie,又稱字首樹或字典樹,是一種有序樹,用於儲存關聯陣列,其中的鍵通常是字串。乙個節點的所有子孫都有相同的字首,也就是這個節點對應的字串,而根節點對應空字串。一般情況下,不是所有的節點都有對應的值,只有葉子節點和部分內部節點所對應的鍵才有相關的值。
依靠構造乙個有限狀態機(類似於在乙個trie樹中新增失配指標)來實現。這些額外的失配指標允許在查詢字串失敗時進行回退(例如設trie樹的單詞cat匹配失敗,但是在trie樹中存在另乙個單詞cart,失配指標就會指向字首ca),轉向某字首的其他分支,免於重複匹配字首,提高演算法效率。
import ahocorasick as ah
a = ah.automaton(
)words =
['口服'
,'注射'
,'皮下注射'
,'腹腔注射'
,'靜脈'
,'靜脈注射'
,'靜滴'
,'csii'
]for idx , key in
enumerate
(words)
: a.add_word(key,
(idx,key)
)a.make_automaton(
)haystack =
'胰島素強化**方案包括基礎-餐食胰島素**方案[多次皮下注射胰島素或持續皮下胰島素輸注(csii)]或預混胰島素每天注射'
for end_index ,
(insert_order,original_value)
in a.
iter
(haystack)
: start_index = end_index -
len(original_value)+1
print
(start_index,end_index+
1,original_value)
assert haystack[start_index:start_index+
len(original_value)
]== original_value
原理:nfa自動機(non deterministic finite automaton 不確定型有窮自動機)。nfa是以正規表示式為基準去匹配的,發現不匹配了。此時就會發生回溯
正則裡面nfa引擎實際上就是在語法解析的時候,構造出的乙個有向圖,然後通過深度的方式,去一條路徑一條路徑的遞迴嘗試。
優點 功能強大,可以拿到匹配的上下文資訊,支援各種斷言捕獲組環視之類的功能
缺點 對開發正則功底要求較高,需要注意回溯造成的效能問題
學習觀(二) 人工智慧入門理解
前提 背景知識 本圖是所有ml和dl的切入口 黑盒應該指代t,而通過對e和f的處理 構造新的評價函式 特徵工程等 來優化這個 p 人類天生的四種能力 但在學校考試卻僅僅強化了記憶與分析兩方面的能力,大大弱化了聯想和創新的能力。而聯想能力的高低會對記憶和分析能力訓練的成本有強反饋作用,有的人舉一反三,...
1 2人工智慧與機器學習
機器學習是一門交叉學科 模式識別,機器學習也是模式學習,只是換了個說法,機器學習把各種各樣的場景當成各種模式,把模式識別出來,相當於總結模式的規律 資料探勘,很多時候是和資料庫的知識,然後加上核心的演算法,就可以做資料探勘方面的事情了。拿到資料就會對資料進行清洗 etl 再加上一些機器學習演算法,就...
01 人工智慧與機器學習概念介紹
人工智慧 流水線機器其實就是人工智慧。機器學習包含深度學習 可以理解為高階的機器學習 例如 圖形影象識別 自然語言處理。機器學習是一門多學科交叉專業,涵蓋概率論知識,統計學知識,近似理論知識和複雜演算法知識,使用計算機作為工具並致力於真實實時的模擬人類學習方式,並將現有內容進行知識結構劃分來有效提高...