一.什么是标签?
我们之前获取的源数据都是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 & 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就可以跳转到对应的网站了,标签的存在会减少我们搜索的效率,并且它在网页中也不显示,所以我们要把它去掉?
三.如何去标签?
- 我们要先将我们源数据里的html目录下的html文件的目录获取。
- 再通过对应的一个个html文件打开,存储到一个字符串中,然后将字符串里的标签给去掉,并对剩下的html的内容进行解析,将它分为: 标题、 内容、 url,我们可以用一个结构体来保存一个html的解析内容,然后再用一个vector来对这些文档进行管理起来。
- 最后将我们解析好的内容保存起来,文档和文档之间用\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;
}