第一篇博客记录我的大作业,第一个完整的项目还是非常有纪念意义的。
做这个系统需要部分信息检索的知识,这里推荐书《信息检索导论》,里面介绍了非常多经典算法,我只是用C语言代码实现了里面最简单的例子。实现了倒排索引,布尔查询和词典扩展功能。
本项目用到了数据结构中的树,链表,栈。一共五个页面,千余行代码。架构是参考了GitHub上一个大佬的C++搜索项目,不过我暂时也找不到链接了。
系统概述
文本预处理
- 寻找英语文章:可以寻找英语课本,新闻,小说等。我使用的是一本英语小说。
- 处理语料:分句并删除标点符号和记号,删除停止词,停止词是指“the,a,or”等使用频率非常高的词。词条归一化,将看起来不完全一致的多个词条归纳为一个等价类。比如把read和reading都映射到read上,在搜索reading的时候就可以搜到read相关的语句了。
构建倒排索引
- 索引粒度:我是将一个句子作为一个微型文档来建立索引。
- 词典采用二叉搜索树结构,倒排索引表采用单链表结构
文本查询
词典查询采用二叉查找算法,布尔查询采用栈算法
评价模块
采用向量空间模型方法来计算查询词项在所有出现过的文档中的相关性。按照得分进行排序,选出得分最高的十个句子呈现给用户。
具体实现架构
项目是用C语言实现,开发工具是VS2019。项目结构如下图:
结构体定义和算法设计如下:
代码链接在评论区里补充。
来自程序媛的交友
想和我交流的可以发邮件给我或者加QQ:740175476@qq.com