C++项目:基于boost在线文档实现的搜索引擎(一)

   日期:2024-12-27    作者:fdtop2 移动:http://mip.riyuangf.com/mobile/quote/63633.html

下一篇:C++项目:基于boost在线文档实现的搜索引擎(二
github: https://github.com/duchenlong/boost-search-engine


  • :根据文档id,得到文档的内容
  • :根据文档的内容,得到文档的id

因为boost的官方文档中没有一个搜索的功能,那就可以利用下,为博客系统的搜索功能打一个小基础

那么的模块,就可以在这些官方文档的html文件中的文本来建立

  • common:放置公共模块的程序
  • data:和表示输入输出内容,表示临时数据
  • jieba_dict:jieba分词的词典文件
  • parser:预处理模块
  • searcher:搜索模块,索引模块

对于使用到的一些库,需要下载一下

  • :https://github.com/yhirose/cpp-httplib
    g++版本必须得是4.9以上

  • :下载地址 https://sourceforge.net/projects/boost/files/boost/1.53.0/

  • :下载地址 http://www.boost.org/doc/libs/1_53_0/doc/html/

  • :https://github.com/yanyiwu/cppjieba
    在这个库中,还需要一个,https://gitee.com/mirrors_yanyiwu/limonp?_from=gitee_search,然后放到cppjieba的include目录下就可以了

  • : yum install boost-devel.x86_64

  • : yum install jsoncpp-devel.x86_64

下载之后,对分词进行测试与使用


  1. 预处理模块

读取指定html文档的内容,解析出其中的文本内容:文档标题,文档URL,文档的正文(p,span,h1…等等这种文本标签中的内容
然后将解析的关键字的集合,整理到一起,为了之后建立索引打基础

  1. 索引模块

针对中得到的关键字的集合,对于这些关键字,逐一构造,并提供一些接口给其他函数中方便调用

  1. 搜索模块

首先,搜索模块中的内容会是一个长文本,得先对个文本进行分词 (分词

再根据分词的结果,根据倒排索引依次查找所有关键字,得到与这些关键字相关的所有文档 (触发

之后把所有相关的文档按照一定的规则进行排序,相关性越高的文档排在前面进行显示。(排序

  1. 服务器模块

Http服务器,给外部提供服务,使用搭建服务器


首先就是得到boost文档中 .html文件的路径,然后根据这些路径依次对这些文档的内容进行解析(标题,路径URL,正文,最后输出为一个行文本文件

  1. 枚举boost文档中所有 .html文件路径

这里封装一个函数,直接将所有的路径加入到数组中,执行失败返回

 

boost::filesystem 中的path类

path相关的函数名解释path(); path(const char* pathname); path(const std::string& pathname);构造函数const std::string& string( )返回用于初始化 path 的字符串的副本bool exists(const path&)检查文件的扩展名。文件可以为任何类型:常规文件、目录、符号链接等等std::string extension(const path&):此函数以前面带句点 (.) 的形式返回给定文件名的扩展名。例如,对于文件名为 test.cpp 的文件,extension 将返回 .cpp

,该迭代器可以递归的遍历指定路径下的所有文件,在遍历的途中,我们需要跳过目录以及不是.html文件的路径

最后所得到的路径,便是相对于文件的一个相对路径

 
  1. 根据路径遍历每个.html文件,对文件内容进行解析

直接遍历vector 数组中的每一个路径,然后依次打开文件,从中进行解析,并对解析函数进行封装

 

在该函数中,读取文件数据使用公共函数模块中封装的Read接口,然后再分别对标题,路径,正文的解析函数进行封装。

对于解析好的数据,我们进行一个结构体的描述

 
 
 
  1. 解析的结果写入到一个输出文件中

同理,对这个函数进行封装

 

对每一个单独的html文件进行解析后的数据,我们单独写在一行中,并用一个特定的符号进行分割。这个符号不能是正文中存在的,那就可以使用一些不经常使用的字符


 

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号