精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

探索AC自動機:多關鍵詞搜索的原理與應用案例

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-08-26 15:55 ? 次閱讀

引言

目前,大多數自由文本搜索技術采用類似于Lucene的策略,通過解析搜索文本為各個組成部分來定位關鍵詞。這種方法在處理少量關鍵詞時表現良好。但當搜索的關鍵詞數量達到10萬個或更多時,這種方法的效率會顯著下降,尤其是在需要與詞典進行詳盡對比的場景中。本文將介紹的Aho-Corasick(AC)自動機作為多模式匹配中的經典算法,不僅能夠處理大規模文本數據,還能確保搜索過程的實時性和準確性。

AC自動機:文本搜索的革命性工具

AC自動機可以被形象地比喻為一個超級找詞機器。想象你手頭有一本內容繁多的書籍和一份包含多個詞語的列表,你的任務是快速找出所有這些詞語在書中出現的位置。如果采用傳統方法,即逐個詞進行查找,工作量將會非常巨大。而AC自動機通過構建一種特殊的樹狀結構——前綴樹或Trie,來極大地提升搜索效率。

AC自動機構建與搜索機制

構建前綴樹(Trie)

AC自動機首先會根據所有關鍵詞構建一個前綴樹。這種樹狀結構的每個節點代表一個字母,并且每個字母都指向下一個可能的字母,從而形成一個連續的路徑,表示一個或多個關鍵詞的前綴

wKgZombMNQGAe6CtAAJdkzdNHVM646.png

圖片來源網絡

失配指針(Fail指針)

在搜索過程中,如果當前路徑上無法找到匹配的關鍵詞,AC自動機會利用失配指針進行快速回溯。這些指針預先設置在樹的每個節點上,指向其他可能的匹配路徑,從而避免了從頭開始搜索的低效性

wKgaombMNQKAf17aAANaRPEVx0o347.png

圖片來源網絡

實時搜索與高效報告

AC自動機在讀取文本的同時,能夠快速地遍歷前綴樹結構。一旦發現關鍵詞出現在文本中,它能夠立即報告這個詞及其出現的位置。這種能力使得AC自動機能夠一次性高效完成大量關鍵詞的搜索任務

wKgZombMNQKAB0zbAAO7POsBhxw862.png

圖片來源網絡

算法核心組件與復雜度

核心組件:

?goto(轉跳):每個遇到的字符都會被提交給goto結構中的狀態對象,以確定新的當前狀態

?fail(失敗轉移):如果沒有找到匹配狀態,算法會觸發fail并回溯至深度更淺的狀態,從那里繼續搜索

?output(輸出):每當達到與整個關鍵詞相匹配的狀態時,該狀態會被發送到輸出集合中,完成掃描后即可讀取這些匹配項

時間復雜度:

Aho-Corasick算法的時間復雜度為O(n),其中n是文本的長度。這意味著無論提供多少關鍵詞,搜索的性能都將呈線性下降,與關鍵詞的數量無關。

AC自動機的應用

AC自動機在多種場景下都能發揮重要作用,包括:

?在文本中查找并鏈接或突出顯示關鍵詞,提高信息的可檢索性

?為純文本添加語義,使文本內容更加豐富和有層次

?檢查文本中的語法錯誤,通過與詞典的對比來識別和糾正錯誤

應用案例:使用Aho-Corasick算法來識別和高亮HTML文本中的關鍵詞

Java程序將演示如何使用Aho-Corasick自動機庫來搜索和高亮HTML文本中的關鍵詞。程序首先構建一個自動狀態機,該狀態機被訓練識別一系列中文關鍵詞。然后,程序將處理HTML文檔,查找這些關鍵詞的出現,并用標簽將它們包裹起來,以實現加粗顯示的效果。

第一步:Maven依賴配置,引入Aho-Corasick自動機庫


    org.ahocorasick
    ahocorasick
    0.6.3

第二步:代碼實現

public class HighlightKeywordsInHtml {

   public static void main(String[] args) {
        // 定義HTML內容的字符串,包含了南京大學的介紹
        String htmlContent = createHtmlContentForNanjingUniversity();
        // 創建Aho-Corasick Trie的構建器實例
        Trie trie = buildAhoCorasickTrie();
        // 使用Trie實例處理HTML文本,獲取匹配的Token集合
        Collection tokens = trie.tokenize(htmlContent);
        // 使用StringBuilder構建最終的HTML字符串,用于輸出高亮的關鍵詞
        StringBuilder html = new StringBuilder();
        html.append("
"); // 遍歷Token集合 for (Token token : tokens) { // 如果Token匹配關鍵詞,則添加標簽以實現加粗效果 if (token.isMatch()) { html.append(""); } // 添加Token對應的文本片段 html.append(token.getFragment()); // 如果Token匹配關鍵詞,結束標簽 if (token.isMatch()) { html.append(""); } } // 完成HTML字符串的構建 html.append(""); // 打印最終的HTML字符串,其中包含高亮顯示的關鍵詞 System.out.println(html); } private static String createHtmlContentForNanjingUniversity() { // 此處添加創建南京大學HTML內容的方法實現 String speech = """ 南京大學簡介 body { font-family: "微軟雅黑", "宋體", Arial, sans-serif; line-height: 1.6; color: #333; } .university-intro { text-align: justify; margin-bottom: 2em; padding: 1rem; background-color: #f5f5f5; border-radius: 5px; } 南京大學:百年名校,學術卓越 南京大學,簡稱“南大”,位于中國江蘇省南京市,是中國最頂尖的高等學府之一,擁有百年的辦學歷史和深厚的文化底蘊。作為中國教育部直屬的全國重點大學,南大以其卓越的學術成就和教育質量聞名于世。 南京大學以其強大的師資力量和學術研究而著稱,提供多元化的學科教育,包括自然科學、人文社會科學、工程技術等多個領域。學校注重培養學生的創新能力和國際視野,為國家和社會培養了大量杰出人才。 南大校園環境優美,歷史與現代交融,是學術研究和知識探索的理想場所。學校在計算機科學、地球科學、化學等學科領域具有國際領先水平,并在推動科學技術進步和文化傳承方面發揮著重要作用。 """; return speech; } private static Trie buildAhoCorasickTrie() { return Trie.builder() .ignoreOverlaps() // 設置不捕獲重疊的關鍵詞 .onlyWholeWords() // 僅匹配完整的單詞 .ignoreCase() // 忽略關鍵詞的大小寫 .addKeywords(Arrays.asList("南京大學", "南大", "地球科學")) .build(); // 構建Trie實例 } }

第三步:運行程序,符合預期

南京大學簡介 body { font-family: "微軟雅黑", "宋體", Arial, sans-serif; line-height: 1.6; color: #333; } .university-intro { text-align: justify; margin-bottom: 2em; padding: 1rem; background-color: #f5f5f5; border-radius: 5px; } 南京大學:百年名校,學術卓越 南京大學,簡稱“南大”,位于中國江蘇省南京市,是中國最頂尖的高等學府之一,擁有百年的辦學歷史和深厚的文化底蘊。作為中國教育部直屬的全國重點大學,南大以其卓越的學術成就和教育質量聞名于世。 南京大學以其強大的師資力量和學術研究而著稱,提供多元化的學科教育,包括自然科學、人文社會科學、工程技術等多個領域。學校注重培養學生的創新能力和國際視野,為國家和社會培養了大量杰出人才。 南大校園環境優美,歷史與現代交融,是學術研究和知識探索的理想場所。學校在計算機科學、地球科學、化學等學科領域具有國際領先水平,并在推動科學技術進步和文化傳承方面發揮著重要作用。

本文對Aho-Corasick(AC)自動機算法進行了拋磚引玉,揭示了其在處理大規模文本數據方面的卓越性能和應用潛力。若你渴望深入挖掘AC算法的精髓,進一步探索其高級應用和實現細節,建議參考以下的參考資料進行進一步的學習與挖掘。

參考資料

1. http://cr.yp.to/bib/1975/aho.pdf?

2. https://github.com/robert-bor/aho-corasick

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4552

    瀏覽量

    92021
  • 自動機
    +關注

    關注

    1

    文章

    28

    瀏覽量

    9246
收藏 人收藏

    評論

    相關推薦

    [討論]提高網站關鍵詞排名的28個SEO小技巧

    提高網站關鍵詞排名的28個SEO小技巧關鍵詞位置、密度、處理 URL中出現關鍵詞(英文) 網頁標題中出現關鍵詞(1-3個) 關鍵詞標簽中出現
    發表于 12-01 17:08

    亞馬遜代運營 amazon Search term 關鍵詞填寫的“神技”

    恰好包含這些單詞,那么就可以自動匹配出這個關鍵詞,這樣你產品的搜索排名就不會差到哪里去,但如果缺少其中一個單詞,那么搜索排名就有很大變化了。結論就是:不要只是將短語式的
    發表于 06-05 15:41

    HanLP關鍵詞提取算法分析詳解

    l 參考論文:《TextRank: Bringing Order into Texts》l TextRank算法提取關鍵詞的Java實現l TextRank算法自動摘要的Java實現這篇文章中作者
    發表于 11-05 10:41

    關鍵詞優化有哪些實用的方法

    我們在做關鍵詞優化排名的時候,有經驗的seo人員都會有自己的一套關于關鍵詞應該怎么去優化排名的方法,但是對于一些剛接觸seo的新手來說就會比較迷茫,不知道應該怎么去做好關鍵詞的排名,大部分新手都主要
    發表于 08-11 01:19

    #2023,你的 FPGA 年度關鍵詞是什么? #

    FPGA 年度關鍵詞,我的想法是“標準化”;今年的工作中遇到了不少同事的issues,本身都是小問題或者很細節的東西但是卻反復出現問題,目前想到的最好的辦法是做好設計規則的標準化才能避免,不知道大家有沒有更好的建議?
    發表于 12-06 20:31

    2010年10大流行搜索關鍵詞 Facebook居首

    2010年10大流行搜索關鍵詞 Facebook居首 據國外媒體報道,調研公司Hitwise數據顯示,2009年Facebook超越Myspace成為最流行的搜索
    發表于 02-25 10:39 ?895次閱讀

    [自動機自動線].李紹炎.掃描版

    本書結合目前國內自動機械行業的現狀,從應用的角度系統介紹了自動機械的模塊化結構及工作原理、設計選型方法、裝配調試及維護要領等。主要內容包括:自動機械的結構組成、輸
    發表于 09-17 16:02 ?0次下載

    自動機械設計

    自動機械設計》以自動機械的四大結構組成部分為主要內容展開,深入闡述了自動機械設計中普遍性的理論問題。在例舉實例中側重現代農業自動機械,力求做到理論聯系實際,突出專業特色和現代科學技術
    發表于 08-02 08:54 ?0次下載

    基于盲GDH簽名的無記憶模糊關鍵詞搜索

    在云計算中,用戶在計算過程中的數據安全問題已經成為制約云計算發展的一個瓶頸。本文針對云計算中的加密搜索問題,提出一個有效的加密搜索方案。在搜索過程中,為保證用戶的數據安全,用戶需要隱藏搜索
    發表于 12-14 14:14 ?0次下載

    基于自動關鍵詞抽取方法

    自動關鍵詞抽取是從文本或文本集合中自動抽取主題性或重要性的或短語,是文本檢索、文本摘要等許多文本挖掘任務的基礎性和必要性的工作.探討了關鍵詞
    發表于 12-26 16:47 ?2次下載
    基于<b class='flag-5'>自動</b><b class='flag-5'>關鍵詞</b>抽取方法

    對加密電子醫療記錄的關鍵詞搜索

    被稱為MCKS I的簡單的多域連接關鍵詞搜索(MCKS)方案,該方案僅支持連接相等查詢,為了實現更加靈活而復雜的多域關鍵詞連接查詢,例如子集查詢和范圍查詢,又提出了被稱為MCKS II的提高方案.該方案利用了分層屬性的矢量表示
    發表于 01-14 10:42 ?0次下載

    基于統計的AC自動機空間優化

    針對高級Aho-Corasick (AC自動機為提高串匹配速度而造成的空間浪費問題,研究發現數據流對自動機節點的訪問規律,據此提出基于數據訪問特征的混合自動機構建算法HybridFA
    發表于 03-13 16:47 ?0次下載
    基于統計的<b class='flag-5'>AC</b><b class='flag-5'>自動機</b>空間優化

    一種改變標準的谷歌關鍵詞搜索的新方式

    昨天,谷歌發布“Talk to Books”(撩書??)和一個名為Semantris的游戲。這兩項都是基于自然語言文本理解,用戶能夠憑語義而非關鍵詞來實現搜索功能。
    的頭像 發表于 04-17 11:28 ?6728次閱讀
    一種改變標準的谷歌<b class='flag-5'>關鍵詞</b><b class='flag-5'>搜索</b>的新方式

    自動機終結字查找算法實現優化綜述

    自動機的秩與工業自動化中的部件定向器設計問題和理論計算機科學中的 Cerny-pin猜想密切相關。計算自動機的秩可以歸結于查找自動機的終結字。 Rystsoⅴ于1992年提出了一個時間
    發表于 04-28 15:49 ?3次下載
    <b class='flag-5'>自動機</b>終結字查找算法實現優化綜述

    ADI年度關鍵詞曝光,這些你肯定搜索過!

    大數據時代,每個人的搜索框在某種程度上都代表著這個人的所思所想。如果將時間放長,樣本量放大,那么 一份年度搜索關鍵詞就會呈現出了這個世界上絕大部分人是如何走過這一年的 搜索產品型號與
    的頭像 發表于 12-30 00:05 ?760次閱讀