站内搜索引擎
在Boost官网查文档时发现Boost官网没有提供检索,于是就想着做一个可以检索Boost帮助文档的一个小型站内搜索引擎,先做了一个很简单的版本以后进行扩充
目标:实现搜索Boost帮助文档
项目依赖的第三方库 Boost, cppjieba, jsoncpp
项目源码:https://github.com/Waorange/doc-searcher
使用中文分词是为了以后可以扩充用于中文文档搜索
项目具体内容
首先可以简单的分析下需求,即实现对Boost帮助文档的搜索,我们需要实现搜索因此需要建立索引,这里我们采用正排索引和倒排索引(后面讲),而需要建立倒排索引我们就需要实现分词,同时因为Boost帮助文档为一个一个HTML文件,因此需要将HTML文件进行处理,需要找到该HTML的标题,并且去除标签,然后进行进行分词。
通过分析我们可以分成三个模块
第一个模块是对HTML文档进行处理,解析出文档标题,文档内容,和对应的Boost官网的URL
首先通过提供的HTML文件路径,对其进行遍历,获取所有文件路径,然后根据文件路进行读取文件内容,将读取的文件内容构造成一个string对象,然后进行解析,首先对通过HTML 文件格式可以很容易的通过title标签可以找到标题,另外定义了一个结构体DocInfo结构体存储文件内容,其含有标题,内容,URL,将解析的标题存入该结构体,然后解析内容,解析内容主要是去除了标签和HTML标题,通过判断<确定是否在标签中判断>确定是否标签内容结束,同样放到上面的结构体中,最后是确定URL因为所有的帮助文档均在doc目录下,有共同的前缀,因此只需要用该前缀和给定的路径进行合并得到最终URL,获取到文档全部内容后将该文档构建成一行添加到输出文件,最终构建一个行文本文件输出,在一行中三者之间通