【Boost搜索引擎项目】Day1 项目介绍+去标签和数据清洗框架搭建
🌈欢迎来到C++项目专栏
🙋🏾♀️作者介绍:前PLA队员 目前是一名普通本科大三的软件工程专业学生
🌏IP坐标:湖北武汉
🍉 目前技术栈:C/C++、Linux系统编程、计算机网络、数据结构、Mysql、Python
🍇 博客介绍:通过分享学习过程,加深知识点的掌握,也希望通过平台能认识更多同僚,如果觉得文章有帮助,请您动动发财手点点赞,本人水平有限,有不足之处欢迎大家扶正~
🍓 最后送大家一句话共勉:知不足而奋进,望远山而前行。
————————————————
Day1
- 1.项目介绍
- 2.搜索引擎宏观介绍
- 3.相关技术栈和项目环境
- 4.正排索引VS倒排索引-搜索引擎具体原理
- 5.编写数据去标签与数据清洗的模块
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模块
//代码的基本结构:
#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 开发库
相关文章:
【Boost搜索引擎项目】Day1 项目介绍+去标签和数据清洗框架搭建
🌈欢迎来到C项目专栏 🙋🏾♀️作者介绍:前PLA队员 目前是一名普通本科大三的软件工程专业学生 🌏IP坐标:湖北武汉 🍉 目前技术栈:C/C、Linux系统编程、计算机网络、数据结构、Mysq…...
站群服务器需要多大内存
站群服务器的内存需求取决于网站的数量和流量,以及服务器需要运行的应用和服务。RAKsmart小编为您整理发布站群服务器需要多大内存以及站群服务器内存需求的考虑因素。 站群服务器是一种用于托管多个网站的服务器,通常用于搜索引擎优化(SEO)和网络内容管…...
HTB Perfection
Perfection User Namp ┌──(kali㉿kali)-[~/HTB/machine/Perfection] └─$ nmap -A 10.129.226.58 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-03 21:10 EST Nmap scan report for 10....
如何远程连接MySQL数据库?
在现代互联网时代,远程连接MySQL数据库成为了许多开发者和管理员必备的技能。这不仅方便了数据的共享和管理,还可以使多个团队在全球范围内协同工作。本文将介绍如何通过天联组网实现远程连接MySQL数据库,并实现高效的信息远程通信。 天联组网…...
【 HTML 及浏览器 】前端跨页面通信
前端跨页面通信:连接分散界面的纽带 在构建复杂的前端应用时,我们常常需要在不同的页面之间进行数据通信。无论是同源页面还是非同源页面,通信机制都是实现多页面数据同步和交互的关键。本文将探讨各种前端跨页面通信的方法,并提…...
内存安全的编程语言
美国政府新颁布《回归基础构件:通往安全软件之路》 《回归基础构件:通往安全软件之路》中,白宫国家网络主任办公室(ONCD)呼吁开发者使用「内存安全的编程语言」 内存安全的编程语言 根据NSA的建议,内存…...
Excel常用公式总结非常实用
16个最实用的Excel万能公式 1、多条件判断 IF(And(条件1,条件2..条件N),条件成立返回值) IF(or(条件1,条件2..条件N),条件成立返回值) 2、多条件查找 Lookup(1,0/((条件1*条件2*...条件N)),返回值区域) 3、多条件求和 Sumifs(值区域,判断区域1,条件1,判断区域2,条…...
window路径特殊字符解决
官方定义命名规范 https://learn.microsoft.com/zh-cn/windows/win32/fileio/naming-a-file 重点 1.目录规范 特殊字符以空格 与点.开头结尾 2.文件规范 特殊字符以空格 与点.开头结尾NUL、COM等文件 解决方案 字符标点符号实际上在字符集定义中有一个很有趣的现象&…...
『大模型笔记』RAG 系统开发中的12大痛点及解决方案
RAG 系统开发中的12大痛点及解决方案 文章目录 问题引入一. 痛点 1:缺失内容1.1. 数据清洗的重要性1.2. 精心设计的提示(Prompt)有助于提高准确性二. 痛点 2:关键文档被遗漏2.1. 通过调整 chunk_size 和 similarity_top_k 参数优化检索效果2.2. 检索结果的优化排序三. 痛点…...
VScode---php环境搭建
文章目录 1.下载php Dehug;php server2.下载php环境3.配置环境变量5.配置php.ini文件6.设置vscode6.测试遇到的问题 1.下载php Dehug;php server 2.下载php环境 下载地址:https://www.php.net/downloads.php 3.配置环境变量 C:\Users\hacker>php -v PHP 8.3.3 (…...
【Vue3】3-6 : 仿ElementPlus框架的el-button按钮组件实
文章目录 前言 本节内容实现需求完整代码如下: 前言 上节,我们学习了 slot插槽,组件内容的分发处理 本节内容 本小节利用前面学习的组件通信知识,来完成一个仿Element Plus框架的el-button按钮组件实现。 仿造的地址:uhttps://…...
.datastore@cyberfear.com.mkp勒索病毒的最新威胁:如何恢复您的数据?
导言: 我们享受着数字化带来的便利,但同时也要面对不断演进的网络威胁。最近出现的 .datastorecyberfear.com.mkp、[hendersoncock.li].mkp [hudsonLcock.li]、.mkp [myersairmail.cc].mkp 勒索病毒就是其中之一,它对我们的数据安全构成了…...
23.基于springboot + vue实现的前后端分离-在线旅游网站系统(项目 + 论文PPT)
项目介绍 本旅游网站系统采用的数据库是MYSQL ,使用 JSP 技术开发,在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 技术选型 后端: SpringBoot Mybatis 数据库 : MyS…...
SpringCloud-RabbitMQ消息模型
本文深入介绍了RabbitMQ消息模型,涵盖了基本消息队列、工作消息队列、广播、路由和主题等五种常见消息模型。每种模型都具有独特的特点和适用场景,为开发者提供了灵活而强大的消息传递工具。通过这些模型,RabbitMQ实现了解耦、异步通信以及高…...
Linux网络编程 ——UDP 通信
Linux网络编程 ——UDP 通信 1. UDP1.1 UDP 通信1.2 广播1.3 组播(多播) 2. 本地套接字 1. UDP 1.1 UDP 通信 输入 man 2 sendto 查看说明文档 #include <sys/types.h> #include <sys/socket.h>ssize_t sendto(int sockfd, const void *buf…...
TDengine 签约树根互联,应对“高基数”难题
近日,树根互联与涛思数据达成签约合作,共同推动智能制造领域的建设。作为一家处于高速发展期的工业互联网企业,树根互联将新一代信息技术与制造业深度融合,开发了以自主可控的工业互联网操作系统为核心的工业互联网平台——根云平…...
实名制交友-智能匹配-仿二狗交友系统-TP6+uni-APP小程序H5公众号-源码交付-支持二开!
一、代码风格 通常不同的开发者具备不同的代码风格,但为了保证语音交友系统开发质量,在编码前需要进行代码风格的统一,通过制定一定的规则,约束开发者的行为。具有统一风格的代码才能更清晰、更完整、更容易理解、更方便后期维护…...
在CentOS上使用Gunicorn和systemd完整部署Flask应用:详细指南
在现代Web开发中,选择合适的技术栈对于确保应用的稳定性、性能和易于管理至关重要。本篇博客将深入探讨如何在CentOS系统上利用Flask、Gunicorn和systemd的强大组合来部署Web应用。这个全面的流程不仅包括应用的创建和运行,还涉及到如何利用系统服务来管理应用的生命周期,确…...
【信息系统项目管理师】--【信息技术发展】--【新一代信息技术及应用】--【人工智能】
文章目录 第二章 信息技术发展2.2 新一代信息技术及应用2.2.5 人工智能1.技术基础2.关键技术3.应用和发展 第二章 信息技术发展 信息技术是在信息科学的基本原理和方法下,获取信息、处理信息、传输信息和使用信息的应用技术总称。从信息技术的发展过程来看ÿ…...
注意力机制(代码实现案例)
学习目标 了解什么是注意力计算规则以及常见的计算规则.了解什么是注意力机制及其作用.掌握注意力机制的实现步骤. 1 注意力机制介绍 1.1 注意力概念 我们观察事物时,之所以能够快速判断一种事物(当然允许判断是错误的), 是因为我们大脑能够很快把注意力放在事物…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
