本文主要基于WinEdt编译器,以案例的形式介绍了如何使用latex制作课程(实验)报告【持续更新中......】
\documentclass[UTF8]{article}
%%%%%% 导入包 %%%%%%
\usepackage{CJKutf8}
\usepackage{graphicx}
\usepackage[unicode]{hyperref}
\usepackage{cite}
\usepackage{indentfirst} % 首行缩进
\usepackage{enumerate}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{float} % 本文运用到固定table
\usepackage{url}
\setlength{\parindent}{2em} %中文缩进两个汉字位
\newcommand{\sanhao}{\fontsize{15.75pt}{\baselineskip}\selectfont}
\newcommand{\chuhao}{\fontsize{35pt}{\baselineskip}\selectfont}
%%%% 下面的命令重定义页面边距,使其符合中文刊物习惯 %%%%
\addtolength{\topmargin}{-54pt}
\setlength{\oddsidemargin}{0.63cm} % 3.17cm - 1 inch
\setlength{\evensidemargin}{\oddsidemargin}
\setlength{\textwidth}{14.66cm}
\setlength{\textheight}{24.00cm} % 24.62
%%%% 正文开始 %%%%
\begin{document}
\begin{CJK}{UTF8}{gbsn}
% 内容
\end{CJK}
\end{document}
\title{\chuhao Latex制作课程报告}
\begin{spacing}{2.0}
\author{
\sanhao 侯超群 \cite{CSDN} \footnote{电子邮件: [email protected],学号: xxxxxxxxxxxxxx}, 作者2, 作者3 \\ \\
\sanhao 指导老师:老师名字\\ \\ \\ \\ \\ \\ \\ \\ \\
}
\end{spacing}
\date{\sanhao 2017年01月21日}
\maketitle
@BOOKLET{crawler,
author = {wawlian},
title = {网络爬虫基本原理(一)},
address = {博客:CSDN},
url = {http://blog.csdn.net/acdreamers/article/details/44657439},
year = {2015}
};
@BOOKLET{django,
author = {houchaoqun},
title = {如何简单便捷的搭建一个网站 - 基于Django},
address = {博客:博客园},
url = {http://www.cnblogs.com/XMU-hcq/p/6009533.html},
year = {2016}
};
@BOOKLET{CSDN,
author = {houchaoqun},
title = {Houchaoqun-XMU的博客, CSDN},
address = {博客:CSND},
url = {http://blog.csdn.net/houchaoqun_xmu},
year = {2016}
};
\renewcommand{\refname}{参考文献}
\bibliographystyle{unsrt}
\bibliography{reference}
\documentclass[UTF8]{article}
%%%%%% 导入包 %%%%%%
\usepackage{CJKutf8}
\usepackage{graphicx}
\usepackage[unicode]{hyperref}
\usepackage{cite}
\usepackage{indentfirst} % 首行缩进
\usepackage{enumerate}
\usepackage{amsmath,amssymb}
\usepackage{setspace}
\usepackage{float} % 本文运用到固定table
\usepackage{url}
\setlength{\parindent}{2em} %中文缩进两个汉字位
\newcommand{\sanhao}{\fontsize{15.75pt}{\baselineskip}\selectfont}
\newcommand{\chuhao}{\fontsize{35pt}{\baselineskip}\selectfont}
%%%% 下面的命令重定义页面边距,使其符合中文刊物习惯 %%%%
\addtolength{\topmargin}{-54pt}
\setlength{\oddsidemargin}{0.63cm} % 3.17cm - 1 inch
\setlength{\evensidemargin}{\oddsidemargin}
\setlength{\textwidth}{14.66cm}
\setlength{\textheight}{24.00cm} % 24.62
%%%% 正文开始 %%%%
\begin{document}
\begin{CJK}{UTF8}{gbsn}
%%%%% 重定义 %%%%
\renewcommand{\abstractname}{摘要}
\renewcommand{\refname}{参考文献}
\renewcommand{\appendixname}{附录}
%%%% 定义标题格式,包括title,author,affiliation,email等 %%%%
\begin{figure}
\centering
\includegraphics[width=0.4\textwidth]{./images/xmu.jpg}
\end{figure}
\title{\chuhao Latex制作课程报告}
\begin{spacing}{2.0}
\author{
\sanhao 侯超群 \cite{CSDN} \footnote{电子邮件: [email protected],学号: xxxxxxxxxxxxxx}, 作者2, 作者3 \\ \\
\sanhao 指导老师:老师名字\\ \\ \\ \\ \\ \\ \\ \\ \\
}
\end{spacing}
\date{\sanhao 2017年01月21日}
%%%% 以下部分是正文 %%%%
\maketitle
% \tableofcontents
\newpage
\begin{abstract}
搜索引擎是根据一定的策略从互联网上搜集信息,在对信息进行处理加工后,为用户提供信息检索服务,可以将用户想要搜索的相关信息展示给用户的系统。一个完整的搜索引擎包括网页爬行、内容存储和预处理和网页排名等部分。本文实现了一个可以完成基本功能的搜索引擎,用户给出特定的查询后,可以从已经离线组织好的数据中提取与查询相关的网页及内容返回给用户界面。其中,网页爬虫是用python实现的,并且对每个网页的内容进行了过滤、重新组织,保存在硬盘上。系统的核心是倒排表部分,该部分用C++ 实现,可以对所有已保存的离线内容按照关键词进行组织、存储。网站的设计是基于Django框架,整个系统也是通过这个框架进行整合的。通过爬虫爬取网页并构建本地数据库,并开发一个简单的搜索引擎,能根据搜索关键字快速的找到具有此关键字的网页,并按优先级推荐显示。\\
\textbf{ 关键词:搜索引擎,倒排表,网页爬虫,Django }
\end{abstract}
\section{问题描述}
设计一个简单的搜索引擎系统,要求有一个比较完整的界面,可以接收用户的查询输入,并且根据相关度返回与查询相关的内容。要求在一个爬虫下来的简单的网页数据库中,用倒排索引结构对所有网页内容按照关键词语进行索引,当有关键词输入时,可以通过这个倒排索引结构找到与关键词相关的内容文件。在返回的内容上,采用一定的策略尽可能地让结果可以根据相关性由高到低进行排名。本课程实现的搜索引擎的结构如图1所示。
\begin{figure}[H]
\centering
\includegraphics[width=1.0\textwidth]{./images/overview.png}
\caption{本实验搜索引擎框架图}
\end{figure}
\section{实验原理}
\subsection{网页爬虫 \cite{crawler}}
网络爬虫是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份。\\
一般网页爬虫的基本工作流程如下:
\begin{enumerate}[1)]
\begin{spacing}{1.3}
\item 首先选取一部分精心挑选的种子URL
\item 将这些URL放入待抓取URL队列
\item 从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列
\item 分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。
\end{spacing}
\end{enumerate}
本实验的网页爬虫抓取策略是在爬虫系统中,待抓取URL队列是很重要的一部分。待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取哪个页面,后抓取哪个页面。而决定这些URL排列顺序的方法,叫做抓取策略。核心功能如下:
\begin{enumerate}[a)]
\begin{spacing}{1.3}
\item 选取深度优先遍历策略。深度优先遍历策略是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。以下面的图为例。首先根据用户输入的url(爬虫的根节点),进行深度优先遍历,当且仅当爬到的网站数量达到用户设置的数量时,结束程序。如图3为例,遍历的路径:A-F-G E-H-I B C D
\begin{figure}[H]
\centering
\includegraphics[width=0.45\textwidth]{./images/crawler3.jpg}
\caption{本实验网页爬虫的深度优先遍历}
\end{figure}
\item 对网页的处理:网页包含很多不相关的信息,比如css样式代码,js特效代码以及一些无关紧要的细节,得到网页核心内容。
\item 存放策略:包括每个网页的“标题”,“链接”和“网页的核心内容”。将每个网页的标题和链接置于命名为“title\_and\_link”的txt文本文件中、标题和文件置于命名为“title\_and\_file”文本文件中,内容置于命名为“编号.txt”文本文件中。后续的倒排表则通过访问已处理好的文本文件来获得爬虫得到的网页。如下图4所示:
\end{spacing}
\end{enumerate}
\subsection{基于Django搭建网站 \cite{django}}
\begin{enumerate}[1)]
\begin{spacing}{1.3}
\item 安装python和django并配置环境变量;
\item 将 django-admin.py 文件复制到目录A(A表示你想在该目录下创建项目)
\item 输入【 python django-admin.py startproject projectName 】创建项目
\item 输入【 python manage.py runserver 127.0.0.1:8000 】运行本地IP。
\item 输入【 python manage.py startapp appName 】 创建app项目
\item 输入【 python manage.py sycndb 】创建数据库,本文未详细提及这部分内容(本实验尚未涉及到本步骤)如图11所示。
\end{spacing}
\end{enumerate}
\begin{figure}[H]
\centering
\includegraphics[width=1.0\textwidth]{./images/web_framework.png}
\caption{基于Django的网站框架图解}
\end{figure}
注:本人将该部分整理到CSDN博文中,感兴趣的可以查看
\url{http://www.cnblogs.com/XMU-hcq/p/6009533.html} 。
\section{实验环境}
\begin{enumerate}[(1)]
\begin{spacing}{1.3}
\item 倒排表的实现: C$++$, 基于VS2010平台开发
\item 网页爬虫: Python, 需搭建pyhton环境, 基于Sublime平台开发
\item 网站开发: Django(Python), Bootstrap, 需搭建python和django环境, 基于Sublime平台开发
\item 其他版本的倒排表: C$++$, python, 分别基于VS2013和Sublime进行开发。
\end{spacing}
\end{enumerate}
\subsection{基于C$++$和python实现的倒排表的比较}
\begin{table}[H]
\begin{spacing}{1.5}
\caption{基于C$++$和python实现倒排表的在3000个网页中的性能比较}
\large \centering
\begin{tabular}{|c|c|c|c|}
\hline
& file number & time(create inverted list) & time(search) \\
\hline
C$++$ & 3000 & 2.44s & within 1s \\
\hline
python & 3000 & 20.014s & 7.63s \\
\hline
\end{tabular}
\end{spacing}
\end{table}
如表1所示,由3000个网页内容组成的词库中,使用C$++$实现的倒排表比python实现的倒排表具有更好的性能。在创建倒排表和根据关键字搜索的过程都很好的体现了C$++$的性能,这也是本文为什么要选择C$++$实现的原因。
\bibliographystyle{unsrt}
\bibliography{reference}
\end{CJK}
\end{document}