我正在研究大約1GB的增量文件,我想搜索特定的模式。 目前我正在使用Java正則表達式,你有什麼想法,我怎麼能更快地做到這一點?模式搜索如何更快地完成?
回答
基本上你需要的是一個可以處理流的狀態機。這個流被綁定到文件中。每次文件增長時,都會讀取附加到該文件的內容(如尾部linux命令附加到標準輸出的文件中添加的行)。
如果您需要停止/重新啓動分析儀,您可以將其存儲在起始位置的某個位置(可以取決於模式匹配所需的窗口),然後重新啓動。或者你可以重新開始。
這是針對「增加文件」部分的問題。
對於處理內容的最佳方式,它取決於您真正需要什麼,需要應用什麼樣的數據和模式。正則表達式可能是最好的解決方案:靈活,快速和相對方便。
從我的理解來看,如果你想爲某些自然語言內容做文檔搜索匹配,Lucene會很好。這將是一個很差的選擇,以匹配所有日期或所有行與特定的屬性。另外,因爲Lucene首先創建文檔的索引......這將僅對於處理非常重的處理有幫助,因爲首先索引需要時間。
聽起來像Apache Lucene的工作。
你可能不得不重新考慮你的搜索策略,但是這個庫是用來做這樣的事情並且增量地添加索引。
它通過建立你的數據的反向索引(用Lucene的說法是文檔),然後快速檢查反向索引中哪些文檔有你的模式的一部分。
您可以使用文檔索引存儲元數據,這樣您就不必在大多數用例中查閱大文件。
您可以嘗試使用模式和匹配器類來使用編譯的表達式進行搜索。
見http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html和http://download.oracle.com/javase/tutorial/essential/regex/
或使用您喜歡的搜索引擎上的條款搜索:
Java正則表達式優化 或
Java正則表達式的性能
我已經優化了正則表達式。我已經刪除了回溯。 – Kamahire 2010-10-21 15:35:13
這是否讓它更快? – 2010-10-30 00:27:50
我認爲這取決於:
- 你的數據結構(面向行?)
- 在其數據文件越來越大
如果你的數據是面向行的比賽
如果數據沒有快速增長,這特別有用。
如果您的匹配非常複雜,但具有明顯的固定文本,並且模式不會經常發生,您可以使用String.contains()函數更快地執行此操作,並且只有在true時才應用該模式。由於模式趨向於高度優化,因此絕對不能保證更快。
你甚至可能會想通過手工編寫一個解析器來替換正則表達式,可能是基於StringTokenizer或者其他的。這確實有很多工作要做,但它可以讓您將關於數據的額外情報傳遞給解析器,從而使其快速失敗。如果您真的瞭解很多關於您無法在模式中進行編碼的數據,這只是一個不錯的選擇。
- 1. 如何在Delphi 2010中更快地完成代碼完成?
- 2. 使用本地搜索快速谷歌自動完成
- 3. iOS更快地搜索集合視圖
- 4. 在Perl中更快地搜索文件
- 5. 如何在CLiPS模式中連接搜索模式。搜索
- 6. 如何在Android搜索欄模式中實現搜索模式?
- 7. 如何搜索魚類完成?
- 8. 如何使magento搜索功能更快?
- 9. 更改快速搜索框的樣式
- 10. 德爾福如何更快地搜索二進制文件?
- 11. 哪個更快,正則表達式搜索或數組搜索?
- 12. jedi-vim自動完成。通過grep式搜索完成
- 13. 如何格式化搜索自動完成零件列表?
- 14. 如何更改HeidiSQL完成快捷方式?
- 15. 自動完成搜索
- 16. AvalonEdit - 搜索完成數據
- 17. 自動完成搜索
- 18. MongoDB搜索 - 自動完成
- 19. 更快的搜索方法
- 20. 搜索'Open ...'[CMD + O]模式時搜索結果的快捷方式
- 21. 索引可以更快地搜索文件中的列表?
- 22. 更快的自動完成/即時搜索Java移動應用程序
- 23. 數據生成模式視頻搜索
- 24. 記事本++如何索引文件以更快搜索?
- 25. 如何搜索匹配特定模式
- 26. grep,如何搜索確切模式?
- 27. Directory.GetFiles搜索模式
- 28. 如何在gvim中搜索和替換以下模式搜索
- 29. 正在搜索PHP陣列比從MySQL搜索/檢索更快
- 30. 如何用Fluent NHibernate自動搜索更改模式
這樣的聲音應該是I/O限制的。只讀取(並丟棄)文件內容的程序運行速度有多快?正則表達式應該能夠達到相同的速度,否則就會出現問題(如緩衝)。如果簡單地閱讀文件對於您的目的來說太慢,那麼您需要考慮一種不同的方法(參見以下關於Lucene的討論)。 – 2011-06-06 03:12:20
你可以顯示圖案和一些文件。也許表達很慢,因爲它不是最佳的。你的程序是否將文件的全部內容加載到字符串中,然後運行正則表達式?這是否是緩慢的部分? – 2011-06-10 12:10:47