面向BBS 的关键词搜索引擎系统的设计①

2015-04-14 08:05
关键词:数据表搜索引擎页面

朱 婧

(福建船政交通职业学院,福建 福州35001)

0 引 言

公安系统为了解在校学生以及青少年的思想动态,确保年轻人思想、心理的健康发展,而BBS是年轻人最为青睐的文章发表地,年轻人思想动态都在BBS 上彰显出来[1].如上原因,“BBS 搜索系统”这一项目油然而生.本项目的主要任务是:建立一个搜索引擎系统[2],针对高校BBS 上发表的文章进行检索,把符合搜索关键字的文章题目和文章摘要检索出来,通过HTML 页面显示出来,在文章题目上建立超链接,通过点击文章题目连接到BBS 相应文章中.各大搜索引擎的建立,如Google、百度、Yahoo 等大型搜索引擎让网民查阅资料的速度大大提升,极大方便了用户查询的需求[3].同时,搜索引擎对网站的影响也是相当巨大的.一个网站的命脉就是流量,而网站的流量可以分为两类[4].一类是自然流量,一类就是通过搜索引擎而来的流量.如果搜索引擎能够能多能有效的抓取网站内容,那么对于网站的好处是不言而喻的.

1 需求分析

随着网络技术的迅速发展,人们日益习惯于运用网络搜集、掌握信息,网络的发展极大地为人们提供着便利.年轻人更是习惯与从网络摄取信息,但是对于信息质量的好坏并不能够完全甄别,如何促进网络健康发展,严防不法分子利用网络散播谣言,就需要监管部门时刻了解当下年轻人的思想动态.BBS 正是年轻人发表文章、讨论各种话题的平台,通过对BBS 的监管即可了解到年轻人时下的思想动态.然而,BBS 论坛多如牛毛,对于监管部门如何快速有效地从海量信息中找寻有用信息,从而实施有利的监管,做到防患于未然,建立BBS 搜索引擎则是最行之有效的途径[5].

目前各大搜索引擎的建立,如Google、百度、Yahoo 等大型搜索引擎让网民查阅资料的速度大大提升,极大方便了用户查询的需求.同时,搜索引擎对网站的影响也是相当巨大的.一个网站的命脉就是流量,而网站的流量可以分为两类.一类是自然流量,一类就是通过搜索引擎而来的流量.如果搜索引擎能够能多能有效的抓取网站内容,那么对于网站的好处是不言而喻的.

2 功能设计

BBS 搜索系统主要完成的功能模块描述如下:

页面扒取模块:根据用户指定的要求下载相应的BBS 文章,如根据时间要求下载某时间之后的文章.并确保下载的完整性,无遗漏.

页面存储模块:将下载的BBS 文章以一定得形式存储到数据库中,包括文章的id,标题,URL,关键词及摘要,方便后面索引的建立.

索引建立模块:根据关键字列表和存储在数据库中的文章,以关键词做索引,建立倒排表,存储在数据库中.

图1 检索查询模块结构图

关键词添加模块:由于关键词列表是由用户提供,而用户的关键词列表也是在动态变化的.这样需要关键词列表的输入符合动态变化,即一次输入不符合要求.如果有新的关键词出现,关键词添加模块负责将其加入到关键词列表中.

敏感词过滤模块:根据用户提供的敏感词表建立一个敏感文章表,并将其存储到本地文件中,方便用户提取.此敏感词过滤模块还应当具有报警功能.如果这个记录没有出现敏感词,则不报警.如果出现敏感词,则报警提示用户查看文件.

图2 项目总体架构图

检索查询模块:该模块将用户输入的关键词进行搜索,从索引表中找出文章中存在关键词的文章ID,再通过文章ID 找到数据库中存放的文章.这一模块由本人负责.其具体结构图如图1 所示.

页面生成系统:由于存放在数据库中的文章已经以一定的结构存在,页面生成系统调用该结构中的标题,URL,关键字,摘要,以HTML 页面显示出来,通过点击文章标题启动超链接,连接到相应BBS 文章中去.

3 系统架构

本项目的总体架构如下图2 所示.

从上图可以看出,建立搜索引擎需要三大部分:搜索、整理和服务.整理部分中的索引建立和服务部分是本人的主要任务.

4 倒排系统的设计

倒排系统的工作原理.

首先,倒排系统搜索MySQL 数据库中的数据表PageInfo,查找没有被索引的文章记录,即YN==0 的记录.

然后,倒排系统将没有被索引的记录进行处理.将此记录中的关键词与倒排表的关键词进行比较,如果没有此关键词,则在倒排表Keyword 中加入此关键词.如果存在此关键词,则不作改变.由于数据表中每篇文章对应的关键词可能有多个,所以对关键词的提取要逐个进行.

接下来,将此记录中每个关键词对应的文章id 加入倒排表Idstring 中.Idstring 以链表的方式存放文章id.这样方便检索和页面生成.

倒排系统重复上面的工作,直到所有的数据表记录都被索引.这就是倒排系统实现的基本工作原理.

倒排系统是建立在MySQL 数据库基础上的,需要前期的一个数据表,该表也存放在MySQL 数据库中.该数据表存放着BBS 文章的所有重要信息.例如:文章ID,文章标题,URL,关键词以及文章摘要.其具体形式如下数据表1.

表1 数据表

YN Int(DEFAULT 0)此记录是否被引用

该数据表的名称是PageInfo,创建该表的SQL语句是:

Create table PageInfo(id int auto_increment primary key,title varchar(250),keyword varchar(300),content varchar(512),YN int DEFAULT 0);由于该表对于倒排表的建立与以后的检索有重要作用,故在此要详细介绍一下.Id 是该表的主关键字.Title 是该表存储的BBS 文章标题.Keyword 存放BBS 文章的关键词.Content 是BBS 文章的摘要.YN 存放一个标志,该标志是Int 型,初始值为0,当该条信息被记录到倒排系统时,YN 置为1,以防止以后建立倒排表时出现重复写入.

倒排表的建立还需要一个重要的表格就是:关键词表.该表格存放公安系统提供的关键词,以这些关键词做索引,可以避免无关内容的盲目存入.

倒排系统主要的表就是倒排表,该倒排表是基于上面介绍的数据表与关键词表而建立.由于数据表内容完整,为了防止信息的冗余,倒排表的建立就相对简单,只包括两项内容:关键词与文章ID.如倒排表2:

表2 倒排表

该倒排表的名称是IndexInfo,创建该表的SQL语句是:

Create table IndexInfo(keyword varchar(30)primary key,idstring varchar(1024));包括两项:Keyword 与Idstring.Keyword 存放从关键词表中提取出来的关键词,并且此为该表的主关键字.Idstring 存放以该关键词搜索数据表出现的文章Id.由于某关键词可能在好多文章中出现,所以Idstring 采取链表式结构.搜索数据表时后读到的文章Id 存放在先读到得文章Id 后面.

由于索引系统还涉及一个重要的组成部分,敏感词汇的处理.这里涉及一个非常重要的数据表:敏感文章表.该表的具体格式如表3:

表3 敏感文章表

Varchar(300) 关键词Content Varchar(1024) 文章摘要Sign Int(DEFAULT 0)报警标志

该数据表的名称是TitleInfo,创建该表的SQL语句是:

Create table TitleInfo(id int auto_increment primary key,title varchar(250),keyword varchar(300),content varchar(512),Sign int DEFAULT 0).Id 是该表的主关键字.Title 是该表存储的BBS 文章标题.Keyword 存放BBS 文章的关键词.Content 是BBS 文章的摘要.Sign 存放一个标志,该标志是Int型,初始值为0,如果存在敏感文章记录,将其记录对应的Sign 置为1.

5 检索器设计

5.1 检索器工作原理

首先,检索器从用户界面得到关键词.关键词可能是一个,也可能是几个.现在分类讨论.

对于单个关键词.检索器通过一个暂存点得到此关键词.将此关键词搜索MySQL 数据库中存放的倒排表IndexInfo.如果没有匹配的记录,则返回空值.如果倒排表中存在此关键词,将其文章id 链表提取出来,存入一个字符串中.由于文章id 才用“关键词;关键词;……”的形式存放,所以运用一个循环,将文章id 逐个提取出来.

图3 搜索页面

对于多个关键词.检索器采用和取的处理方法.多个关键词存入一个字符串中.由于本系统只能采用“关键词 关键词……”的形式输入,对于其他输入方式不识别.所有处理存放多关键词的字符串,只需要通过一个循环语句,以空格作为分界,将每个关键词一次存入到一个数组中.然后依次将数组中的每个关键词提取出来,运用上面处理单关键词的手段,将其对应文章id 找到,再将所有的关键词对应的文章id 做对比,如果存在公共的文章id,则通过此文章id 搜索数据表PageInfo 来得到相应的记录.如果不存在,则返回为空.

5.2 检索器类的实现

接下来介绍检索系统中类的实现.首先静态处理类SearchInDB(string word),它传入一个关键词,返回一个string 类型.SearchInDB 类通过关键词word 查找数据库倒排表获得相应的Idstring,即关键词对应的文章ID.下面介绍关键词处理类Word-In(string wordstring),它的返回值是空类型.类WordIn 用wordstring 得到输入框中传入的关键词.由于该关键词可能由几个词组成,所以类WordIn对得到的关键词做了处理,把wordstring 转换成“关键词;关键词;……”这样的形式,然后再将wordstring 的每个关键词逐个存入数组word[]中.

主操作类WordProcess 首先调用类WordIn 将输入框得到的关键词做处理,得到关键词数组word[].再通过一个循环操作依次把word[]传入类SearchInDB,得到每个关键词对应的文章ID,再对所有关键词对应的ID 进行比较,得到公共的id.为下文的页面生成系统做准备.

6 搜索系统实现

检索器的用户页面运用C#中的windows application 来实现.设置一个属于框和一个搜索按钮,将搜索关键词通过函数导入到处理类中.搜索页面截图如下图3 所示:

7 总 结

BBS 搜索系统可以实现小规模的BBS 文章搜索.由于系统的结构,响应时间与效率都有待优化,以及有些功能如文章排序等没有实现等问题,本系统欠缺的还很多,但是经过不断努力,终于将本系统的功能基本实现,还是感到十分欣慰的.相信经过不断地改进与完善,本系统一定能够成为一个高性能,易于维护的搜索系统.

[1] 申展,江宝林,唐磊,等.全文检索模型综述[J].计算机科学,2004(5):61-64.

[2] 王铖伟.电子商务智能搜索及挖掘系统检索器的设计[J].有色金属设计,2007(34):61-69.

[3] 张汛涞.搜索引擎的设计剖析[J].计算机工程与科学,2002(24):18-20.

[4] 刘晓华.精通MFC[M].北京:电子工业出版社,2003.

[5] 颜维龙,盖杰,武港山,等.面向网络的全文检索中索引文件的组织[J].计算机应用研究,2002(7):124-136.

猜你喜欢
数据表搜索引擎页面
刷新生活的页面
湖北省新冠肺炎疫情数据表
基于列控工程数据表建立线路拓扑关系的研究
网络搜索引擎亟待规范
图表
基于Nutch的医疗搜索引擎的研究与开发
基于VSL的动态数据表应用研究
基于Lucene搜索引擎的研究
网站结构在SEO中的研究与应用
浅析ASP.NET页面导航技术