Mensa是Java的模式匹配開源庫
dell-oss/Mensa · GitHub
Mensa能一次性快速有效處理源文字,無論你想在其中搜尋一個關鍵詞或一百萬個關鍵詞。
Mensa不侷限於匹配文字資料,只要是任意長符號序列,這些符號的資料型別可以是任意的,字元 byte number 音符等等。
標準的Java JDK內建了字元匹配搜尋功能,包括字串搜尋和正規表示式。大部分情況確實很好,但是在下面問題場景就需要重新考慮:
1.標準庫只適合操作記憶體中字元,它們不適合搜尋非常大的文字,這些文字無法放入整個記憶體中。
2.內建的正規表示式可以識別詞邊界,但是比簡單字串匹配需要更多時間,而不考慮詞邊界,"boy"將會匹配"30-day boycott,"顯然這不是你想要的。(banq注:其實正規表示式很慢)
3.標準庫不能很好地發現大量的關鍵詞,你只能選擇:要麼為每個關鍵詞執行一個單獨文字或正規表示式搜尋操作;要麼建立一個正規表示式包含了每個關鍵詞。
標準庫隨著搜尋關鍵詞增加效能會損耗。
而Mensa可以很方便地實現這些:
1. Mensa是對抽象源文字操作,實現有兩種基於記憶體in-memory和Streaming文字源,你可以定製一個文字源,比如,你能建立一個文字源從資料庫 或從版本控制或從REST API 讀取資料。
2.Mensa有一個選項來啟用或禁用詞邊界word-boundary檢測,當啟用時,關鍵詞將只有在被詞邊界分割時才會識別,構成詞邊界符號是由一個抽象符號分類器決定的,其實現之一是提供給字元符號,但是你也能促進一個定製符號分類器。比如一個基因搜尋應用程式可以定義特定的核苷酸作為基因的界限。
3.一旦Mensa機器構建好,其效能依賴於被搜尋的文字,不是關鍵詞的數量,一個給定的機器例項可以多次重用,甚至可以被併發執行緒來搜尋多個源文字。
4.Mensa是使用Java泛型實現,它可以用來匹配任何型別的符號,這些符號也就是可由Java模板型別S定義的。
假設你的公司有一個入口網站,包含成千上萬個網頁,你要求編寫一個程式,查詢每個員工在這個門戶中被提及了多少次,你能訪問HR資料庫,查詢完整名稱,包括員工的綽號,大概有25000個。使用Mensa步驟如下:
1.建立一個Mensa關鍵詞集合
2.從HR資料庫中讀取員工完整名稱和暱稱,將每個名稱加入到關鍵詞集合
3.建立一個Mensa匹配機器
4.用關鍵詞集合初始化它
5.對於門戶中每個頁面,建立一個Mensa源文字,然後基於這些源文字執行匹配機器,結果將會得到。
具體案例程式碼可見:examples
相關文章
- 常用Java開源庫Java
- Jetlang是Java高併發Actor模型開源庫包Java模型
- Java 17 新特性:switch的模式匹配(Preview)Java模式View
- Java 17中對switch的模式匹配增強Java模式
- lua的string庫與強大的模式匹配模式
- 常用正規表示式匹配模式(java)模式Java
- 系列:開源是一種開發模式、商業模式還是其他什麼?(一)模式
- 使用Jitpack釋出開源Java庫Java
- 開源 模式模式
- Swift中的模式匹配Swift模式
- 聊聊 scala 的模式匹配模式
- 設計模式Java實現開源專案設計模式Java
- GitHub上那些值得一試的JAVA開源庫GithubJava
- Sun推出自己的開源Java資料庫Java資料庫
- Scala模式匹配模式
- 5個基於JAVA的開源NoSQL資料庫JavaSQL資料庫
- 對Java初學者來說,到底Java有哪些高效的開源庫?Java
- 樸素模式匹配演算法java實現模式演算法Java
- Rust -- 模式與匹配Rust模式
- 4-模式匹配模式
- C# 模式匹配C#模式
- [譯] Swift 中強大的模式匹配Swift模式
- 開源框架是如何使用設計模式的-MyBatis快取機制之裝飾者模式框架設計模式MyBatis快取
- 到底是倉庫模式好,還是MVC模式好?模式MVC
- Web是開源最大的成功Web
- Python RE庫的貪婪匹配和最小匹配Python
- Glob Patterns匹配模式使用模式
- Scala模式匹配詳解模式
- 字串匹配模式問題字串匹配模式
- MySQL 5.5 模式匹配LIKEMySql模式
- 使用純Java編寫正規表示式的開源庫包Java
- Java執行緒池總結和常用開源庫的使用Java執行緒
- Gris是一個混合資料庫/電子表格的開源工具資料庫開源工具
- 開源介面庫
- 谷歌開源的 GAN 庫–TFGAN谷歌
- Java中8個頂級開源NoSQL資料庫!JavaSQL資料庫
- 什麼是開源?
- Java開源十年爭議不斷:其實仍然是“閉源”Java