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 文件。