您可以使用全文索引或在線搜索。
我更喜歡全文索引,例如,與Lucene。您將必須定義索引器如何在文本中找到令牌(通過定義令牌模式和不關心模式)。
- 已知模式(例如,許可證編號)應在索引時註釋其類型。查詢註釋類型的索引(例如許可證編號)將返回所有包含的許可證編號。
- 靈活模式(如名稱)應作爲標記索引。然後,您可以遍歷合法名稱集合並使用它查詢索引。
- 這種方法並不是最靈活的,但是對數據文件集的更改(只需將新文件放入索引)或一組名稱(僅查詢索引中的新名稱) 。
- 在這種方法中它是不是真的你如何存儲集名稱
的另一種方法是搜索多個字符串(名稱)的表現有關。請注意,對於多個字符串有特殊的搜索算法,並且大多數算法都有一個首選的參數範圍(模式大小,字母大小,要搜索的模式數量)。您可以在StringBench處獲得一些展示。
- 此方法允許您更靈活的字符串模式。
- 但是,修改名稱集並不健壯(然後必須重複完整的搜索)。
- 多串通常會接受一組字符串來搜索的,但他們會在此設置一個特定於算法的方式(使用最多的一個線索)
編輯:
的高效搜索可以使用基於DFA的自動機完成多種模式/字符串。
我第一次想在文本中有效地搜索我選擇dk.brics.automaton。它的自動機非常高效,但它針對不匹配進行了優化(搜索以天真的方式完成)。
我轉移到了我自己的實現rexlex。它基於DFA,但比金磚四國稍慢。搜索算法並不像brics那樣天真,但增加了一些開銷。
你會找到一個link to a benchmark比較兩個。該基準可視化基於DFA的正則表達式的問題 - 如果正則表達式很大,編譯這種DFA的時間可能會非常昂貴。
我目前看好stringandchars實現多串/模式的搜索的。它專注於搜索性能,但我不知道它與上述解決方案相比如何。在上面的解決方案中,在文本中搜索多個正則表達式模式的最常見情況將更加高效。
這兩個看起來很有趣,特別是CQEngine,我會進一步評估它們。謝謝。 – User2709