【Boost搜索引擎项目】Day1 项目介绍+去标签和数据清洗框架搭建

🌈欢迎来到C++项目专栏

🙋🏾‍♀️作者介绍:前PLA队员 目前是一名普通本科大三的软件工程专业学生

🌏IP坐标:湖北武汉

🍉 目前技术栈:C/C++、Linux系统编程、计算机网络、数据结构、Mysql、Python

🍇 博客介绍:通过分享学习过程,加深知识点的掌握,也希望通过平台能认识更多同僚,如果觉得文章有帮助,请您动动发财手点点赞,本人水平有限,有不足之处欢迎大家扶正~

🍓 最后送大家一句话共勉:知不足而奋进,望远山而前行。


Day1

1.项目介绍

对比常用搜索引擎,实现一个简易版的站内搜索引擎。

基于boost库实现,boost库官网上是没有站内搜索引擎的,我们自己实现一个,部署在自己的云服务,客户端可以通过浏览器访问服务器地址,实现搜索引擎功能的使用。

2.搜索引擎宏观介绍

常用搜索引擎,如百度 搜狗等,搜索引擎框架可简易理解如上图,我们实现的站内搜索引擎对比就是把相关资料提前下载到云服务器本地,当用户使用搜索功能时,在服务器本地进行检索反馈。

3.相关技术栈和项目环境

  • 技术栈: C/C++ C++11, STL, 准标准库Boost,Jsoncpp,cppjieba,cpp-httplib , 选学: html5,css,js、Query、Ajax
  • 项目环境: Centos 7云服务器,vim/gcc(g++)/Makefile , vs2019 or vs code

4.正排索引VS倒排索引-搜索引擎具体原理

5.编写数据去标签与数据清洗的模块

先去boost官网将文件下载下来,使用rz命令将文件拖拽到Linux服务器

解压命令:

创建好数据文件夹用来区分处理好的数据,方便后期读取使用

  • 编写parser.cc模块
cpp 复制代码
//代码的基本结构:
#include <iostream>
#include <string>
#include <vector>
//是一个目录,下面放的是所有的html网页
const std::string src_path = "data/input/";
const std::string output = "data/raw_html/raw.txt";
typedef struct DocInfo{
  std::string title;  //文档的标题
  std::string content; //文档内容
  std::string url;   //该文档在官网中的url
}DocInfo_t;
//const &: 输入
//*: 输出
//&:输入输出
bool EnumFile(const std::string &src_path, std::vector<std::string> *files_list);
bool ParseHtml(const std::vector<std::string> &files_list, std::vector<DocInfo_t>
*results);
bool SaveHtml(const std::vector<DocInfo_t> &results, const std::string &output);
int main()
{
  std::vector<std::string> files_list;
  //第一步: 递归式的把每个html文件名带路径,保存到files_list中,方便后期进行一个一个的文件进行读取
  if(!EnumFile(src_path, &files_list)){
    std::cerr << "enum file name error!" << std::endl;
    return 1;
 }
  //第二步: 按照files_list读取每个文件的内容,并进行解析
  std::vector<DocInfo_t> results;
  if(!ParseHtml(files_list, &results)){
    std::cerr << "parse html error" << std::endl;
    return 2;
 }
  //第三步: 把解析完毕的各个文件内容,写入到output,按照\3作为每个文档的分割符
  if(!SaveHtml(results, output)){
    std::cerr << "sava html error" << std::endl;
    return 3;
 }
  return 0;
}
bool EnumFile(const std::string &src_path, std::vector<std::string> *files_list)
{
  return true;
}
bool ParseHtml(const std::vector<std::string> &files_list, std::vector<DocInfo_t> *results)
{
  return true;
}
bool SaveHtml(const std::vector<DocInfo_t> &results, const std::string &output)
{
  return true;
}
  • 安装boost开发库
    $ sudo yum install -y boost-devel //是boost 开发库
相关推荐
无限进步_2 分钟前
【C++】巧用静态变量与构造函数:一种非常规的求和实现
开发语言·c++·git·算法·leetcode·github·visual studio
Advancer-5 分钟前
RedisTemplate 两种序列化实践方案
java·开发语言·redis
运营小白7 分钟前
用 SEONIB批量生成 SEO 博客来提升 Google 排名
搜索引擎·ai自动写作·关键词抓取·seonib·多平台流量复用·规模化内容生产·seo更新节奏
郝学胜-神的一滴13 分钟前
Socket实战:从单端聊天到多用户连接的实现秘籍
服务器·开发语言·python·网络协议·pycharm
小超超爱学习993719 分钟前
大数乘法,超级简单模板
开发语言·c++·算法
刘佬GEO19 分钟前
【无标题】
网络·人工智能·搜索引擎·ai·语言模型
java1234_小锋23 分钟前
Java高频面试题:MyBatis如何实现动态数据源切换?
java·开发语言·mybatis
knighthood200127 分钟前
Qt5.15+VTK9.3.0实现点云点选功能
开发语言·qt
墨神谕32 分钟前
Java中,为什么要将.java文件编译成,class文件,而不是直接将.java编译成机器码
java·开发语言
秋风不问归客1 小时前
Springboot面试全面整理
spring boot·后端·面试