【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 开发库
相关推荐
不知道取啥耶35 分钟前
C++ 滑动窗口
数据结构·c++·算法·leetcode
六个点1 小时前
图片懒加载与预加载的实现
前端·javascript·面试
程序员清风1 小时前
什么时候会考虑用联合索引?如果只有一个条件查就没有建联合索引的必要了么?
java·后端·面试
天道有情战天下1 小时前
python flask
开发语言·python·flask
Moment2 小时前
前端 社招 面筋分享:前端两年都问些啥 ❓️❓️❓️
前端·javascript·面试
Moment2 小时前
一坤时学习 TS 中的装饰器,让你写 NestJS 不再手软 😏😏😏
前端·javascript·面试
zephyr_zeng2 小时前
VsCode + EIDE + OpenOCD + STM32(野火DAP) 开发环境配置
c语言·c++·vscode·stm32·单片机·嵌入式硬件·编辑器
半聋半瞎2 小时前
【进程和线程】(面试高频考点)
java·jvm·面试
帅弟1502 小时前
Day4 C语言与画面显示练习
c语言·开发语言
qhs15732 小时前
Kotlin字符串操作在Android开发中的应用示例
android·开发语言·kotlin