【boost_search搜索引擎】3.为什么去标签和解析文件的代码框架

一.什么是标签?

我们之前获取的源数据都是html数据,在一个html中我们看到

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">              
  2 <html>
  3 <head>
  4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5 <title>Chapter 15. Boost.Heap</title>
  6 <link rel="stylesheet" href="../../doc/src/boostbook.css" type="text/css">
  7 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
  8 <link rel="home" href="index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
  9 <link rel="up" href="libraries.html" title="Part I. The Boost C++ Libraries (BoostBook Subset)">
 10 <link rel="prev" href="function/testsuite.html" title="Testsuite">
 11 <link rel="next" href="heap/concepts.html" title="Concepts &amp; Interface">
 12 <meta name="viewport" content="width=device-width, initial-scale=1">
 13 </head>
 14 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
 15 <table cellpadding="2" width="100%"><tr>
 16 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../boost.png"></td>
 17 <td align="center"><a href="../../index.html">Home</a></td>
 18 <td align="center"><a href="../../libs/libraries.htm">Libraries</a></td>
 19 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
 20 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
 21 <td align="center"><a href="../../more/index.htm">More</a></td>
 22 </tr></table>
 ........

在一个html中,我们看到有一些字符是用<>包起来的,用<>的就是标签

二.为什么要去标签?

因为这些标签对我们搜索是没有价值的,我们只需要在最后搜索的时候,获取到要去往的网站的url就可以跳转到对应的网站了,标签的存在会减少我们搜索的效率,并且它在网页中也不显示,所以我们要把它去掉?

三.如何去标签?

  1. 我们要先将我们源数据里的html目录下的html文件的目录获取。
  2. 再通过对应的一个个html文件打开,存储到一个字符串中,然后将字符串里的标签给去掉,并对剩下的html的内容进行解析,将它分为: 标题、 内容、 url,我们可以用一个结构体来保存一个html的解析内容,然后再用一个vector来对这些文档进行管理起来。
  3. 最后将我们解析好的内容保存起来,文档和文档之间用\n隔开,文档的标题,内容,url用\3来分开(因为\3在ASCII表里表示正文结束的意思)

四.文档内容为什么要分为标题 、 内容、 url?

我们是仿照百度的搜索结果展示的。
在这里插入图片描述

五. 代码的框架

#include <vector>    
  #include <string>    
      
  struct DocInfo    
  {    
      std::string title;   //标题    
      std::string content; //内容    
      std::string url;     //url    
  };    
      
  const std::string src_data = "./data/html";    
  const std::string raw_html = "./data/raw_html";    
      
  //枚举文件:将源数据目录下的html文件的位置获取,并用一个输出型参数来存储文件的位置    
  bool EnumFile(const std::string& src_data, std::vector<std::string>* file_list);    
      
  //解析文件,将文件分为标题、内容、url,并存储到一个输出型参数中    
  bool ParserFile(const std::vector<std::string>& file_list, std::vector<DocInfo>* results);    
      
  //将解析好的文件放进raw_html目录下                                                                                    
  bool SaveFile(const std::vector<DocInfo>& results, std::string raw_html);    
      
  int main()    
  {
      std::vector<std::string> file_list;    
      if(!EnumFile(src_data,(&file_list) ))
      {                                                                                                                 
          std::cerr << "EnumFile Error!" << std::endl;
          exit(0);
      }
  
      std::vector<DocInfo> results;
      if(!ParserFile(file_list, &(results)))
      {
          std::cerr << "ParserFile Error!" << std::endl;
          exit(0);
      }
  
      if(!SaveFile(results, raw_html))
      {
          std::cerr << "SaveFile Error!" << std::endl;
          exit(0);
      }
      return 0;
  }
  //枚举文件:将源数据目录下的html文件的位置获取,并用一个输出型参数来存储文件的位置
bool EnumFile(const std::string& src_data, std::vector<std::string>* file_list)
  {
      return true;
  }
  
                                                                                                                        
  
  //解析文件,将文件分为标题、内容、url,并存储到一个输出型参数中
bool ParserFile(const std::vector<std::string>& file_list, std::vector<DocInfo>* results)
  {
      return true;
  }
  
  //将解析好的文件放进raw_html目录下
bool SaveFile(const std::vector<DocInfo>& results, std::string raw_html)
  {
      return true;
  }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值