Searching Engine from Sun Yat-sen University
Yat-Search Engine 是一個高效的文字搜尋引擎,支援多檔案載入、精確查詢、模糊查詢和正規表示式查詢等功能。該專案旨在提供快速、準確的文字搜尋解決方案,並具備持久化儲存和日誌記錄功能,支援中文介面。
需要注意的是,中文搜尋僅可以透過「模糊搜尋」選項完成,並且需要保證有"."符號於末尾。
本項目僅供學習交流使用,請勿用於商業用途。原作者對於使用本項目所產生的任何後果概不負責。
目前版本仍在開發中,部分功能可能尚未完全實現。歡迎貢獻程式碼和提出建議!
中山大學電腦學院2024年秋季學期《資料結構與演算法》課程大作業。
目前版本:v1.4.0
└──Yat-Search-Engine
├── CMakeLists.txt
├── LICENSE
├── dat
│ └── index.dat
├── include
│ ├── RegexSearch.h
│ └── TextSearchEngine.h
├── log
│ └── query_log.txt
├── logo_pic
│ ├── logo.txt
│ └── logo_out.txt
├── readme.md
├── source-text
│ ├── bible.txt
│ ├── text1.txt
│ ├── text2.txt
│ └── otherfile...
└── src
├── RegexSearch.cpp
├── TextSearchEngine.cpp
└── main.cpp
哈希表包含查詢v1.0.0
CustomHash
,並在TextSearchEngine
中使用unordered_map
結合該雜湊函數,以最佳化查詢效能。文件讀取v1.0.1
多檔案支援(已完成) v1.1.0
main.cpp
,允許使用者輸入多個檔案名,系統將逐一載入這些檔案進行索引。支援正規表達(已完成) v1.1.1
RegexSearch
類,使用C++ <regex>
庫實作基於正規表示式的查詢功能,並在主選單中加入對應選項。精確查詢(已完成) v1.1.2
exactQuery
方法,透過unordered_map
高效找到精確匹配的關鍵字,並展示匹配結果。視覺化搜尋結果,如模仿編譯器報錯的方式(已完成) v1.2.0
^
標記關鍵字在句子中的位置,類似編譯器的錯誤指示,增強可讀性。無限查詢,退出按鈕(已完成) v1.2.1
新的雜湊函數(已完成) v1.3.1
CustomHash
函數,提高雜湊衝突的處理效率,以進一步提升查詢效能。支援中文(已完成) v1.4.0
效能最佳化與預處理(已完成) v1.3.1
使用者介面(已完成) v1.2.2
持久化儲存(已完成) v1.3.0
日誌功能,記錄查詢歷史等(已完成) v1.3.2
query_log.txt
,以便使用者查看歷史記錄和偵錯。支援中文輸出(已完成) v1.4.0
編譯方法由mingW改為cmake (已完成) v1.4.0
輸入all新增全部檔案(已完成) v1.4.0
請確保在linux環境下運行,windows環境下可能會出現中文亂碼問題。進入工作目錄並克隆項目到本地:
git clone https://github.com/ouyangyipeng/Yat-Search-Engine.git
cd Yat-Search-Engine
確保已安裝CMake 和支援C++17 的編譯器,如g++
或clang++
。 cmakelists.txt檔案已經設定好了編譯選項,只需執行以下指令即可編譯專案。注意預設編譯器位於/usr/bin/g++
,如需使用其他編譯器請修改CMakeLists.txt檔。
mkdir build # 假如没有build文件夹
cd build
cmake ..
cmake --build .
./YatSearchEngine
將需要搜尋的文字檔案放入source-text 資料夾中,確保檔案以.txt 格式儲存。
啟動程序:運行可執行檔後,程式將顯示歡迎介面並提示按回車繼續。
載入檔案:根據提示輸入要載入的文件,每次輸入一個檔案名稱(需以.txt 結尾),輸入done 完成檔案選擇。
選擇查詢類型:
輸入1 進行精確查詢。
輸入2 進行模糊查詢。
輸入3 進行正規表示式查詢。
輸入4 退出程序。
輸入查詢內容:根據所選的查詢類型,輸入對應的關鍵字或正規表示式。
查看結果:查詢結果將顯示符合的句子及其位置標記。
退出程序:選擇退出選項,程式將保存索引並記錄日誌後退出。
查詢操作日誌儲存在query_log.txt 檔案中,使用者可透過文字編輯器查看歷史查詢記錄和操作日誌。
歡迎貢獻程式碼和提出建議!請提交Pull Request 或在Issues 中回饋您的想法。
本專案採用MIT 許可證。詳情請參閱LICENSE 文件。