搜索引擎项目



搜索引擎

1. 程序开发环境

Server

Linux: centos6.0  

G++: version 4.4

Client

Php

2. 系统目录结构

src :存放系统的源文件(.cpp) 。

include:存放系统的头文件(.h) 。

bin: 存放系统的可执行程序。

conf:存放系统程序中所需的相关配置信息。

lib: 存放系统程序中所使用的库文件。

data: 存放系统程序所需的数据。

3.系统运行图

 搜索引擎项目_第1张图片

3. 系统总体概述

 预处理过程

  预处理过程主要是事先生成程序运行过程中可能用到的数据,以便提高处理时间。预处理过程主要生成程序所需的三个文件:网页库文件,网页位置信息文件倒排索引文件其中网页库文件ripepage.lib主要是以格式化的数据存储大量的网页信息网页格式化数据为<doc><docid>id</docid><docurl>url</docurl><doctitle>title</doctitle><doccontent>content</doccontent><></doc>

网页位置信息文件offset.lib主要是存放网页在网页库中的偏移位置,以便程序能快速的取出指定的网页该文件每一行存储一个网页文件在网页库中的位置信息,每一行的格式为:docid   offset   size其中docid为网页的idid具有全局唯一性)offset为文档在网页库中距离文件起始位置的字节数,size为文档大小。

倒排索引文件invert.lib网页库中的所有词(经过分词,去停用词)包含这些词的文档的一种关联关系。每个词的倒排索引在该文件中占一行,每一行的格式为:

Word  docid1  frequency1  weight1 … docidi  frequencyi weighti… 

 其中word网页库中的词, 后面接着的是每三个为一组,docid包含该的网页,frequencyi为该次在该文档中的词频,weighti为该次在该文档中的权重(归一化后的)

程序运行过程

程序首先从offset.lib读取网页位置信息,然后根据这些信息从rippage.lib读取网信息然后从invert.lib读取倒排索引信息

程序循环不断地通过socket接受来自客户的请求,一旦受到请求就fork一个子程负责处理该请求而主进程则继续监听。子进程接受来自客户端的查询语句,根据查询语句查找结果并将结果返回客户端。

4.详细设计(参考源代码,都有非常详细的注释)

① 生成网页库ripepage.lib

②生成网页的位置偏移文件offset.lib

以上请参考make_ripepage_offset的代码

③网页去重生成新的offset.lib文件

参考pagedup_remove\srctest.cpp及其相关文件

④建立倒排索引文件invert.lib

参考pagedup_remove\srctest.cpp及其相关文件

⑤程序查询逻辑

参考pagedup_remove\srctest_qurey.cpp及其相关文件

⑥服务器框架

参考pagedup_remove\srctest_main.cpp及其相关文件


 1.TF-IDF是一种 统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在 语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被 搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级
  2.VSM向量空间模型: http://longmans1985.blog.163.com/blog/static/70605475201127104229359/ 
        向量空间模型是一种资讯过滤以及评估相关性的代数模型,它是一种基于关键词的标量模型,关键词对于分文档的作用是不同的。
    在向量空间模型下,构造关键词权重计算公式有3个基本原则tf-idf:
3. http://www.cnblogs.com/haippy/archive/2011/10/04/2199144.html 
   主要思路:文档-->递归读取建立文档库和偏移索引-->对每篇文档切词,根据priority_queue 和去停用词找出关键词-->根据关键词去重  -->重新建立文档库-->建立倒排索引 根据if-tdf计算然后对每篇文档进行归一化--> 对查询词进行if-tdf和归一化,然后根据余弦相似度计算相似程度,通过priority_queue输出结果



你可能感兴趣的:(搜索引擎项目)