# 利用倒排文档和平衡树基于QT实现的简易搜索引擎
# 一、实验目标
本此实验包含两个部分,一部分是构建平衡树与构建倒排文档,对于 query.txt 文档的关键词进行分析,将结果输到 result.txt 中。另一部分是 创建图形化界面,进行用户操作。本文档将先介绍第一部分,然后再详细介 绍第二部分与如何对界面进行操作。
特殊说明:本程序应在 Release 条件下运行,用 Debug 模式特别缓慢。
# 二、实验环境
- **系统环境**:Windows 10 64 位
- **IDE**:Visual Studio 2012
# 三、抽象数据结构的说明
特殊说明:本实验二是在实验一的基础上来编写的,字符串类、栈、字符串 链表类在实验一说明文档中都详细的介绍了,这里不再 重复介绍了。但是这 里的一些数据结构在实验二中添加了一些新的函数,我在程序的注释中已详 细的介绍了,文档中不再介绍。
## 3.1 hashtable(哈希表类)
- **功能**
- 实现一个链式哈希表
- **类说明**
- 成员变量
- StringLink \*elem;以字符串链表为元素 的哈希表
- int size;哈希表长度
- 成员函数
- void insert_ptr(CharString &aim);往哈希表中插入元素
- bool search(CharString &aim);哈希表搜索元素,如果找到就返回TRUE反之返回FALSE
- unsigned int hash_value(CharString & s);哈希函数
## 3.2 fileLink(文档链表类)
- **功能**
- 实现倒排文档
- **类说明**
- 结构体file(文档)
- filename;文档名
- rank;文档地址
- fre;词频
- next;下一个文档节点
- class fileLink
- file\*head;文档链表头结点
- file\*tail;文档链表尾节点
- int size;文档链表长度
- 成员函数
- Add;文档链表添加节点
- Remove;文档链表删除节点
- Search;文档链表搜索节点
- Edit;编辑文档链表
## 3.3 AVL平衡树
- **功能**
- 构建平衡树
- **TreeNode类**
- 成员说明
- data;节点储存的字符串
- height;节点的高度
- frequent;词的频率
- left;左孩子
- right;右孩子
- fileSet;节点的倒排文档
- AVLTree类
- 成员说明
- root;根节点
- 成员函数
- Insert_ptr; 添加节点
- Search_ptr;查找节点
- Remove_ptr;删除节点
- height;求节点高度
- SingleRotateLeft;单左旋
- SingleRotateRight;单右旋
- DoubleRotateLR;双旋转从左到右
- DoubleRotateRL;双旋转从右到左
- Max;求最大值
- Insert;总体的插入节点
- Search;总体的搜索
- Remove;总体的删除
- Destroy;析构整个平衡树
# 四、核心算法说明
主要是在分词过程中将新分出的词插入到平衡树中,在平衡树中构 建倒排文档,记录每个网页含有该词的个数。网页分析分词完以后,读取 query中的关键词进行分词,将分词结果存到一个字符串链表中。对该链表进行从表头到表尾的遍历,在平衡树中搜索到链表节点所代表的词的倒排 文档,将这些关键词的倒排文档进行整合,得出每个含有这些关键词的网 页含有这些关键词的个数,然后按要求对节点排序后将结果输出到 result.txt中。
# 五、流程概述
- 加载字典
- 遍历并且记录 input 文件夹下所有的 HTML 格式的文件 的文件名
- 分析网页内容
- 中文分词建立平衡树与倒排文档
- 对query.txt进行处理将结果输出到result.txt中
- 析构平衡树与哈 希表
# 六、输入与输出以及操作的相关说明
将带解析的网页文件存放在 input 文件夹中,在程序目录下添加 query.txt文件,将词典文件放在可执行程序目录执行即可。输出时需要耐心等待19或20秒钟,便可在result.txt中的到结果。
# 七、实验结果
result.txt会显示符合实验要求的结果,每行的实验结果按照关键词出现 次数从大到小排序。
# 八、UI设计与怎么使用此UI检索关键字
此实验的gui是用QT编写,界面开始出现时会出现一个进度条,只有进度条 进度到百分之百时界面才可以使用。如图:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/955be2bf749940326da7d9de27cfe623.writebug)
![](http://www.writebug.com/myres/static/uploads/2021/10/19/e11611b5d2c434c3fb1706cf4935bcac.writebug)
该 UI 除了相应的水平与垂直布局外,主要有这四个部分,搜索框 QLineEdit, 文 件显示框 QListWidget,搜索按钮 QPushButton 和显示文章内容的 textBrowser。
**操作的特别说明**
在搜索框输入关键词时,看以往搜索框中输入一整段话,系统会对这段话进行分 词,然后根据分词分出的关键字,在左边的框中显示出含有这些分出的关键词的 文档名。在输入关键词以后,点击搜索按钮便会在界面左边的窗口显示包含这些 关键词的文件的文件名。注意双击这些文件的文件名便可在右边的矿中的到文章 的信息,由于没有加载图片资源所以文章内容不会出现图片。文章内容中用户所 搜的关键字会显示红色显示出关键词所在的位置。如果想搜其他的关键词清空搜 索框再输入关键字点击搜索即可,再次点击新的文件之前右边框会显示上个打开 的文章的文章内容。特殊说明:文章内容的网页链接无法被打开。当输入为空或 者词没有出现在已载入的网页中会弹出一个对话框进行提示,此时点是或否对话 框就会消失然后在搜索框中重新输入即可,如图 :
![](http://www.writebug.com/myres/static/uploads/2021/10/19/5e7ea23d8372550b3680ac75499bf505.writebug)
# 九、实验亮点
- 独特的 UI 设计:程序加载会出现进度条显示程序的进度进程,文章 内容中的关键词会变红提示关键词位置
- 实验加载 520 个网页的速度比较快,只用了 18 秒(虽然可以在优化)
- 分词算法中可以有效的过滤掉不是中文的单字
- 如果在 gui 中搜索词不在已知网页中出现,会有对话框提醒
# 十、实验体会
通过这次实验我了解到了搜索引擎的原理,也复习了 C++相应的知识与 QT 的 使用,学习了 AVL 平衡树与倒排文档的使用,更认识到内存管理的重要性, 提高了编程能力。
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
精选_利用倒排文档和平衡树基于QT实现的简易搜索引擎_源码打包 (117个子文件)
analyse.cpp 8KB
analyse.cpp 8KB
find_key_word.cpp 7KB
CharString.cpp 6KB
find_key_word.cpp 5KB
CharString.cpp 5KB
AVL.cpp 5KB
AVL.cpp 5KB
screen.cpp 4KB
moc_thread.cpp 4KB
moc_thread.cpp 4KB
moc_screen.cpp 4KB
moc_screen.cpp 4KB
Tries.cpp 3KB
Tries.cpp 3KB
fileLink.cpp 3KB
main.cpp 2KB
CharStringLink.cpp 2KB
CharStringLink.cpp 2KB
fileLink.cpp 2KB
qrc_screen.cpp 1KB
myhash.cpp 569B
myhash.cpp 521B
main.cpp 161B
work.cpp 74B
词库.dic 2.65MB
词库.dic 2.65MB
词库.dic 2.65MB
词库_ansi.dic 1.86MB
词库_ansi.dic 1.86MB
词库_ansi.dic 1.86MB
opengl32sw.dll 14.52MB
Qt5Gui.dll 4.68MB
Qt5Core.dll 4.45MB
Qt5Widgets.dll 4.29MB
D3Dcompiler_46.dll 3.08MB
libGLESV2.dll 1.55MB
qwindows.dll 981KB
qjp2.dll 409KB
qwebp.dll 317KB
qtiff.dll 306KB
Qt5Svg.dll 250KB
qjpeg.dll 238KB
qmng.dll 216KB
qdds.dll 38KB
qicns.dll 32KB
qsvgicon.dll 30KB
qgif.dll 24KB
qico.dll 24KB
qsvg.dll 19KB
qtga.dll 18KB
qwbmp.dll 18KB
libEGL.dll 11KB
screen.exe 94KB
gui.exe 94KB
query.exe 59KB
screen.vcxproj.filters 4KB
网页解析分词.vcxproj.filters 3KB
ui_screen.h 5KB
CharString.h 2KB
find_key_word.h 2KB
find_key_word.h 2KB
stack.h 2KB
stack.h 2KB
CharString.h 2KB
thread.h 2KB
AVL.h 1KB
screen.h 1KB
AVL.h 1KB
fileLink.h 871B
CharStringLink.h 815B
analyse.h 798B
CharStringLink.h 768B
analyse.h 761B
Tries.h 670B
fileLink.h 633B
Tries.h 624B
myhash.h 570B
work.h 364B
myhash.h 361B
LICENSE 1KB
README.md 6KB
利用倒排文档和平衡树基于QT实现的简易搜索引擎.pdf 433KB
qt_de.qm 191KB
qt_en.qm 191KB
qt_fr.qm 185KB
qt_it.qm 182KB
qt_fi.qm 179KB
qt_cs.qm 179KB
qt_sk.qm 177KB
qt_ru.qm 177KB
qt_uk.qm 177KB
qt_lv.qm 174KB
qt_ca.qm 170KB
qt_hu.qm 168KB
qt_he.qm 158KB
qt_ja.qm 150KB
qt_ko.qm 145KB
screen.qrc 62B
网页解析分词.sln 882B
共 117 条
- 1
- 2
资源评论
工具盒子
- 粉丝: 58
- 资源: 1313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- rainy-day.jpg
- IMG_20240501_171218.jpg
- Swift-内购封装swift版本
- 经典CNN网络之ResNet 图像分类网络实战项目:7种小麦叶片病害分类(迁移学习)
- Java毕设之ssm010基于ssm的新能源汽车在线租赁管理系统+vue.rar
- Java毕设之ssm009毕业生就业信息统计系统+vue.rar
- Java毕设之ssm008医院门诊挂号系统+jsp.rar
- Java毕设之ssm007亚盛汽车配件销售业绩管理统+jsp.rar
- Java毕设之ssm006基于java的少儿编程网上报名系统+vue.rar
- Java毕设之ssm005基于SSM框架的购物商城系统+jsp.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功